0

我在从灰度图像手动创建强度值直方图时遇到了一些麻烦。下面是我正在使用的代码,用于为我想要创建的绘图创建 bin。除了最后两个之外,该代码适用于每个 bin。出于某种原因,如果强度为 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 强度的计数,它们都是正确的。但是,当使用上面的代码来累积强度值时,它不能正常工作。

编辑:添加了我正在使用的图像,不正确的图表(我用上面的代码得到的那个),以及正确的一个

灰度图像

不正确的图表

正确的图表

4

1 回答 1

1

A. 您的代码的第一个问题是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. 尝试使用baror imhistor之类的函数hist(grayImg(:)),它可能会为您节省所有这些,并给出一个漂亮的情节。

于 2014-01-19T19:48:27.673 回答