第五章 彩色图像处理 1. MATLAB中彩色图像的表示方法 2. 彩色空间及其转换 3. 彩色图像处理基础 4. 彩色图像的空间滤波 第五章 彩色图像处理 1. MATLAB中彩色图像的表示方法 2. 彩色空间及其转换 3. 彩色图像处理基础 4. 彩色图像的空间滤波 5. 在RGB向量直接处理
5.1 MATLAB中彩色图像的表示方法 5.1.1 RGB图像 5.1.2 索引图像 5.1.3 用来处理RGB图像和索引图像的IPT函数
RGB模型 RGB模型采用CIE规定的三基色构成表色系统。自然界的任一颜色都可通过这三种基色按不同比例混合而成。由于RGB模型将三基色同时加入以产生新的颜色,所以,它是一个加色系统。 设颜色传感器把数字图像上的一个像素编码成(R,G,B),每个分量量化范围为 [0,255]共256级。因此,RGB模型可以表示 256×256×256=16 777 216≈1670万种颜色。 这足以表示自然界的任一颜色,故又称其为24位真彩色。
一幅图像中的每一个像素点均被赋予不同的RGB值,便可以形成真彩色图像,如红色(255,0,0)、绿色(0,255,0)、蓝色(0,0,255)、青色(0,255,255)、品红(255,0,255)、黄色(255,255,0)、白色(255,255,255)、黑色(0,0,0)等,等比例混合三基色产生的是灰色。 RGB颜色模型可用一个三维空间中的单位立方体来表示,如图所示。
RGB立方体及rgbcube函数 (1, 0, 0) (0, 0, 1) (0, 1, 0) R B G 红 绿 蓝 黑 白 青 黄 品红 灰度级
function rgbcube(vx,vy,vz) vertices_matrix=[0 0 0;0 0 1;0 1 0;0 1 1;1 0 0;1 0 1;1 1 0;1 1 1]; faces_matrix=[1 5 6 2;1 3 7 5;1 2 4 3;2 4 8 6;3 7 8 4;5 6 8 7]; colors=vertices_matrix; %The order of the cube vertices was selected to be the same as %the order of the (R,G,B) colors (e.g.,(0,0,0) corresponds to %black,(1,1,1) corresponds to white,and so on.) %Generate RGB cube using function patch. patch('Vertices',vertices_matrix,'Faces',faces_matrix,... 'FaceVertexCData',colors,'FaceColor','interp',... 'EdgeAlpha',0) %Set up viewing point. if nargin==0 vx=10;vy=10;vz=4; elseif nargin~=3 error('Wrong number of inputs.') end axis off view([vx,vy,vz]) axis square
RGB图像 一幅RGB图像就是彩色像素有一个M×N×3数组, 其中每一个彩色像素点都是在特定空间位置的彩色图像对应的红, 绿, 蓝三个分量. 红色分量图像 绿色分量图像 蓝色分量图像
利用cat函数将分量图像合成彩色图像 rgb_image = cat(3, fR, fG, fB) 从彩色图像中提取三幅分量图像 fR = rgb_image(:, :, 1) fG = rgb_image(:, :, 2) fB = rgb_image(:, :, 3)
5.1 MATLAB中彩色图像的表示 5.1.1 RGB图像 5.1.2 索引图像 5.1.3 用来处理RGB图像和索引图像的IPT函数
2. 索引图像 索引图像:由数据矩阵X和色彩映射矩阵map组成 X是一个整数的数据矩阵 矩阵map是一个大小为L×3,取值在[0,1]的double类的数组,其长度L同它所定义的颜色数目相等。 11
X(i, j)↔map(1,:),当X(i, j)<=1 X(i, j)↔map(n,:),当X(i, j)<=n(n≥2) X与map之间的对应 X为double型 X(i, j)↔map(1,:),当X(i, j)<=1 X(i, j)↔map(n,:),当X(i, j)<=n(n≥2) X为uint8或uint16 X(i, j) ↔ map(1,:), 当X(i, j) ≤0 X(i, j) ↔ map(n,:), 当X(i, j)=n-1(n≥2) 12
索引图像X与对应示意图 r1 g1 b1 r2 g2 b2 . rk gk bk rL gL bL map X 圆圈圈过的元素之值=k-1(X为uint8 uint16) 13
[X, map] = imread(filename, fmt) 索引图像文件的读取 [X, map] = imread(filename, fmt) [X, map] = imread( filename, fmt ) reads the indexed image in filename into X and its associated colormap into map. The colormap values are rescaled to the range [0,1]. 索引图像的显示 imshow(X, map) 或 image(X) colormap(map) 14
imwrite( X, map, filename, fmt) 索引图像的存储 imwrite( X, map, filename, fmt) imwrite(X, map, filename, fmt) writes the indexed image in X and its associated colormap map to filename in the format specified by fmt. If X is of class uint8 or uint16, imwrite writes the actual values in the array to the file. If X is of class double, the imwrite function offsets the values in the array before writing, using uint8(X-1). The map parameter must be a valid MATLAB colormap. Note that most image file formats do not support colormaps with more than 256 entries. 15
索引图像的近似表示 IPT函数imapprox [Y, newmap] = imapprox(X, map, n) 利用彩色映射newmap返回一个数组Y,该数组最多有n种颜色; X可以是uint8类, unit16类或double类; 若n小于等于256,则Y是uint8,若n大于256,则Y为double类。 16
指定图像背景颜色IPT函数whitebg whitebg(‘g’) whitebg(‘green’) whitebg([0 1 0]) 指定彩色图像的方法 map(k, :) = [r(k), g(k), b(k)] 使用预定义彩色映射显示索引图像 imshow(X,预定义彩色映射) 17
5.1 MATLAB中彩色图像的表示方法 5.1.1 RGB图像 5.1.2 索引图像 5.1.3 用来处理RGB图像和索引图像的IPT函数 5.1.2 索引图像 5.1.3 用来处理RGB图像和索引图像的IPT函数 18
3. 用来处理RGB图像和索引图像的IPT函数 目的 dither 采用“抖动”从RGB图像创建索引图像 grayslice 从灰度级亮度图像通过多级阈值创建索引图像 gray2ind 从灰度级亮度图像创建索引图像 ind2gray 从索引图像创建灰度级亮度图像 rgb2ind 从RGB图像创建索引图像 ind2rgb 从索引图像创建RGB图像 rgb2gray 从RGB图像创建灰度级亮度图像 19
bw = dither(gray_image) 处理灰度图 bw = dither(gray_image) gray_image是一幅灰度图像 bw是抖动的结果(一幅二值图像) 处理彩色图像 主要与函数rgb2ind结合使用,以减少图像中颜色数目 20
f=imread('Fig0635(top_ left_flower).tif'); figure(1) imshow(f) [X1,map1]=rgb2ind(f,8,'nodither'); figure(2) imshow(X1,map1) [X2,map2]=rgb2ind(f,8,'dither'); figure(3) imshow(X2,map2) g=rgb2gray(f); g1=dither(g); figure(4) imshow(g) figure(5) imshow(g1)
函数grayslice 格式一: X = grayslice(gray_image, n) 格式二: X = grayslice(gray_image, v) 22
函数gray2ind 函数ind2gray 函数rgb2ind 函数ind2rgb 函数rgb2gray 23
5.2 彩色空间转换 1. 颜色模型 为了科学地定量描述和使用颜色,人们提出了各种颜色模型。目前常用的颜色模型按用途可分为三类: 计算颜色模型、视觉颜色模型和工业颜色模型。 计算颜色模型用于进行有关颜色的理论研究。常见的RGB模型、CIE XYZ模型、Lab模型等均属于此类型。 视觉颜色模型是指与人眼对颜色感知的视觉模型相似的模型,它主要用于色彩的理解,常见的有HSI模型、HSV模型和HSL模型。
工业颜色模型侧重于实际应用,包括彩色显示系统、彩色传输系统及电视传输系统等。如印刷中用的CMYK模型、电视系统用的YUV模型、用于彩色图像压缩的YCbCr模型等。
1. NTSC彩色空间 NTSC彩色制式在美国用于电视系统。这种形式的一个主要优势是灰度信息和彩色信息是分离的,所以同一个信号既可用于彩色电视机,也可以用于黑白电视机。 在NTSC制式中,图像数据由三个部分组成:亮度(Y)、色调(I)和饱和度(Q)。
NTSC彩色空间与RGB彩色空间之间的转换
NTSC图像与RGB图像之间的转换IPT函数 函数rgb2ntsc yiq_image = rgb2ntsc(rgb_image) 函数ntsc2rgb rgb_image = ntsc2rgb(yiq_image)
2. YCbCr彩色空间 YCbCr彩色空间广泛应用于数字视频。在这种格式中,亮度信息用单个分量Y表示,彩色信息用两个色差分量和来存储。Cb是蓝色分量和一个参考值的差,Cr是红色分量和一个参考值的差。 RGB转换成YCbCr
YCbCr图像与RGB图像之间的转换IPT函数 函数rgb2ycbcr yiq_image = rgb2ycbcr(rgb_image) 函数ycbcr2rgb rgb_image = ycbcr2rgb(yiq_image)
3. HSI彩色空间 HSI模型是美国色彩学家孟塞尔(H.A.Munseu)于1915年提出的,它反映了人的视觉系统感知彩色的方式,以色调、饱和度和强度三种基本特征量来感知颜色。 色调H(Hue): 与光波的波长有关,它表示人的感官对不同颜色的感受,如红色、绿色、蓝色等,它也可表示一定范围的颜色,如暖色、冷色等。 饱和度S(Saturation): 表示颜色的纯度,纯光谱色是完全饱和的,加入白光会稀释饱和度。饱和度越大,颜色看起来就会越鲜艳,反之亦然。
强度I(Intensity): 对应成像亮度和图像灰度,是颜色的明亮程度。 HSI模型的建立基于两个重要的事实: ① I分量与图像的彩色信息无关;② H和S分量与人感受颜色的方式是紧密相联的。这些特点使得HSI模型非常适合彩色特性检测与分析。 若将RGB单位立方体沿主对角线进行投影,可得到图所示的六边形,这样,原来沿主对角线的灰色都投影到中心白色点,而红色点(1,0,0)则位于右边的角上,绿色点(0,1,0)位于左上角,蓝色点(0,0,1) 则位于左下角。
图 HSI颜色模型
图 (b)是HSI颜色模型的双六棱锥表示,I是强度轴,色调H的角度范围为[0,2π],其中,纯红色的角度为0,纯绿色的角度为2π/3,纯蓝色的角度为4π/3。饱和度S是颜色空间任一点距I轴的距离。当然,若用圆表示RGB模型的投影,则HSI色度空间为双圆锥3D表示。 注意: 当强度I=0时,色调H、饱和度S无定义;当S=0时,色调H无定义。 HSI模型也可用圆柱来表示,如图所示。若将其展开,并按图进行定义,可得到HSI调色板。
HSI调色板
圆柱HSI模型
HSI模型与RGB模型之间可按下述方法相互转换。 (1) RGB转换到HSI。
function hsi=rgb2hsi(rgb) rgb=im2double(rgb); r=rgb(:,:,1); g=rgb(:,:,2); b=rgb(:,:,3); %Implement the conversion equations. num=0.5*((r-g)+(r-b)); den=sqrt((r-g).^2+(r-b).*(g-b)); theta=acos(num./(den+eps)); H=theta; H(b>g)=2*pi-H(b>g); %B>G时,H[1800,3600],而2-H [1800,3600] H=H/(2*pi);
num=min(min(r,g),b); den=r+g+b; den(den==0)=eps; S=1-3.*num./den; H(S==0)=0; I=(r+g+b)/3; %Combine all three results into an hsi image. hsi=cat(3,H,S,I);
(2)从HSI转换到RGB: a.当H在 之间时: b.当H在 之间时:
c.当H在 之间时:
function rgb=hsi2rgb(hsi) H=hsi(:,:,1)*2*pi; S=hsi(:,:,2); I=hsi(:,:,3); %Implement the conversion equations. R=zeros(size(hsi,1),size(hsi,2)); G=zeros(size(hsi,1),size(hsi,2)); B=zeros(size(hsi,1),size(hsi,2)); %RG sector (0<=H<2*pi/3).
idx=find((0<=H)&(H<2*pi/3)); B(idx)=I(idx).*(1-S(idx)); R(idx)=I(idx).*(1+S(idx).*cos(H(idx))./... cos(pi/3-H(idx))); G(idx)=3*I(idx)-(R(idx)+B(idx)); %BG sector (2*pi/3<=H<4*pi/3). idx=find((2*pi/3<=H)&(H<4*pi/3)); R(idx)=I(idx).*(1-S(idx)); G(idx)=I(idx).*(1+S(idx).*cos(H(idx)-2*pi/3)./... cos(pi-H(idx)));
B(idx)=3*I(idx)-(R(idx)+G(idx)); %BR sector (4*pi/3<=H<=2*pi). idx=find((4*pi/3<=H)&(H<=2*pi)); G(idx)=I(idx).*(1-S(idx)); B(idx)=I(idx).*(1+S(idx).*cos(H(idx)-4*pi/3)./... cos(5*pi/3-H(idx))); R(idx)=3*I(idx)-(G(idx)+B(idx)); rgb=cat(3,R,G,B); rgb=max(min(rgb,1),0);
例题:正确显示彩色图像的R,G,B分量。 f=imread('.jpg'); fR=f(:,:,1); fG=f(:,:,2); fB=f(:,:,3); g=cat(3,fR,fG,fB); subplot(121) imshow(f,[]) title('原图') subplot(122) imshow(g,[]) title('分量合成图')
figure subplot(131) imshow(fR,[]) title('红色分量') subplot(132) imshow(fG,[]) title('绿色分量') subplot(133) imshow(fB,[]) title('蓝色分量') 本程序运行结果如下:
例题:正确显示彩色图像H,S,I分量。 解:源程序如下: f=imread('E:\chenpc\data\thry\chpt6\Fig6.38(a).jpg'); subplot(121) imshow(f,[]) title('原图') f=rgb2hsi(f); fH=f(:,:,1); fS=f(:,:,2);
fI=f(:,:,3); g=cat(3,fH,fS,fI); g=hsi2rgb(g); %为正确显示彩色图像,需把HSI转换为RGB形式 subplot(122) imshow(g,[]) title('分量合成图') figure subplot(131) imshow(fH,[]) title('色调分量')
subplot(132) imshow(fS,[]) title('饱和度分量') subplot(133) imshow(fI,[]) title('亮度分量') 本程序运行结果如下:
例题:RGB彩色立方体图像的HSI分量图像。 f=imread('rgbcube.tif'); subplot(221) imshow(f,[]) title('原图') hsi=rgb2hsi(f); subplot(222) imshow(hsi(:,:,1),[]) title('色调分量') subplot(223) imshow(hsi(:,:,2),[]) title('饱和度分量') subplot(224) imshow(hsi(:,:,3),[]) title('亮度分量')
4. CMY颜色模型 CMY模型也是一种常用的表示颜色的方式。印刷工业常采用CMY色彩系统,它是通过颜色相减来产生其它颜色的,所以,称这种方式为减色合成法(Subtractive Color Synthesis)。 CMY模式的原色为青色(Cyan)、品红色(Magenta)、黄色(Yellow)。青色、品红色、黄色是该表色系统的三基色,它们分别对应三种墨水。青色吸收红光,品红色吸收绿光,黄色吸收蓝光,印刷好的图像被白光照射时会产生合适的反射,从而形成不同的色彩。 部分颜色的CMY编码为: 白色(0,0,0),因为白色光不会被吸收;黑色(255,255,255),因为白光的所有成分都会被吸收;黄色(0,0,255),因为入射白光中的蓝色成分容易被墨水吸收,从而留下了红色和绿色成分,使人感觉到黄色。
CMY与RGB的转换关系为 式中: C、M、Y,R、G、B都归一化到[0,1]范围。 在实际应用中,由于黑色(Black)用量较大,印刷中往往直接用黑色墨水来产生黑色,从而节约青色、品红色、黄色三种墨水的用量。因此,常常用CMYK来表示CMY模型。
5. CIE XYZ模型 采用RGB模型表示各种不同颜色时,存在有负值表示颜色。为此,CIE1931年制定了XYZ模型,其中,X、Y、Z分别表示三种标准原色。对于可见光中的任一种颜色F,可以找到一组权值使: 式中: x、y、z称为标准计色系统下的色度坐标,可表示为 显然,x+y+z≡1。
x、y、z中,只有两个是相互独立的,因此,表示某种颜色只需两个坐标即可。据此,CIE制定了如图所示的色度图,图中横轴代表标准红色分量x,纵轴代表标准绿色分量y,标准蓝色分量z=1-(x+y)。
该图以x(红)和y(绿)表示颜色组成,对于x和y的任何值,其相应的蓝值可由公式得到(见右图),图中标记为绿的点有62%的绿和25%的红成分,由公式得到蓝的成分约为13%。
从观察可知: 色度图中每点都对应一种可见的颜色; 色度图边界上的点代表纯颜色; 白色的等能量点C由3原色各1/3组合而成; 颜色点P的色调:由CP连线与色度图边界交点Q决定; 颜色点P的饱和度:由CP/CQ决定; 三角形内的任意颜色由三角形三顶点上的三色组合而成。
CIE XYZ模型与RGB模型之间可以相互转换,其转换公式为
5. Lab颜色模型 Lab颜色模型是CIE于1976年制定的等色空间。Lab颜色由亮度或光亮度分量L和a、b两个色度分量组成。其中,a在正向的数值越大表示越红,在负向的数值越大则表示越绿;b在正向的数值越大表示越黄,在负向的数值越大表示越蓝。Lab颜色与设备无关,无论使用何种设备(如显示器、打印机、计算机或扫描仪)创建或输出图像,这种模型都能生成一致的颜色。Lab模型与XYZ模型的转换公式为
式中: X0、Y0、Z0为标准白色对应的X、Y、Z值。
5.3 伪彩色处理 什么叫伪彩色图像处理? 也叫假彩色图像处理 根据一定的准则对灰度值按照一种线性或非线性函数关系映射成相应的彩色 5.3 伪彩色处理 什么叫伪彩色图像处理? 也叫假彩色图像处理 根据一定的准则对灰度值按照一种线性或非线性函数关系映射成相应的彩色 区分:伪彩色图像、真彩色图像、单色图像 应用 为人们观察和解释图像中的灰度目标 怎样进行伪彩色图像处理? 1. 强度分层技术 2. 灰度级到彩色转换技术
若将灰度图像级用M个切割平面去切割。就会得到M+1个不同灰度级的区域S1,S2,…,SM,SM+1。对这M+1个区域中的像素人为分配给M+1种不同颜色,就可以得到具有M+1种颜色的伪彩色图像。 优点是简单易行,便于用软件或硬件实现。
(a)单色图像 (b)强度分为8个彩色的结果
(a)降雨的灰度图像 (b)对强度值赋予的彩色 (c) 彩色编码图像 (d)南美区域的放大图
伪彩色处理的灰度分层方法 I=imread('moon.tif'); imshow(I); x=grayslice(I,16); figure; imshow(x,hot(16));
2. 灰度级到彩色转换 其变换过程为:将灰度图像送入具有不同变换特性的红、绿、蓝3个变换器,再将输出分别送到彩色显像管的红、绿、蓝电子枪,从而在彩色显像管里合成某种色彩。可见,不同大小灰度级一定可以合成不同色彩。
从图中可见,若f(x, y)=0,则IB(x, y)=L, IR(x, y)=IG(x, y)=0, 从而显示蓝色。同样,若f(x, y)=L/2,则IG(x, y)=L,IR(x, y)=IB(x, y)=0,从而显示绿色。若f(x, y)=L, 则IR(x, y)=L,IB(x, y)=IG(x, y)=0,从而显示红色。 因此不难理解,若灰度图像f(x, y)灰度级在0~L之间变化, IR 、IB 、IG会有不同输出,从而合成不同的彩色图像。
突出装在行李内的爆炸物的伪彩色应用
多光谱图像彩色编码 (a)红图像 (b)绿图像 (c)蓝图像 (d)近红外图像 (e)RGB图像(由(a) (b) (c)合成) (f)由(d) (b) (c)合成 (生物显示红色,混凝土显示浅蓝色)
(a)木星的伪彩色图像 (b)靠近的图像
5.4 彩色变换 彩色图像处理包括: (1)分别处理每一个分量图像,再合成 (2)直接对彩色像素处理 5.4 彩色变换 彩色图像处理包括: (1)分别处理每一个分量图像,再合成 (2)直接对彩色像素处理 用于灰度级图像和RGB彩色图像的空间掩模
1. 彩色变换公式 或 式中: ri、si为f(x,y)和g(x,y)在图像中任一点的彩色分量值;{T1,T2,…,Tn}为变换函数集。n的值由颜色模型而定,若选择RGB模型,则n=3;r1、r2、r3分别表示输入图像的红、绿、蓝分量;选择CMYK模型,则n=4。
全彩色 CMYK图像 RGB图像 HSI图像
要改进图像的亮度 HSI彩色空间, RGB彩色空间, CMY彩色空间,
2. 补色 与一种色调直接相对立的另一种色调称为补色。 类似彩色照片的负片 RGB彩色图像 g(x,y)=1-f(x,y)
(a)原像 (b)补色变换函数 (c)基于RGB的变换 (d)基于HSI的变换
3. 色调和彩色校正 对灰度进行变换 主调型:一幅图像的灰度范围。 高主调图像的多数信息集中在高亮度处。 3. 色调和彩色校正 对灰度进行变换 主调型:一幅图像的灰度范围。 高主调图像的多数信息集中在高亮度处。 RGB和CMY空间,用相同的变换函数映射3个彩色分量 HSI 彩色空间,则仅改进亮度分量 等量地调整红、绿、蓝分量没有改变图像色调
彩色平衡
4. 直方图处理 均匀地扩展彩色强度,保留彩色本身(即色调)不变 独立地进行彩色图像分量的直方图均衡,将产生不正确的彩色
(a)原像 (b)变换函数 (c)只均衡强度分量 (d)增加饱和度分量,再调整强度分量
5.5 平滑和锐化 1. 彩色图像平滑 RGB彩色图像的邻域Sxy HSI彩色模型,只对强度分量平滑(原色调和饱和度不变)
原图像 RGB分量图像 HSI分量图像
用5×5均值模板平滑滤波 (a)RGB分量处理 (b)处理强度分量并转换为RGB (c)两种结果的差别
2. 彩色图像锐化 RGB彩色系统中,分别计算每一分量图像的拉普拉斯再去计算全彩色图像 HSI彩色系统中,只计算强度分量的拉普拉斯而色调和饱和度分量不变
用拉普拉斯进行图像锐化 (a)RGB分量处理 (b)处理强度分量并转换为RGB (c)两种结果的差别
5.6 彩色分割 HSI彩色空间分割 为了在色调图像中分离出感兴趣的特征区,饱和度被用做一个模板图像。 在彩色图像分割中强度图像不常使用,因为它不携带彩色信息。
(a)原像 (b)色调 (c)饱和度 (d)强度 (e)二值饱和度模板 (f) (b)*(e) (g) (f)的直方图 (h) (a)中红分量的分割
2. RGB向量空间分割 给定—个感兴趣彩色的有代表性的彩色点样品集,可得到一个彩色“平均”估计,令其用RGB向量a来表示。 D(z,a)≤D0,包含在球内部和表面上的点符合特定的彩色准则;球外面上的点则不符合准则。
样本协方差矩阵 D(z,a)≤D0的点的轨道描述了一个实心的三维球体 。最大特点是,主轴在最大数据范围的方向旋转。
(a)利用矩形区域求平均向量a和标准差σ (b)分割结果
3. 彩色边缘检测 定义向量为: 向量的点乘,如下所示:
c(x,y)的最大变化率方向可以由角度给出
(a)RGB图像 (b)在RGB彩色空间计算的梯度 (c)在分量图像上计算然后相加的梯度 (d) (b)-(c)