我在手动从灰度图像创建强度值的直方图时遇到了一些麻烦。以下是我使用的代码,该代码用于为要创建的绘图创建仓位。该代码对于除最后两个容器以外的每个容器都可以正常工作。由于某种原因,如果强度为254或255,则会将两个值都放入254槽中,并且255槽中不会累积任何值。
bins= zeros(1,256);
[x,y]=size(grayImg);
for i = 1:x
for j = 1:y
current = grayImg(i,j);
bins(current+1) = bins(current+1) + 1;
end
end
plot(bins);
我不明白为什么会发生这种现象。我已打印出254个强度和255个强度的计数,它们都是正确的。但是,使用上述代码累积强度值时,它不能正常工作。
编辑:添加了我正在使用的图像,不正确的图形(我通过上述代码获得的图形)和正确的图形
答:您的代码的第一个问题是的初始定义bins
。看来您来自C或类似的东西,但定义应为-bins=zeros(1,256);
B.第二点是您不需要嵌套循环,而您有一个matlab函数,尤其是为此:
bins=hist(grayImg(:),1:256); % now, you don't need the pre-definition for 'bins'.
plot(bins);
C.尝试使用诸如bar
或imhist
或之类的函数hist(grayImg(:))
,它可能会节省您所有的时间,并给出漂亮的图。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句