【问题标题】:Strange behavior with Matlab arrayMatlab数组的奇怪行为
【发布时间】:2014-01-19 19:34:06
【问题描述】:

我在从灰度图像手动创建强度值直方图时遇到了一些问题。下面是我正在使用的代码,用于为我想要创建的绘图创建 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 强度的计数,它们都是正确的。但是,当使用上面的代码来累积强度值时,它不能正常工作。

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

【问题讨论】:

    标签: arrays matlab histogram accumulator


    【解决方案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.尝试使用 barimhisthist(grayImg(:)) 之类的函数,它可能会为您节省所有这些,并给出一个漂亮的情节。

    【讨论】:

    • 感谢您的回复,我曾尝试使用 bins = zeros(1,256) 但这没有帮助。我也知道 hist 函数但是,我试图通过不使用内置函数来创建图表。
    • grayImg 是什么格式?如果是 uint8,请尝试将其转换为 double,使用 double 函数。
    • 是的,它是第 8 单元。感谢您的回答,我实际上明白了这一点。我必须做的是转换为 int16,因为 8 位数字不能有 256 的值,而这正是我想要做的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-19
    • 2016-01-26
    • 2015-04-15
    • 1970-01-01
    • 2022-11-10
    • 2015-12-10
    相关资源
    最近更新 更多