使用Matlab数组的奇怪行为

时间:2014-01-19 19:34:06

标签: arrays matlab histogram accumulator

我在从灰度图像手动创建强度值的直方图时遇到了一些麻烦。下面是我正在使用的代码创建我想要创建的绘图的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个强度的数量,它们都是正确的。但是,使用上述代码累积强度值时,它无法正常工作。

编辑:添加了我正在使用的图片,错误的图表(我在上面的代码中得到的图片)和正确的图片

grayscale image

Incorrect graph

Correct graph

1 个答案:

答案 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);

℃。尝试使用barimhisthist(grayImg(:))等功能,它可以为您节省所有这些,并提供一个很好的情节。

相关问题