将 8 位 RGB 图像转换为灰度图像
您可以对整型数据执行数学运算,这样可以直接转换图像类型,而无需先转换图像数据的数值类。
此示例将一个 8 位 RGB 图像读入 MATLAB 变量,并将其转换为灰度图像:
rgb_img = imread('ngc6543a.jpg'); % Load the imageimage(rgb_img) % Display the RGB image
axis image;
注意
该图像是在太空望远镜科学研究所(由大学天文研究联合组织管理)支持下根据 NASA 合同 NAs5-26555 创建的,并得到 AURA/STScI 的复制许可。使用者可以免版权费获得由 AURA/ STScI 制作的图像的数字版本。感谢:J.P. Harrington 和 K.J. Orkowski(马里兰大学)以及 NASA。
基于 NTSC 标准合并 RGB 值,以此方式来计算单色亮度,这会将与眼睛敏感度相关的系数应用到 RGB 颜色:
I = .2989*rgb_img(:,:,1)...
+.5870*rgb_img(:,:,2)...
+.1140*rgb_img(:,:,3);
I 是具有整数值的强度图像,整数值范围从最小值零开始:
min(I(:))
ans =
0
到最大值 255:
max(I(:))
ans =
255
要显示图像,请使用 256 值的灰度颜色图。这样可以避免调整数据到颜色的映射,当使用不同尺寸的颜色图时通常需要进行此项调整。如果颜色图未包含每个数据值的项,则需使用 imagesc 函数。
现在使用灰度颜色图在新图窗中显示图像:
figure; colormap(gray(256)); image(I);
axis image;
相关信息
其他的颜色范围从深色到浅色连续变化的颜色图也可生成可用的图像。例如,使用 colormap(summer(256)) 生成经典的示波器样式。有关更多选项,请参阅 colormap。
brighten 函数可以让您增加或减少颜色图中的强度以补偿电脑显示差异或增强图像中模糊或明亮区域的可见性(其代价是另一端的颜色会有损失)。