答案 0 :(得分:3)
我使用了imhist函数,并获得了该图片的直方图的正确结果。
首先,我将其从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')
结果
答案 2 :(得分:1)
对于灰度图像,直方图的n个面元均为宽度A /(n-1)的半开间隔。
...其中,对于双数组,A为1。也就是说,对于您的双数组,bin宽度为1 /(n-1),其中n个bin,导致[0,1]的范围。
这是MATLAB在双精度数组中存储的图像的隐式范围。每次将双精度数组用作图像时,MATLAB都会假定其最大值为1。
您可以从直方图的x轴上分辨出来。
但是,您的图像可能具有较大的值,然后所有值都位于顶部的纸槽中。
一种解决方案是,当您读入图像时,使用im2double
将其转换为双精度。
另一种解决方案是使用histogram
函数,而不是imhist
。此功能更加灵活和通用,并且可以使直方图更好。默认情况下,它将在整个数据范围内绘制直方图。