2013-02-04 268 views
15

我讀使用如何在Matlab中顯示RGB圖像的直方圖?

input = imread ('sample.jpeg'); 

然後我做

imhist(input); 

它給這個錯誤在MATLAB的圖像:

??? 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。我知道第三個維度是用於顏色通道,但是有什麼方法可以顯示這個直方圖嗎?謝謝。

回答

25

imhist顯示一個灰度二進制圖像的直方圖。在圖像上使用rgb2gray,或使用imhist(input(:,:,1))一次查看一個通道(本例中爲紅色)。

或者你可以這樣做:

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

顯示3個通道同時...

4

的histogarm情節將會對強度級別的像素數。 你的是一個RGB圖像。所以你首先需要把它轉換成強度圖像。

這裏的代碼將是:

input = imread ('sample.jpeg'); 

input=rgb2gray(input); 

imhist(input); 

imshow(input); 

您將能夠獲得圖像的直方圖。

+0

完全錯誤不工作... –

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(全部強度或白色)範圍內的值。

0

直方圖可用於分析圖像中的像素分佈。直方圖繪製圖像中像素的數量與強度值的關係。

img1=imread('image.jpg'); 
hist(img1); 
+1

他是不是問這個? –

12

我pefere繪製的紅色,綠色和藍色柱狀圖在一個情節:

%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');