gpt4 book ai didi

image - 为什么图像的红色,绿色,蓝色 channel 分别是灰度(Matlab)?

转载 作者:太空宇宙 更新时间:2023-11-03 20:13:57 27 4
gpt4 key购买 nike

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

redChannel = rgbImage(:, :, 1);
greenChannel = rgbImage(:, :, 2);
blueChannel = rgbImage(:, :, 3);

例如原图为:
enter image description here

如果您显示红绿蓝 channel ,您会得到这些灰度图像: enter image description here

如果将这些 channel 之一与两个黑色矩阵(零矩阵)连接起来,您会得到彩色图像。让我们将每个 channel 与其余 channel 的黑色图像矩阵连接起来:

blackImage = uint8(zeros(rows, columns));
newRedChannel = cat(3, redChannel, blackImage, blackImage);
newGreenChannel = cat(3, blackImage, greenChannel, blackImage);
newBlueChannel = cat(3, blackImage, blackImage, blueChannel);

它输出以下图像: enter image description here

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

最佳答案

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

另请注意,当我们说灰度时,我们实际上指的是 indexed image。 .因此,您可以通过应用 colourmap 使其成为彩色图像。 .如果您要应用从黑色到红色的颜色图,那么您的 2D 矩阵将显示为上面的红色图像。问题是,MATLAB 如何知道要应用什么颜色图?是的,这确实比彩色图像占用更少的空间。但它增加了代码的复杂性。

另一方面,问问自己,如果将两个颜色 channel 设置为零,您希望图像看起来像什么?唯一合乎逻辑的答案就是您在上面创建的单独的颜色 channel 图像。

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

另外值得注意的是,许多文件格式,例如.bmp,同理。

关于image - 为什么图像的红色,绿色,蓝色 channel 分别是灰度(Matlab)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34283133/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com