您好,欢迎访问三七文档
数字图像处理第7章彩色图像处理常熟理工学院电气与自动化工程学院7.1彩色基础7.1.1什么是彩色7.1.2我们眼中的彩色7.1.3三原色7.1.4计算机中的颜色表示7.2彩色模型7.2.1RGB模型7.2.2CMY、CMYK模型7.2.3HSI模型Matlab实现RGB转换到HSIfunctionhsi=rgb2hsi(rgb)%hsi=rgb2hsi(rgb)把一幅RGB图像转换为HSI图像,%输入图像是一个彩色像素的M×N×3的数组,%其中每一个彩色像素都在特定空间位置的彩色图像中对应红、绿、蓝三个分量。%假如所有的RGB分量是均衡的,那么HSI转换就是未定义的。%输入图像可能是double(取值范围是[0,1]),uint8或uint16。%%输出HSI图像是double,%其中hsi(:,:,1)是色度分量,它的范围是除以2*pi后的[0,1];%hsi(:,:,2)是饱和度分量,范围是[0,1];%hsi(:,:,3)是亮度分量,范围是[0,1]。%抽取图像分量rgb=im2double(rgb);r=rgb(:,:,1);g=rgb(:,:,2);b=rgb(:,:,3);%执行转换方程num=0.5*((r-g)+(r-b));den=sqrt((r-g).^2+(r-b).*(g-b));theta=acos(num./(den+eps));%防止除数为0H=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;%防止除数为0S=1-3.*num./den;H(S==0)=0;I=(r+g+b)/3;%将3个分量联合成为一个HSI图像hsi=cat(3,H,S,I);figure;%调用rgb2hsi的程序段subplot(1,2,1);rgb=imread('AT3_1m4_01.tif');imshow(rgb);title('rgb');subplot(1,2,2);hsi=rgb2hsi(rgb);imshow(hsi);title('hsi');下面是一个调用rgb2hsi函数的程序段,将RGB图像转正HIS空间转换效果如图7.9所示:(a)(b)图7.9RGB转HSI效果图(a)RGB原图,(b)转换后的HSI图(以RGB格式显示)rgbhsiHSI转换到RGBMatlab实现functionrgb=hsi2rgb(hsi)%rgb=hsi2rgb(hsi)把一幅HSI图像转换为RGB图像,%其中hsi(:,:,1)是色度分量,它的范围是除以2*pi后的[0,1];%hsi(:,:,2)是饱和度分量,范围是[0,1];%hsi(:,:,3)是亮度分量,范围是[0,1]。%%输出图像分量:%rgb(:,:,1)为红;%rgb(:,:,2)为绿;%rgb(:,:,3)为蓝。%抽取图像分量hsi=im2double(hsi);H=hsi(:,:,1)*2*pi;S=hsi(:,:,2);I=hsi(:,:,3);%执行转换方程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扇形(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));%BG扇形(2*pi/3=H4*pi/3)idx=find((2*pi/3=H)&(H4*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扇形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));%将3个分量联合成为一个RGB图像rgb=cat(3,R,G,B);rgb=max(min(rgb,1),0);转换前后的效果如图7.11所示:(a)(b)图7.11HSI转RGB效果图(a)HSI原图(以RGB格式显示),(b)转换后的RGB图hsirgb7.2.4HSV模型7.2.5YUV模型RGB转换到YUVMatlab实现functionyuv=rgb2yuv(rgb)%yuv=rgb2yuv(rgb)把一幅RGB图像转换为YUV图像,%输入图像是一个彩色像素的M×N×3的数组,%其中每一个彩色像素都在特定空间位置的彩色图像中对应红、绿、蓝三个分量。%假如所有的RGB分量是均衡的,那么HSI转换就是未定义的。%输入图像可能是double(取值范围是[0,1]),uint8或uint16。%%输出YUV图像是uint8。rgb=im2double(rgb);r=rgb(:,:,1);g=rgb(:,:,2);b=rgb(:,:,3);%执行转换函数y=0.299*r+0.587*g+0.114*b;u=0.567*(b-y);v=0.713*(r-y);%防止溢出if(y0)y=0;end;if(y1.0)y=1.0;end;if(u0)u=0;end;if(u1.0)u=1.0;end;if(v0)v=0;end;if(v1.0)v=1.0;end;%联合yuv,并转成uint8类型y=y*255;u=u*255;v=v*255;yuv=cat(3,y,u,v);yuv=uint8(yuv);转换后的效果如图7.16所示(a)(b)图7.16RGB转YUV效果图(a)RGB原图,(b)转换后YUV图(以RGB格式显示)rgbyuvYUV转换到RGBMatlab实现functionrgb=yuv2rgb(yuv)%yuv=rgb2yuv(rgb)把一幅RGB图像转换为YUV图像,%输入图像是一个彩色像素的M×N×3的数组,%其中每一个彩色像素都在特定空间位置的彩色图像中对应红、绿、蓝三个分量。%假如所有的RGB分量是均衡的,那么HSI转换就是未定义的。%输入图像可能是double(取值范围是[0,1]),uint8或uint16。%%输出YUV图像是uint8。yuv=im2double(yuv);y=yuv(:,:,1);u=yuv(:,:,2);v=yuv(:,:,3);%执行转换函数r=y+1.402*v;g=y-0.344*u-0.714*v;b=y+1.772*u;%防止溢出if(r0)r=0;end;if(r1.0)r=1.0;end;if(g0)g=0;end;if(g1.0)g=1.0;end;if(b0)b=0;end;if(b1.0)b=1.0;end;%联合rgbr=r*255;g=g*255;b=b*255;rgb=cat(3,r,g,b);rgb=uint8(rgb);转换后的结果如图7.17所示:(a)(b)图7.17YUV转RGB效果图(a)YUV图(以RGB格式显示),(b)转换后RGB图yuvrgb7.2.6YIQ模型7.2.7Lab模型简介7.3全彩色图像处理基础7.3.1彩色补偿及其Matlab实现Matlab实现%compensate.m%彩色补偿im=double(imread('plane.bmp'));subplot(1,2,1);imshow(uint8(im));title('原始图');[m,n,p]=size(im);[h1,k1]=min(255-im(:,:,1)+im(:,:,2)+im(:,:,3));[j1,minx]=min(h1);i1=k1(j1);%提取图像中最接近红色的点,其在im中的坐标为i1,j1r1=im(i1,j1,1);g1=im(i1,j1,2);b1=im(i1,j1,3);R=0.30*r1+0.59*g1+0.11*b1;[h3,k3]=min(255-im(:,:,3)+im(:,:,1)+im(:,:,2));[j3,minx]=min(h3);i3=k3(j3);%提取图像中最接近蓝色的点,其在im中的坐标为i3,j3r3=im(i3,j3,1);g3=im(i3,j3,2);b3=im(i3,j3,3);B=0.30*r3+0.59*g3+0.11*b3;A1=[r1r2r3g1g2g3b1b2b3];A2=[R000G000B];C=A1*inv(A2);fori=1:mforj=1:nimR=im(i,j,1);imG=im(i,j,2);imB=im(i,j,3);temp=inv(C)*[imR;imG;imB];S(i,j,1)=temp(1);S(i,j,2)=temp(2);S(i,j,3)=temp(3);endendS=uint8(S);subplot(1,2,2);imshow(S);title('补偿后');结果如图7.21所示:(a)(b)图7.21彩色平衡效果图(a)原始图,(b)补偿后原始图补偿后7.3.2彩色平衡及其Matlab实现Matlab实现%balance.m%彩色平衡im=double(imread('AT3_1m4_01.tif'));[m,n,p]=size(im);F1=im(1,1,:);F2=im(1,2,:);F1_(1,1,1)=F1(:,:,2);F1_(1,1,2)=F1(:,:,2);F1_(1,1,3)=F1(:,:,2);F2_(1,1,1)=F2(:,:,2);F2_(1,1,2)=F2(:,:,2);F2_(1,1,3)=F2(:,:,2);K1=(F1_(1,1,1)-F2_(1,1,1))/(F1(1,1,1)-F2(1,1,1));K2=F1_(1,1,1)-K1*F1(1,1,1);L1=(F1_(1,1,3)-F2_(1,1,3))/(F1(1,1,3)-F2(1,1,3));L2=F1_(1,1,3)-L1*F1(1,1,3);fori=1:mforj=1:nnew(i,j,1)=K1*im(i,j,1)+K2;new(i,j,2)=im(i,j,2);new(i,j,3)=L1*im(i,j,3)+L2;endendim=uint8(im);new=uint8(new);subplot(1,2,1);imshow(im);title('原始图');subplot(1,2,2);imshow(new);title('平衡后');结果如图7.22所示:(a)(b)图7.22彩色平衡效果图(a)原始图,(b)平衡后原始图平衡后
本文标题:第7章彩色图像处理
链接地址:https://www.777doc.com/doc-2111847 .html