1

我有一张我读过的图像,它的像素值存储在一个矩阵中。我正在尝试为我打算绘制直方图的矩阵获取频率表。我正在尝试仅使用矩阵表达式(即没有 for 循环/imhist 函数)来执行此操作。我查看了一个名为 histc() 的函数,它可以计算矩阵中的值,但我不知道如何使用它。如果有人能指出我正确的方向,我将不胜感激。谢谢

4

2 回答 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调用以及图像imdouble因为返回的是该类型的最大整数,并且属于该类型。因此,加 1 只会使值饱和而不是注册。因此,您需要进行强制转换,double以便添加可以正确注册。

于 2014-06-26T19:02:05.887 回答