0

我有一张图片让我们说 a=imread('example.bmp'我从它得到了所有三个通道:

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

我有它的灰色图像:

 igray=rgb2gray(a); 

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

4

3 回答 3

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如果您愿意,也可以使用该功能。

于 2013-06-07T17:10:54.850 回答
0

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

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

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

于 2013-06-07T16:57:54.960 回答
0

While nothing in horchler's very long answer is incorrect, I think you just want to get the red channel from the rgb image which is very easy.

A=imread('colorImg.jpg')

redChannel=A(:,:,1)

That's it!

That will return a matrix of type uint8, to convert to double, just do double(redChannel) and you can multipy/divide it by 255 as necessary.

于 2013-06-07T19:02:36.393 回答