我有一张我读过的图像,它的像素值存储在一个矩阵中。我正在尝试为我打算绘制直方图的矩阵获取频率表。我正在尝试仅使用矩阵表达式(即没有 for 循环/imhist 函数)来执行此操作。我查看了一个名为 histc() 的函数,它可以计算矩阵中的值,但我不知道如何使用它。如果有人能指出我正确的方向,我将不胜感激。谢谢
问问题
2149 次
2 回答
2
尝试:
hist(image(:),min(image(:)):max(image(:)));
这将绘制像素值的直方图,包括图像具有的整个值范围。
于 2012-11-03T22:00:26.127 回答
1
虽然这是一篇旧文章,但我们也可以使用accumarray
:
h = accumarray(double(im(:))+1, 1, [double(intmax(class(im)))+1 1]);
h
将包含每个强度级别遇到多少像素的直方图/频率计数。我们将所有值 inim
和 offset by1
作为 MATLAB 索引数组,1
而不是从0
. 图像的强度将从 开始0
。我们还想指定直方图的大小,以从0
我们拥有的此类支持的尽可能多的强度。我们可以通过做来找出图像支持的最大强度intmax(class(im))
。因此,我们可以支持的可能强度的总数是intmax(class(im)) + 1
。的第三个参数accumarray
指定我们的直方图的输出大小。
请注意,您需要转换intmax
调用以及图像im
,double
因为返回的是该类型的最大整数,并且属于该类型。因此,加 1 只会使值饱和而不是注册。因此,您需要进行强制转换,double
以便添加可以正确注册。
于 2014-06-26T19:02:05.887 回答