灰度图像直方图似乎不对

时间:2019-01-13 14:52:48

标签: matlab image-processing

我正在尝试获取此256 * 256双灰度图像的直方图。 Grayscale image

这是imhist(img)显示的内容:

Histogram

在横坐标1处只有一条垂直高度为65536的垂直线。对我来说,这似乎不合适。我使用imhist错了吗?

3 个答案:

答案 0 :(得分:3)

我使用了imhist函数,并获得了该图片的直方图的正确结果。

Histogram

首先,我将其从RGB转换为灰度,因此可以使用imhist。 然后,我只是根据历史本身来作图。 我正在使用Matlab R2016a。

如下面链接中的Matlab帮助页面所述,您可以使用imhist绘制直方图 https://www.mathworks.com/help/images/ref/imhist.html

检查以下代码:

img = imread('C:\Users\farazpc.ir\Downloads\Telegram Desktop\AVWda.png');
img= rgb2gray(img);
 imhist(img)

希望它可以解决您的问题。

答案 1 :(得分:2)

我正在使用MATLAB R2017a,以下代码为我工作。希望它也对您有帮助...

I=imread('111.png');
imhist(I)
title('Histogram without rgb2gray function in MATLAB')
%%
I=rgb2gray(I);
figure
imhist(I)
title('Histogram with rgb2gray function in MATLAB')

结果

enter image description here

enter image description here

答案 2 :(得分:1)

根据the documentation

  

对于灰度图像,直方图的n个面元均为宽度A /(n-1)的半开间隔。

...其中,对于双数组,A为1。也就是说,对于您的双数组,bin宽度为1 /(n-1),其中n个bin,导致[0,1]的范围。

这是MATLAB在双精度数组中存储的图像的隐式范围。每次将双精度数组用作图像时,MATLAB都会假定其最大值为1。

您可以从直方图的x轴上分辨出来。

但是,您的图像可能具有较大的值,然后所有值都位于顶部的纸槽中。

一种解决方案是,当您读入图像时,使用im2double将其转换为双精度。

另一种解决方案是使用histogram函数,而不是imhist。此功能更加灵活和通用,并且可以使直方图更好。默认情况下,它将在整个数据范围内绘制直方图。