我有一个图像让我们说a = imread('example.bmp'i从中得到了所有三个频道:
R=a(:,:,1);
G=a(:,:,2);
B=a(:,:,3);
我有它的灰色图像:
igray=rgb2gray(a);
我可以从灰色图像中获取红色成分吗?
答案 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。