2011-10-09 342 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之间。