% read image
I = imread(im);
H = zeros(256,1);
% m = width, n = height
[m,n] = size(I);
% loop for checking values
for GrayValue = 0:255
for i = 1:m
for j = 1:n
if I(i,j) == GrayValue % read each pixel coordinate
H(GrayValue+1) = H(GrayValue+1)+1;
end
end
end
end
此功能将图像文件作为im
获取,并显示图像中值的直方图。如何减少执行此MATLAB功能所需的时间。它类似于imhist()
。但我想做一个类似的imhist()
函数。我无法弄清楚要删除哪个循环。
答案 0 :(得分:2)
强制性bsxfun
解决方案:
H=sum(bsxfun(@eq,I(:),0:255))
一种可能更容易理解的方法。这只是用搜索替换你的两个内部循环。
I=randi(256,50,50)-1;
H=zeros(256,1);
G=zeros(256,1);
for GrayValue=0:255
[ii,jj]=find(I==GrayValue);
G(GrayValue+1)=length(ii);
end
答案 1 :(得分:1)
假设I
是灰度图像,您可以使用 histc
来获取H
-
H = sum(histc(I,0:255),2)
因此,完整的代码将是 -
% read image
I = imread(im);
H = sum(histc(I,0:255),2)
如果您正在寻找一些不太高级的代码,您可以避免一个嵌套循环 -
% read image
I = imread(im);
H = zeros(256,1);
% loop for checking values
for GrayValue = 0:255
for i = 1:numel(I)
if I(i) == GrayValue % read each pixel coordinate
H(GrayValue+1) = H(GrayValue+1)+1;
end
end
end