•6.1MATLAB中彩色图像的表示方法MATLAB中的彩色图像可表示为RGB图像和索引图像。•RGB图像RGB图像就是彩色像素的一个MXNX3数组,其中每一个彩色像素点都是在特定空间位置的彩色图像相对应的红、绿、蓝三个分量。第6章彩色图像处理RGB也可以看成是一个由三幅灰度图像形成的“堆”,当将其送到彩色监视器的红、绿、蓝输入端时,便在屏幕上产生了一幅彩色图像。形成RGB彩色图像的三个图像称为红、绿、蓝分量图像,分量图像中像素值的比特数决定了一幅RGB图像的比特深度。•RGB图像的合成令fR,fG和fB分别代表三种RGB分量图像。一幅RGB的图像就是利用cat操作符将这些分量图像组合成的彩色图像。rgb_image=cat(3,fR,fG,fB)cat(dim,A1,A2,∙∙∙)沿着dim指定的方向级联数组。若dim=1,则数组垂直放置,若dim=2,则数组水平放置,若dim=3,则他们会在第三个方向放置。•从RGB图像中提取分量图像fR=rgb_image(:,:,1);fG=rgb_image(:,:,2);fB=rgb_image(:,:,3);•RGB彩色空间函数rgbcube可以从任何透视方向观察彩色立方体。语法:rgbcube(vx,vy,vz)functionrgbcube(vx,vy,vz)vertices_matrix=[000;001;010;011;100;101;110;111];faces_matrix=[1562;1375;1243;2486;3784;5687];colors=vertices_matrix;patch('Vertices',vertices_matrix,'Faces',faces_matrix,...'FaceVertexCData',colors,'FaceColor','interp',...'EdgeAlpha',0)ifnargin==0vx=10;vy=10;vz=4;elseifnargin~=3error('Wrongnumberofinputs.')endaxisoffview([vx,vy,vz])axissquare•索引图像索引图像有两个分量,即整数的数据矩阵X和彩色映射矩阵map。矩阵map是一个大小为为m×3且由范围在[0,1]之间的的浮点值构成的double类数组。map的长度m同它所定义的颜色数目相等。索引图像将像素的亮度值“直接映射”到彩色值。•显示索引图像image(X)colormap(map)用较少的颜色来近似一幅索引图像:[Y,newmap]=imapprox(X,map,n)指定一幅彩色图:map(k,:)=[r(k),g(k),b(k)]•修改图像的背景色whitebg('g')whitebg('green')whitebg([0,1,0])•预定义的彩色映射colormap(copper);copper是MATLAB预定义的彩色映射之一。该图中的颜色从黑色到明亮的紫铜色平稳变化。imshow(X,copper)•RGB图像和索引图像相互转换抖动函数dither可用于灰度图像和彩色图像。“抖动”是在印刷业和出版业常用的一种处理。它在由点组成的印刷页上给出色调变化的直观效果。在灰度图像的情况下,“抖动”调色试图用在白色背景上产生黑点的二值图像来得到灰色调。点的大小变化多样,从明亮区域的小点到黑暗区域的逐渐增大的较大点。bw=dither(gray_image)从灰度级亮度图像通过多级阈值创建索引图像X=grayslice(gray_image,n);X=grayslice(gray_image,v);从灰度级亮度图像创建索引图像[X,map]=gray2ind(gray_image,n)从索引图像创建灰度级亮度图像gray_image=ind2gray(X,map)从RGB图像创建索引图像[X,map]=gray2ind(rgb_image,n,…dither_option);从索引图像创建RGB图像rgb_image=ind2rgb(X,map)从RGB图像创建灰度图像gray_image=rgb2gray(rgb_image)[X1,map1]=rgb2ind(f,8,’nodither’);imshow(X1,map1)[X2,map2]=rgb2ind(f,8,’dither’);imshow(X2,map2)g=rgb2gray(f);g1=dither(g);imshow(g),figure,imshow(g1)•NTSC彩色空间NTSC彩色制式在美国用于电视系统。这种形式的一个主要优势是灰度信息和彩色信息是分离的,所以同一个信号既可以用于彩色电视机,又可以用于黑白电视机。在NTSC制式中,图像数据由三步分组成:亮度(Y)、色调(I)和饱和度(Q)。6.2转换至其他彩色空间yiq=rgb2ntsc(q);imshow(yiq)y1=yiq(:,:,1);%亮度imshow(y1)y2=yiq(:,:,2);%色调imshow(y2)y3=yiq(:,:,3);%饱和度imshow(y3)•YCbCr彩色空间YCbCr彩色空间广泛应用于数字视频。在这种格式中,亮度信息用单个分量Y来表示,彩色信息用两个色差分量Cb和Cr来存储。分量Cb是蓝色分量和一个参考值的差,分量Cr是红色分量和一个参考值的差。将RGB转化为YCbCr:ycb=rgb2ycbcr(q);imshow(ycb)将YCbCr转化为RGB:rgb=ycbcr2rgb(ycb);imshow(rgb)•HSV彩色空间HSV(色调,饱和度,数值)是人们用来从调色板或颜色轮中挑选颜色所用的彩色系统之一。将RGB转换为HSV的函数为rgb2hsvhsv=rgb2hsv(q);imshow(hsv)将HSV转换为RGB的函数为hsv2rgbrgb=hsv2rgb(hsv);imshow(rgb)•CMY和CMYK彩色空间青色,品红色,黄色是光的三原色,大多数将颜料沉淀于纸上的设备,如彩色打印机和复印机,都需要CMY输入。变换函数:imcomplementcmy=imcomplement(rgb);imshow(cmy)rgb=imcomplement(cmy);imshow(rgb)•HIS彩色空间HIS彩色空间是指色调(hue)、饱和度(saturation)和亮度(intensity)彩色空间。•RGB与HIS彩色模型间的关系亮度轴:连接RGB立方体白色顶点与黑色顶点的连线。亮度轴上的点的饱和度均为0,所有点都是灰色的。HIS空间可看做由一个垂直的亮度轴以及垂直于此轴的一个平面的彩色点的轨迹组成。•将颜色从RGB转换为HSI12122()arccos()()360RGRBRGRBGBHBGBG31min(,,)()1()3SRGBRGBIRGB•将颜色从HSI转换为RGBRG区:(1)cos1cos(60)3()BISSHRIHGIRBGB区:120(1)cos1cos(60)3()HHRISSHGIHBIRGBR区:240(1)cos1cos(60)3()HHGISSHBIHRIGB•functionhsi=rgb2hsi(rgb)•%RGB2HSIConvertsanRGBimagetoHSI.•%HSI=RGB2HSI(RGB)convertsanRGBimagetoHSI.Theinputimage•%isassumedtobeofsizeM-by-N-by-3,wherethethirddimension•%accountsforthreeimageplanes:red,green,andblue,inthat•%order.IfallRGBcomponentimagesareequal,theHSIconversion•%isundefined.Theinputimagecanbeofclassdouble(withvalues•%intherange[0,1]),uint8,oruint16.•%Theoutputimage,HSI,isofclassdouble,where:%hsi(:,:,1)=hueimagenormalizedtotherange[0,1]bydividingallanglevaluesby2*pi.%hsi(:,:,2)=saturationimage,intherange[0,1].%hsi(:,:,3)=intensityimage,intherange[0,1].•%Extracttheindividualcomponentimmages.•rgb=im2double(rgb);•r=rgb(:,:,1);•g=rgb(:,:,2);•b=rgb(:,:,3);•%Implementtheconversionequations.•num=0.5*((r-g)+(r-b));•den=sqrt((r-g).^2+(r-b).*(g-b));•theta=acos(num./(den+eps));•H=theta;•H(bg)=2*pi-H(bg);•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;•%Combineallthreeresultsintoanhsiimage.•hsi=cat(3,H,S,I);•functionrgb=hsi2rgb(hsi)•%HSI2RGBConvertsanHSIimagetoRGB.•%RGB=HSI2RGB(HSI)convertsanHSIimagetoRGB,whereHSIis•%assumedtobeofclassdoublewith:•%hsi(:,:,1)=hueimage,assumedtobeintherange[0,1]byhavingbeendividedby2*pi.•%hsi(:,:,2)=saturationimage,intherange[0,1].•%hsi(:,:,3)=intensityimage,intherange[0,1].•%Thecomponentsoftheoutputimageare:•%rgb(:,:,1)=red.•%rgb(:,:,2)=green.•%rgb(:,:,3)=blue.•%ExtracttheindividualHSIcomponentimages.•H=hsi(:,:,1)*2*pi;•S=hsi(:,:,2);•I=hsi(:,:,3);•%Implementtheconversionequations.•R=zeros(size(hsi,1),size(hsi,2));•G=zeros(size(hsi,1),size(hsi,2));•B=zeros(size(hsi,1),size(hsi,2));•%RGsector(0=H2*pi/3).•idx=find((0=H)&(H2*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));•%BGsector(2*pi/3=H4*pi/3).•idx=find((2*pi/3=H)&(H4*pi/3));•R(idx)=I(idx).*(1-S(idx));•G(idx)