18

我在 matlab 中使用

input = imread ('sample.jpeg');

然后我做

imhist(input);

它给出了这个错误:

??? Error using ==> iptcheckinput
Function IMHIST expected its first input, I or X, to be two-dimensional.

Error in ==> imhist>parse_inputs at 275
iptcheckinput(a, {'double','uint8','logical','uint16','int16','single'}, ...

Error in ==> imhist at 57
[a, n, isScaled, top, map] = parse_inputs(varargin{:});

运行后size(input),我看到我的输入图像大小300x200x3。我知道第三维是用于颜色通道的,但是有什么方法可以显示直方图吗?谢谢。

4

5 回答 5

29

imhist显示灰度二值图像的直方图。rgb2gray在图像上使用,或用于一次imhist(input(:,:,1))查看一个通道(在此示例中为红色)。

或者,您可以这样做:

hist(reshape(input,[],3),1:max(input(:))); 
colormap([1 0 0; 0 1 0; 0 0 1]);

同时显示3个频道...

于 2013-02-04T08:34:07.113 回答
14

我喜欢在一个图中绘制红色、绿色和蓝色的直方图:

%Split into RGB Channels
Red = image(:,:,1);
Green = image(:,:,2);
Blue = image(:,:,3);

%Get histValues for each channel
[yRed, x] = imhist(Red);
[yGreen, x] = imhist(Green);
[yBlue, x] = imhist(Blue);

%Plot them together in one plot
plot(x, yRed, 'Red', x, yGreen, 'Green', x, yBlue, 'Blue');
于 2014-11-03T18:21:14.077 回答
5

直方图将具有强度级别的像素数。你的是 rgb 图像。因此,您首先需要将其转换为强度图像。

这里的代码将是:

input = imread ('sample.jpeg');

input=rgb2gray(input);

imhist(input);

imshow(input);

您将能够获得图像的直方图。

于 2013-05-24T09:53:17.073 回答
3
img1=imread('image.jpg');
img1=rgb2gray(img1);
subplot(2,2,1);
imshow(img1);
title('original image');
grayImg=mat2gray(img1);
subplot(2,2,2);
imhist(grayImg);
title('original histogram');

记得包含 mat2gray(); 因为它将矩阵A转换为强度图像grayImg。返回的矩阵 grayImg 包含 0.0(黑色)到 1.0(全强度或白色)范围内的值。

于 2013-08-20T13:10:50.497 回答
0

直方图可用于分析图像中的像素分布。直方图绘制图像中相对于强度值的像素数。

img1=imread('image.jpg');
hist(img1);
于 2013-11-16T10:44:35.293 回答