写在前面
DIP-Digital Image Processing-数字图像处理,是计算机图形学和计算机视觉的重要基础,本系列文章是根据“冈萨雷斯《数字图像处理》(第四版)”教材的顺序展开,解释数字图像处理中的重要知识点,同时也可作为期末复习笔记。
- 第一、二章 序论、数字图形基础
- 第三章 灰度变换与空间滤波
- 第四章 频率域滤波
- 第六章 彩色图像处理
- 第八章 图像编码基础
- 第十-十一-十二章 图像分割描述识别
- 上机作业
目录
彩色基础
图像按颜色分类,可分为单色图像、全(真)彩色图像、伪彩色图像、假彩色图像(具体可见本专栏《1.数字图像基础--图像的分类》),本教材、本文为指明情况下默认讨论的被处理图象是真彩色图象。
- 灰度分辨能力:大约64级灰度
- 颜色分辨能力:能区分超过200种颜色(?)
颜色的本质:人眼视觉系统对光波的感知所产生的视知觉。
表示颜色的三要素
- 色调(Hue):指颜色的基本属性,也就是我们通常所说的颜色种类,例如红色、绿色、蓝色等。它决定了颜色的类型和差别。
- 饱和度(Saturation)表示色彩的纯净度或强度。饱和度越高,颜色看起来越鲜艳、纯净;饱和度越低,颜色越接近灰色,显得更柔和或暗淡。
- 相对饱和度的概念与颜色的对比环境有关。例如,鲜艳的蓝色在一组淡色的背景中看起来更饱和,但与深蓝色或纯蓝色相比,它的饱和度依然不算最高。
- 在色彩编辑和调整中,增加饱和度往往指的是提升相对饱和度,让颜色更加生动。
- 要判断颜色的饱和度,我们可以通过以下方式:
- 色彩模型计算:在HSB(色相、饱和度、亮度)或HSL(色相、饱和度、亮度)(详见下)等模型中,饱和度是直接表示的。饱和度为100%或1的颜色是完全饱和的。
- 色彩成分的分析:对于RGB颜色模型,如果颜色的R、G、B三个通道值中有两个相等或非常接近,说明该颜色接近灰色或不饱和。例,颜色(128,128,128)是灰色,饱和度为0。
- 视觉判断:视觉上,如果颜色看起来非常明亮和纯净,没有混入灰色的成分,我们可以认为它是饱和的。
- 明度(Lightness or Brightness):表示颜色的明暗程度,决定了颜色的亮度。明度越高,颜色越接近白色;明度越低,颜色越接近黑色。
具体见下--HSV系统。
三基色原理
三基色原理:自然界中的绝大部分色光都可以用特殊选定的三种基本单色光复合而成。
如何描述颜色:大量实验证明,色光的颜色只与光的波长“分布”有关。国际照明委员会(CIE)选择红色(波长700.00nm),绿色(波长546.1nm)和蓝色(波长435.8nm)三种光作为表色系统的三基色。
如何对颜色进行量化:根据三基色原理,自然界中的大部分色光可以通过特定的红、绿、蓝三基色光的组合来量化和表示。通过调节红、绿、蓝三种光的强度,我们可以量化并表示出其他的颜色,比如红、黄、蓝、绿等颜色。Q=R(R)+G(G)+B(B)
光通量(Luminious flux):光源在单位时间内发出的光亮总和称为光源的光通量。光亮与人眼对光的敏感程度有关,不仅仅由光的能量决定。 1W(瓦)=680lm(流明)
例如:一只40W的普通白织灯的光通量为350---470lm,而一只40W的普通直管形荧光灯的光通量为2800lm左右,为白织灯的6--8倍。
T单位制
- 1T单位红光=0.30lm
- 1T单位绿光=0.59lm
- 1T单位蓝光=0.11lm
颜色的复合:
加色法:
减色法:
在印刷行业,以色料减色法为基础的基本模型为C(Cyan青色)M(Magenta品红)Y(Yellow黄),但是目前生产不出理想品质的油墨,所以实用的模型是CMYK,其中K是黑色。
色度图
色度(Chromaticity):描述的是颜色的质量,但不包括亮度。色度主要由色调和饱和度(Saturation)两个方面组成。
色度图用于表示颜色的色度(色彩属性)。色度图帮助我们理解不同颜色在色谱中的位置,以及它们之间的关系和相互作用。
横轴对应红色的色系数r,纵轴对应绿色的色系数g,蓝色的色系数可由x + y +z =1求得,它在与纸面垂直的方向上 。图中各点给出光谱中各颜色的色度坐标。
- (1)色度点与颜色:在色度图中每点都对应一种可见的颜色。反过来,任何可见的颜色都在色度图中占据确定的位置。
- (2)轮廓与纯度:在色度图轮廓上的点代表纯颜色,移向中心表示混合的白光增加而纯度减少。
- (3)互补色:在色度图中,过C点直线端点的两彩色互补。互补色混合在一起可以产生白色或中性色(指的是没有明显色调的颜色,包括黑色、白色和各种灰色。它们不具有彩色成分,也就是说,它们不偏向任何特定的波长,不含有色彩的纯净度(即色相或饱和度,完全不饱和),只有明暗变化,不会干扰主色调。)。
- (4)轮廓与色调:在色度图轮廓上的各点具有不同的色调(色相),这定义了颜色的类型(如红、绿、蓝等)。
- (5)在色度图中连接任两端点的直线上的各点表示将这两端点所代表的彩色相加可组成的一种新彩色。
PAL(Phase Alternating Line)和 NTSC(National Television System Committee)是两种模拟电视广播编码系统,属于电视和视频信号传输的范畴。它们是用于电视广播、视频录制和信号传输的标准,在全球各地区有不同的使用范围:
-
NTSC:
- 区域:主要用于北美(如美国和加拿大)、日本、韩国等。
- 特点:NTSC制式采用60赫兹刷新率(59.94帧/秒),每帧525条扫描线。
- 色彩稳定性:NTSC制式在颜色稳定性方面稍差,特别容易受到信号干扰的影响,因此在某些情况下颜色失真问题更明显。
-
PAL:
- 区域:主要用于欧洲(如英国、德国等)、澳大利亚、中国和印度等地。
- 特点:PAL制式采用50赫兹刷新率(25帧/秒),每帧625条扫描线。
- 色彩稳定性:PAL制式每隔一帧交替变换相位,能有效减少颜色失真问题,因此色彩还原较好。
这两者的不同制式影响了电视、视频播放器和录像机的格式兼容性。例如,NTSC制式的录像带在PAL制式的播放设备上无法直接播放。
色彩的数学模型
如下的数量关系,都建立在T单位制之上。
RGB模型
RGB是一种基于物理设备的颜色模型,主要用于显示设备(如显示器、电视和投影仪)上。RGB颜色空间根据红、绿、蓝三种颜色的加权组合来表示颜色,适用于光的直接显示(加色法)。
以 RGB 三基色系统为基础,描述了如何将颜色分量表示在单位制上并归一化处理。
-
RGB 归一化表示:通过将红、绿、蓝(R、G、B)三原色的值进行归一化,可以得到 r、g、b 表示式:
归一化后的三基色分量的和 r+g+b=1,这个单位和的约束意味着所有颜色都可以表示在一个单位平面内。
-
颜色三角形:PPT 中的彩色三角形展示了颜色的分布。在这个三角形内,不同区域代表了不同颜色的组合:
- 三角形的顶点分别是纯红、纯绿和纯蓝。
- 三角形边上的位置代表两种颜色的混合,如红色和绿色的混合形成黄色,蓝色和绿色的混合形成青色,红色和蓝色的混合形成品红。
- 三角形内部则表示不同比例的 R、G、B 混合形成的各种颜色。
-
RGB 空间表示:三维的 RGB 空间图将红、绿、蓝三色的相对比例扩展到三维空间,这样可以直观地看到不同颜色的相对分布。
-
在HTML文档中:
XYZ系统
RGB系统适用于设备显示,但存在跨设备一致性的问题;CIE-XYZ系统则是一个更具普适性、与设备无关的颜色空间,专为实现颜色标准化和一致性设计。因此,不同设备可以通过CIE-XYZ作为中间色彩空间,来实现准确的颜色管理和匹配。
CIE-XYZ是一个基于人眼视觉特性的颜色空间,旨在标准化颜色表示。它并不直接基于物理设备,而是根据实验数据调整三基色,使得该颜色空间与人类视觉系统的响应相匹配。XYZ系统的Y值还与颜色的亮度相关,这为颜色描述提供了一个更科学的亮度参考。
XYZ系统的基色是虚拟的,X、Y和Z三个基色值并不对应于可见光谱中的实际颜色,而是人为设计出来的。这种设计使得XYZ空间可以涵盖人眼能感知的所有可见颜色范围,称为色域覆盖。
-
XYZ三刺激值:颜色空间中的任何颜色都可以表示为三种特定颜色刺激量的加权和。这里的X、Y和Z就是这三种刺激量,计算公式如下:
- X=0.490R+0.310G+0.200B
- Y=0.177R+0.812G+0.011B
- Z=0.010G+0.990B
这些公式中的系数是实验得出的,用于将RGB值转换为XYZ值。
-
色坐标 (x, y, z):XYZ颜色空间的色度信息可以用x、y、z三个参数来表示,这些参数为色度坐标。公式如下:
其中 x+y+z=1。
-
应用:在CIE-XYZ颜色空间中,Y值可以直接表示颜色的亮度,因此XYZ系统不仅可以描述色彩,还可以描述亮度。
CMYK模型
为了方便色彩管理,将一种颜色分解成带有色彩倾向的部分和中性灰部分。在具体应用中,这种分解有助于提高打印效率和质量。同样与设备有关。
例:CMYK(230,200,130)=(100,70,0)+(130,130,130),这个表达式是在解释一种颜色分解方式。具体来说,它表示如何将 CMY 颜色模型中的一种颜色(230, 200, 130)分解成一个纯色部分和一个中性灰色部分(见上《--色度图》部分有具体介绍)。以下是详细解释:
-
CMYK (230, 200, 130):
- 在此处,颜色值用的是 CMY模型 (青色C,洋红M,黄色Y) 的数值,而不是通常的 CMYK 模型 (青色C,洋红M,黄色Y,黑色K),其中 K (黑) 组件缺省或不考虑。
- 数值 (230, 200, 130) 表示青色、洋红和黄色的色彩值。
-
分解成 (100, 70, 0) + (130, 130, 130):
颜色 (230, 200, 130) 被分解成了两个部分:- (130, 130, 130): 这是一个中性灰色部分,意味着在CMY模型中等量添加青色、洋红和黄色产生的灰色成分。
- (100, 70, 0): 这是一个纯色部分(一个相对饱和的颜色,而不是一个绝对的“纯色”),表示纯青色和洋红色的值,而没有黄色的成分。
-
分解原理:
- 这种分解利用了 中性灰色 的概念,将原始颜色 (230, 200, 130) 分成 颜色饱和的部分 和 灰色部分。在CMY模型中,增加等量的CMY三色会产生不同明度的灰色。
- 这不是要单独用 (100, 70, 0) 来表示所有颜色,而是分解颜色的一种方法。此处只是为了说明,颜色 (230, 200, 130) 可以分解成两部分,一个是非灰色的色彩部分 (100, 70, 0),另一个是中性灰色部分 (130, 130, 130)。
- 这种分解是一种色彩管理和打印处理技术,可以将颜色分成色彩和灰色部分,以便更有效地使用CMY墨水。在一些打印机中,可以用黑色(K)来代替大量的灰色成分(即等量的CMY混合)。分离出灰色成分后,彩色部分和灰色部分分别处理,这在打印时可以减少墨水消耗并提高灰色区域的准确性。
RGB模型到CMYK模型的转换
RGB模型到CMY模型:
实际不可能产生真正的黑色,CMY模型到CMYK模型:
HSV、HSI、HSB模型
该模型是从RGB颜色模型转换而来的,其设计是基于人眼对颜色的感知,将颜色分为色调、饱和度和亮度(或强度)三个方面,这种模型更符合人眼的视觉特性。不是设备依赖的,与设备的物理特性无关。
- 色调(Hue):代表颜色的种类,由主波长决定,是人眼所能感知的颜色如红、黄、蓝等。
- 饱和度(Saturation):表示颜色的纯度或浓淡度,通常通过混入白光的比例来度量,饱和度越高,颜色越纯。
- 亮度/明度/辉度(Value/Intensity/Brightness):代表颜色的明亮程度,表示颜色的明暗程度。
HSI模型到RGB模型的转换
在该模型中,色调H通过角度来定义,而饱和度和亮度在二维平面上形成颜色实体,表示不同颜色的范围和分布。在三维空间上,它们可以组合成圆锥或圆柱体,能够形象地表示颜色的变化和范围。
将彩色图像转换为HSV 色彩空间代码
使用 rgb2hsv
函数将图像从 RGB 颜色空间转换为 HSV 颜色空间。
close all;
clear all;
% 读取图像文件 'b.jpg'
A = imread('b.jpg');
% 将 RGB 图像转换为 HSV 图像
B = rgb2hsv(A);
% 显示原始图像
subplot(2,2,1);
subimage(A);
title('Original');
% 显示 H (Hue) 分量
subplot(2,2,2);
subimage(B(:,:,1));
title('H component');
% 显示 S (Saturation) 分量
subplot(2,2,3);
subimage(B(:,:,2));
title('S component');
% 显示 V (Value) 分量
subplot(2,2,4);
subimage(B(:,:,3));
title('V component');
L*a*b*模型
L*a*b*颜色系统(也称为Lab颜色空间)是由国际照明委员会(CIE)开发的一种颜色表示方法。它旨在提供一种基于人眼视觉感知的颜色描述方式,因此Lab颜色空间与人类对颜色的主观感受更贴近。该模型是设备无关的。
Lab系统分为三个分量:
- L*:表示亮度(Lightness),范围一般为0到100,其中0表示黑色,100表示白色。它独立于颜色的实际色调和饱和度,主要控制颜色的明暗程度。
- a*:表示从绿色到红色的色度轴,负值表示绿色,正值表示红色。
- b*:表示从蓝色到黄色的色度轴,负值表示蓝色,正值表示黄色。
YUV、YCrCb 和 YIQ 模型
它们都是用于表示颜色的颜色空间,主要用于视频压缩和传输,尤其在模拟电视和数字视频处理中非常重要。
YUV
- Y:表示亮度(Luminance),即图像的明暗信息。
- U 和 V:表示色度(Chrominance)信息,U 和 V 通道分别表示蓝色和红色的偏移量。
- 用途:常用于PAL制式(欧洲的模拟电视系统)的视频信号传输。YUV可以在传输过程中减少色度信息的带宽,以降低带宽要求,而不显著影响图像质量,因为人眼对亮度的敏感度更高。(本专栏《1.数字图像基础》--主观亮度是进入人眼的光强的对数函数)
YUV模型到RGB模型的转换
YCrCb(YUV的离散形式)
- Y:表示亮度。
- Cr 和 Cb:分别表示红色和蓝色的色度分量。
- 用途:YCrCb广泛用于数字视频标准,如JPEG图像压缩和MPEG视频压缩。YCrCb更适合数字视频压缩,因为它可以有效地减少数据量,同时保留视觉质量。
YIQ
- Y:表示亮度。
- I 和 Q:表示色度信息,I 通道主要用于橙蓝色差,Q 通道用于紫绿色差。
- 用途:YIQ主要用于NTSC制式(美国、日本等使用的模拟电视系统)的视频信号。YIQ在色度压缩和图像质量方面有所优化,特别适合人眼的颜色感知特性。
YIQ模型到RGB模型的转换
伪色彩图像
灰度图像转换为索引值图像
将灰度图像转换为索引图像是将图像中的每个像素灰度值映射为一个特定的颜色表(调色板)中的索引值。这种转换常用于减少图像的数据量或对图像进行特定的颜色编码。
步骤概述:
- 建立调色板(颜色映射表):创建一个包含特定颜色的调色板,这个调色板包含有限的颜色数(例如256种颜色)。
- 映射灰度值到索引值:将灰度图像中的每个像素值映射到调色板中的一个索引值。例如,灰度值为120的像素可能被映射到调色板中第5个索引处的颜色。
- 生成索引图像:用索引值来代替原来的灰度值,这样得到的图像称为“索引图像”或“伪彩色图像”。
ind2rgb
函数用于将灰度图像与调色板映射为 RGB 图像。
close all;
clear all;
% 读取图片
A = imread('a.jpg');
B = rgb2gray(A);
% 显示原图
subplot(2,2,1);
subimage(A);
title('原图');
% 显示灰度图
subplot(2,2,2);
subimage(B);
title('图像灰度化');
% 使用 colormap 'jet' 生成索引值图像1
map1 = jet;
subplot(2,2,3);
subimage(ind2rgb(B, map1));
title('索引值图像1');
% 使用 colormap 'cool' 生成索引值图像2
map2 = cool;
subplot(2,2,4);
subimage(ind2rgb(B, map2));
title('索引值图像2');
% 将图像保存为索引图像
imwrite(ind2rgb(B, map1), 'a_ind.jpg');
灰度切割
用一个平行于图像坐标平面XY的平面()去切割图像亮度函数。对每一个输入灰度值,如果它在切割灰度值
之上就赋予某一种颜色,如果它在
之外就赋予另一种颜色。
强度分层
对每个原始图中像素的灰度值用三个独立变换来处理,像素值相同或相近的象素归于同一层,每层像素赋予不同的颜色。
- 左图 (R 通道):灰度值 f 较高的像素被映射为较高的红色值。这表示图像中亮度较高的区域会更倾向于红色。
- 中图 (G 通道):绿色通道的映射呈现为一个山形曲线,灰度值在中等范围时绿色值较高,低灰度和高灰度时绿色值都较低。这样在图像中灰度值适中的区域会显示更多的绿色。
- 右图 (B 通道):蓝色通道的映射则是一个反向曲线,灰度值较低的区域蓝色值较高,而较高灰度值时蓝色值较低。因此,图像中暗的区域会显示更多的蓝色。
这种方法可用于突出不同灰度值的区域,生成带有色彩的效果,有时用于数据可视化或图像增强。
伪色彩增强
对原来灰度图像中不同灰度值的区域赋予不同的彩色以更明显地区分它们是一种常用的彩色增强方法。因为这里原图是无彩色的,所以人工赋予的彩色常称为伪彩色。这个赋色过程
实际是一种着色过程。
从图像处理的角度看,输入是灰度图像,输出是彩色图像。
真色彩图像处理
- 对每个分量进行处理;
- 直接对彩色象素进行处理:
- 将RGB模式的图像增强为HSI模式的图像;
- 利用灰度增强方法增强其中的I分量;
- 再将结果转化为RGB模式的图像。
要点:保持颜色信息不丢失。
Matlab中的相关函数
1. cat
原理:按指定维度连接数组。 作用:可以将多个矩阵(如 RGB 图像的不同通道)拼接成一个完整的图像矩阵。 适用场景:用于将图像的 R、G、B 通道组合成彩色图像。
R = rand(100, 100); % 随机生成一个100x100的矩阵表示红色通道
G = rand(100, 100); % 绿色通道
B = rand(100, 100); % 蓝色通道
RGB_image = cat(3, R, G, B); % 将 R、G、B 通道合并成 RGB 彩色图像
imshow(RGB_image);
2. rgbcube
原理:在 MATLAB 中可以用来显示颜色立方体,直观展示 RGB 颜色空间。 作用:帮助可视化 RGB 颜色空间中颜色的分布。 适用场景:颜色空间的可视化。
rgbcube; % 显示 RGB 立方体
3. colormap
原理:定义图像显示时的颜色映射。 作用:用于修改图像的颜色映射模式,如灰度图转彩色显示等。 适用场景:调节图像的显示效果和色彩模式。
colormap('jet'); % 将当前图像的颜色映射设置为 'jet'
4. gray2ind, ind2gray
原理:gray2ind 将灰度图像转换为索引图像,ind2gray 将索引图像转换为灰度图像。 作用:在灰度图与索引图之间转换。 适用场景:需要处理带有索引颜色表的图像时使用。
gray_image = imread('a.tif');
[ind_image, map] = gray2ind(gray_image, 256); % 将灰度图转换为索引图
gray_image2 = ind2gray(ind_image, map); % 将索引图转换回灰度图
imshow(gray_image2);
5. rgb2ind, ind2rgb
原理:rgb2ind 将 RGB 图像转换为索引图像,ind2rgb 将索引图像转换为 RGB 图像。 作用:在 RGB 彩色图像与索引图像之间进行转换。 适用场景:在图像压缩或处理颜色表的场景中应用。
RGB = imread('a.png');
[ind_image, map] = rgb2ind(RGB, 256); % RGB 转换为索引图像
RGB_image = ind2rgb(ind_image, map); % 索引图像转换回 RGB
imshow(RGB_image);
6. rgb2ntsc, ntsc2rgb
原理:rgb2ntsc 将 RGB 图像转换为 NTSC 色彩空间,ntsc2rgb 则反向转换。 作用:在 RGB 与 NTSC(亮度、色度)色彩空间之间进行转换。 适用场景:视频处理或需要分离亮度与色度分量的场合。
RGB = imread('a.png');
NTSC = rgb2ntsc(RGB); % RGB 转换为 NTSC
RGB2 = ntsc2rgb(NTSC); % NTSC 转换回 RGB
imshow(RGB2);
7. rgb2ycbcr, ycbcr2rgb
原理:rgb2ycbcr 将 RGB 图像转换为 YCbCr 色彩空间,ycbcr2rgb 则将 YCbCr 转换回 RGB。 作用:在 RGB 与 YCbCr(亮度、蓝色差、红色差)色彩空间之间进行转换。 适用场景:YCbCr 色彩空间常用于视频压缩。
RGB = imread('a.png');
YCbCr = rgb2ycbcr(RGB); % RGB 转换为 YCbCr
RGB2 = ycbcr2rgb(YCbCr); % YCbCr 转换回 RGB
imshow(RGB2);
8. rgb2hsv, hsv2rgb
原理:rgb2hsv 将 RGB 图像转换为 HSV 色彩空间,hsv2rgb 则将 HSV 转换回 RGB。 作用:在 RGB 与 HSV(色调、饱和度、亮度)色彩空间之间进行转换。 适用场景:图像处理过程中,HSV 色彩空间常用于颜色分割和调节。
RGB = imread('a.png');
HSV = rgb2hsv(RGB); % RGB 转换为 HSV
RGB2 = hsv2rgb(HSV); % HSV 转换回 RGB
imshow(RGB2);
这些函数主要用于处理图像的颜色空间转换、颜色可视化以及索引图像处理等场景,能够帮助实现图像处理中的多种操作。
总结
-
图像颜色基础:图像分为单色、全彩色、伪彩色等类型。人眼可分辨约64级灰度和超过200种颜色。颜色的三要素为色调、饱和度和明度,分别表示颜色的类型、纯净度和亮度。
-
颜色模型:
- RGB模型:基于设备显示,用红、绿、蓝三色光的加色法来表示颜色。应用于显示器等光源设备。
- CMYK模型:用于印刷行业的减色法模型,主要使用青、品红、黄三色和黑色来表现颜色。
- XYZ模型:一种与设备无关的颜色空间,设计符合人眼视觉特性,用于颜色标准化和设备间颜色一致性。
- HSI/HSV模型:基于人眼感知的颜色模型,符合视觉特性,用色调、饱和度、亮度表示颜色。
- YUV/YCrCb/YIQ模型:用于视频压缩和传输的颜色模型,通过亮度和色度信息来分离色彩,适合模拟和数字视频标准。
-
色度图:色度图展示了颜色的纯度和色调,可以分析色彩的相对位置及其互补色关系。
-
伪彩色和灰度增强:通过伪彩色转换和灰度切割等技术,可以将灰度图像以特定色彩呈现,帮助提高图像可视化效果,增强图像细节识别。
-
真色彩图像处理:对彩色图像的每个分量分别处理,保留色彩信息,通过增强I分量提高图像质量。