Image 为什么图像的红、绿、蓝通道分别是灰度的(Matlab)?

Image 为什么图像的红、绿、蓝通道分别是灰度的(Matlab)?,image,matlab,image-processing,rgb,Image,Matlab,Image Processing,Rgb,Matlab将图像存储为三维数组。前两个维度对应于上图轴上的数字。每个像素由图像第三维中的三个条目表示。这三层中的每一层都表示像素阵列中红色、绿色和蓝色的强度。我们可以通过以下方式提取图像中独立的红、绿、蓝分量: redChannel = rgbImage(:, :, 1); greenChannel = rgbImage(:, :, 2); blueChannel = rgbImage(:, :, 3); 例如,原始图像是: 如果显示红色、绿色和蓝色通道,将获得以下灰度图像: 如果将其中

Matlab将图像存储为三维数组。前两个维度对应于上图轴上的数字。每个像素由图像第三维中的三个条目表示。这三层中的每一层都表示像素阵列中红色、绿色和蓝色的强度。我们可以通过以下方式提取图像中独立的红、绿、蓝分量:

redChannel = rgbImage(:, :, 1);
greenChannel = rgbImage(:, :, 2);
blueChannel = rgbImage(:, :, 3);
例如,原始图像是:

如果显示红色、绿色和蓝色通道,将获得以下灰度图像:

如果将其中一个通道与两个黑色矩阵(零矩阵)连接,则会得到彩色图像。让我们将每个通道与剩余通道的黑色图像矩阵连接起来:

blackImage = uint8(zeros(rows, columns));
newRedChannel = cat(3, redChannel, blackImage, blackImage);
newGreenChannel = cat(3, blackImage, greenChannel, blackImage);
newBlueChannel = cat(3, blackImage, blackImage, blueChannel);
它输出以下图像:


为什么会这样?为什么每种颜色的单个通道必须与剩余通道的零矩阵(黑色图像)连接,以便在显示时为其着色?如果单独显示,为什么单独的颜色通道实际上只是灰度图像

在MATLAB中,灰度图像表示为2D矩阵。彩色图像作为3D矩阵。红色图像仍然是彩色图像,因此它仍然必须是3D图像。由于它是纯红色图像,因此没有其他颜色,因此绿色和蓝色通道应为空,因此矩阵为零

还要注意,当我们说灰度时,实际上是指一个。所以你可以通过应用一个。如果要应用从黑色到红色的彩色贴图,则2D矩阵将显示为上面的红色图像。问题是,MATLAB如何知道应用什么颜色映射?是的,这确实比彩色图像占用更少的空间。但是它增加了代码的复杂性

另一方面,问问你自己,如果你把两个颜色通道设置为零,你希望一个图像是什么样子?唯一合乎逻辑的答案就是您在上面创建的独立彩色通道图像

如果您愿意,请尝试将您的问题改写为“否则MATLAB如何实现此功能?”。换句话说,如果红色通道是2D图像,MATLAB如何知道它是红色通道而不是绿色通道或灰度图像?挑战自己,想出一种更实用的方法来表示这些数据。我认为这个练习会让你相信MATLAB在这个问题上的设计选择的优点

此外,值得注意的是,许多文件格式(如bmp)的工作方式相同