我在从灰度图像手动创建强度值的直方图时遇到了一些麻烦。下面是我正在使用的代码创建我想要创建的绘图的bin。代码适用于除最后两个之外的每个bin。出于某种原因,如果强度为254或255,则将两个值都放入254 bin中,并且不会在255 bin中累积值。
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个强度的数量,它们都是正确的。但是,使用上述代码累积强度值时,它无法正常工作。
编辑:添加了我正在使用的图片,错误的图表(我在上面的代码中得到的图片)和正确的图片
答案 0 :(得分:1)
一个。您的代码的第一个问题是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);
℃。尝试使用bar
或imhist
或hist(grayImg(:))
等功能,它可以为您节省所有这些,并提供一个很好的情节。