当前位置:  开发笔记 > 编程语言 > 正文

为什么红色,绿色,蓝色图像通道是灰度级的(Matlab)?

如何解决《为什么红色,绿色,蓝色图像通道是灰度级的(Matlab)?》经验,为你挑选了1个好方法。

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);

它输出以下图像: 在此输入图像描述

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



1> Dan..:

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

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

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

如果您愿意,可以尝试将您的问题改为"MATLAB如何实现这一目标?".换句话说,如果您的红色通道是2D图像,那么MATLAB如何知道它是红色通道而不是绿色通道或灰度图像?挑战自己,想一个更实际的方式来表示这些数据.我认为这个练习将使您相信MATLAB在这个问题上的设计选择的优点.

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

推荐阅读
重庆制造漫画社
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有