【问题标题】:How to get the red image from gray image in matlab如何在matlab中从灰色图像中获取红色图像
【发布时间】:2013-06-04 00:54:58
【问题描述】:

我有一张图片,可以说 a=imread('example.bmp'我从中得到了所有三个频道:

R=a(:,:,1);
G=a(:,:,2);
B=a(:,:,3); 

我有它的灰色图像:

 igray=rgb2gray(a); 

我可以从灰色图像中获取红色分量吗?

【问题讨论】:

  • 根据定义,灰度图像中的所有 3 个分量必须相等,否则您将不再处理灰度。例如灰度图像没有颜色成分。它们只是一个“这个像素有多亮/多暗”。
  • 您的问题是关于将灰度图像分离为 R、G、B 通道并仅使用 R 通道(在这种情况下,Marc 的评论是相关的 - 所有三个都相等且等效于灰色分量),或“我可以反转 RGB-> 灰度转换以获取颜色信息吗?”,在这种情况下答案是否定的,因为您已经丢弃了颜色信息。然而,有一些着色算法可以给你一些假颜色......

标签: matlab


【解决方案1】:

不,你不能,因为 igray 将是一个二维图像(a 是三维的,第三维是颜色平面),只包含每个像素的强度值。

要将 RGB 图像转换为灰度图像,rbg2gray 使用了一个公式,您可以找到 here

如您所见,这是一个 3 变量方程,因此您无法单独使用强度值找到它们。

【讨论】:

    【解决方案2】:

    rgb2gray 函数有效地对每个 RGB 像素执行此操作(类型为 edit rgb2gray):

    Gray = 0.298936021293776*Red+0.587043074451121*Green+0.114020904255103*Blue;
    

    如果您在上面的等式中只有Gray,那么您就有一个包含三个未知数的等式。需要更多信息来解决Red

    如果您只想要一个 RGB 图像,其中每个通道都具有相同的组件,即由 rgb2gray 创建的组件,那么使用

    igray(:,:,3) = rgb2gray(a); % Set last component first to fully allocate array
    igray(:,:,1) = igray(:,:,3);
    igray(:,:,2) = igray(:,:,3);
    

    或者一个RGB图像,其中所有通道都等价于红色通道:

    igray(:,:,3) = a(:,:,1);
    igray(:,:,1) = a(:,:,1);
    igray(:,:,2) = a(:,:,1);
    

    如果您愿意,也可以使用repmat 函数。

    【讨论】:

      【解决方案3】:

      虽然 horchler 很长的答案中没有什么是不正确的,但我认为您只想从 rgb 图像中获取红色通道,这很容易。

      A=imread('colorImg.jpg')
      
      redChannel=A(:,:,1)
      

      就是这样!

      这将返回一个 uint8 类型的矩阵,要转换为 double,只需执行 double(redChannel),您可以根据需要将其乘以/除以 255。

      【讨论】:

        猜你喜欢
        • 2013-12-20
        • 2010-12-19
        • 1970-01-01
        • 2014-09-11
        • 2012-04-12
        • 1970-01-01
        • 2011-04-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多