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

时间:2013-06-07 16:24:41

标签: matlab

我有一个图像让我们说a = imread('example.bmp'i从中得到了所有三个频道:

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

我有它的灰色图像:

 igray=rgb2gray(a); 

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

3 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

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功能。

答案 2 :(得分:0)

虽然horchler的长篇答案中没有任何内容是错误的,但我认为您只是想从rgb图像中获取红色通道,这非常容易。

A=imread('colorImg.jpg')

redChannel=A(:,:,1)

就是这样!

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