嗨,谁能告诉我代码如何在没有matlab工具箱(imhist,hist)的情况下创建直方图?

时间:2017-01-12 12:11:33

标签: matlab histogram toolbox

任何人都可以告诉我如何在没有matlab功能的情况下从灰度图像创建直方图。

由于

1 个答案:

答案 0 :(得分:0)

比你的代码更有效:

histogram = zeros(1,256);
for value = 1:256 % loop through possible values
    histogram(value) = histogram(value) + length(find(F(:)==value));
end

请注意,此代码会为1到256之间的值生成直方图。对于灰度图像,您可能需要0到255之间的图像。但是我可以让您自己更改这一点以进行练习。

修改: 由于您要求修改代码,请让我对其进行评论:

 [m n]=size(F);
 x=0;

无需将x设置为零,您将在以后覆盖它。

 H=0;

不应将H设置为零,而应将其初始化为数组,因为您希望稍后填充H(x)。像H = zeros(1,256);

这样的东西
for z=1:256

我不确定z上的这个循环应该做什么。你永远不会使用z。你可以删除它。

for i=1:m
    for j=1:n       
        x==F(i,j);

正如我在下面所说,这应该是x=F(i,j);,因为==是对平等的考验。

        H(x+1)=H(x+1)+1

如果F中的所有值都保证在0到255之间,则此方法有效。虽然我会说它的风格不是很好。

另外,在此行的末尾加一个分号来抑制输出,否则你的命令行会被淹没(这也会减慢很多东西)。

    end
end
H;

最后一行什么也没做。它为什么存在?

end

不需要z上的外环(见上文)。

所以,这是一个"消毒"您的代码版本:

[m,n] = size(F);
H = zeros(1,256);
for i=1:m
    for j=1:n
        x=F(i,j);
        H(x+1)=H(x+1)+1;
    end
end

希望这有帮助。