我有一个我已读入的图像,其像素值存储在矩阵中。我试图获得矩阵的频率表,我打算绘制直方图。我试图只使用矩阵表达式(即没有循环/ imhist函数)。我查看了一个名为histc()的函数,它可以计算矩阵中的值,但我不知道如何使用它。如果有人能指出我正确的方向,我真的很感激。感谢
答案 0 :(得分:2)
尝试:
hist(image(:),min(image(:)):max(image(:)));
这将绘制像素值的直方图,包括图像具有的整个值范围。
答案 1 :(得分:1)
虽然这是一篇旧帖子,但我们也可以使用accumarray
:
h = accumarray(double(im(:))+1, 1, [double(intmax(class(im)))+1 1]);
h
将包含每个强度级别遇到的像素数的直方图/频率计数。我们将im
中的所有值和1
的值相加,因为MATLAB将数组从1
开始而不是0
。图像的强度将从0
开始。我们还想指定直方图的大小,从0
到我们拥有的这个类所支持的强度。我们可以通过intmax(class(im))
找出图像支持的最大强度。因此,我们可以支持的可能强度总数为intmax(class(im)) + 1
。 accumarray
的第三个参数指定了直方图的输出大小。
请注意,您需要使用intmax
转换im
调用以及图像double
,因为返回的是类型的最大整数,它是那种类型。因此,添加1将简单地使值饱和而不进行注册。因此,您需要转换为double
,以便添加可以正确注册。