2011-10-09 146 views
1

我有一個RGB圖像,並希望將以下公式應用於此,以便獲得另一幅圖像。我怎樣才能做到這一點?我知道如何讀/寫圖像,我知道如何循環和應用公式,但我不知道在三維平面中提取3個平面的變量和圖像像素值的圖像的行數和列數的函數。手動將RGB RGB圖像轉換爲灰度圖

I = imread('myimage.jpg'); 

RGBImagePixles = [?, ?, ?] %of I 

ROWS = ? %of I 
COLUMNS = ? %of I 

for r = 0 : ROWS 
    for c = 0 : COLUMNS 
     N[r, c] = RGBImagePixles[r,c,1] + RGBImagePixles[r,c,2] + RGBImagePixles[r,c,3] 
    end 
end 

figure, imshow(N); 
+0

請記住,Matlab數組(和圖像)是從1到N.此外,與圖像相關的類型(類(I))可能會使添加RGBImagePixels時出現問題。 – carlosdc

回答

1

imread輸出是3維陣列,實際上3點矩陣沿第三維層疊 - 因此,如果您的圖像是m個像素高和n個像素寬,你會得到一個m×n個×3陣列。 這樣:

RGBImagePixles = I; 
ROWS = size (I,1); 
COLUMNS = size(I,2); 

,您可以用替換循環:

N = sum(I, 3); 

不過,我不知道這簡單相加是你爲了產生灰度圖像所需要的。

1

[ROWS COLUMNS DIMS] = size(I);

1

我假設RGB到灰度只是一個例子,你真正的目標是學習如何操作圖像的像素。否則,你應該只使用:

ImageRGB = imread('yourfile.jpg') 
ImageGray = rgb2gray(ImageRGB) 

用手做:

ImageRGB = imread('yourfile.jpg') 
ImageGray = sum(ImageRGB,3)/(3*255) 

你必須通過3 * 255,因爲MATLAB預計灰度圖像的值在0和1之間的分裂,而每個通道的RGB值將在0到255之間。

相關問題