在matlab中如何从灰度图像中提取红色图像

在matlab中如何从灰度图像中提取红色图像,matlab,Matlab,我有一个图像,比如a=imread('example.bmp'我从中获得了所有三个通道: R=a(:,:,1); G=a(:,:,2); B=a(:,:,3); 我有它的灰色图像: igray=rgb2gray(a); 我可以从灰色图像中获取红色分量吗?不可以,因为igray是二维图像(a是三维的,第三维是颜色平面),只包含每个像素的强度值 要将RGB图像转换为灰度,rbg2gray使用可以找到的公式 如您所见,这是一个3变量方程,因此您无法单独使用强度值来找到它们。rgb2gray函

我有一个图像,比如a=imread('example.bmp'我从中获得了所有三个通道:

R=a(:,:,1);
G=a(:,:,2);
B=a(:,:,3); 
我有它的灰色图像:

 igray=rgb2gray(a); 

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

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

要将RGB图像转换为灰度,rbg2gray使用可以找到的公式


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

rgb2gray函数有效地对每个RGB像素执行此操作(键入
编辑rgb2gray
):

如果上面的等式中只有
灰色
,那么就有一个含有三个未知数的等式。需要更多信息来求解
红色

如果您只需要一个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功能。

虽然horchler很长的答案中没有什么是不正确的,但我认为您只想从rgb图像中获得红色通道,这非常简单

A=imread('colorImg.jpg')

redChannel=A(:,:,1)
就这样


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

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

redChannel=A(:,:,1)