Matlab RGB图像手动灰度

时间:2011-10-09 07:36:51

标签: image matlab

我有一个RGB图像,想要将以下公式应用到它,所以我得到另一个图像。我怎样才能做到这一点?我知道如何读/写图像,我知道如何循环和应用公式,但我不知道在三维平面中提取变量和3个平面的图像像素值的图像行数和列数的函数。 / p>

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

3 个答案:

答案 0 :(得分:1)

imread的输出是一个三维数组,实际上是沿着第三维堆叠的3个矩阵 - 所以如果你的图像是m像素高和n像素宽,你会得到一个m x n x 3数组。 这样:

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

你可以用以下代码替换循环:

N = sum(I, 3);

但是,我不确定是否需要简单求和才能生成灰度图像。

答案 1 :(得分:1)

[ROWS COLUMNS DIMS] = size(I);

答案 2 :(得分: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之间。