【问题标题】:Matlab RGB Image to Gray Scale ManuallyMatlab RGB图像手动转换为灰度
【发布时间】:2011-12-03 20:43:56
【问题描述】:

我有一张 RGB 图像,想对其应用以下公式,以便获得另一张图像。我怎样才能做到这一点?我知道如何读/写图像,我知道如何循环和应用公式,但我不知道如何提取变量中图像的行数和列数以及 3 维平面中 3 个平面的图像像素值的函数。

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

【问题讨论】:

  • 请记住,Matlab 数组(和图像)是从 1 到 N。此外,与图像关联的类型(类(I))可能会使添加 RGBImagePixels 变得有问题。

标签: image matlab


【解决方案1】:

imread 的输出是一个 3 维数组,实际上是 3 个矩阵沿第 3 维堆叠 - 因此,如果您的图像是 m 像素高和 n 像素宽,您将得到一个 m x n x 3 数组。 所以:

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

您可以将循环替换为:

N = sum(I, 3);

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

【讨论】:

    【解决方案2】:

    [行列尺寸] = 大小(I);

    【讨论】:

      【解决方案3】:

      我假设 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 之间。

      【讨论】:

        猜你喜欢
        • 2016-10-18
        • 2021-04-02
        • 2015-07-11
        • 2014-02-26
        • 2014-12-22
        • 2023-04-02
        • 1970-01-01
        • 2013-10-25
        相关资源
        最近更新 更多