河北农业大学数字图像处理课程设计图像颜色校正院系:信息科学与技术学院专业班级:电子0901班姓名:李文娟学号:20092340201192011年12月9日1.设计目标颜色是图像的一种重要特征,对于图像分割、目标检测与识别、图像检索等领域的研究具有重要意义。
物体在不同光源下呈现的颜色是不同的。
不同的光照环境,将会导致采集的图像的颜色之间存在一定程度的偏差,这种偏差将会影响后续图像分析的准确度。
故寻求颜色校正算法来消除或减弱光照环境等对颜色显现的影响。
灰度世界算法是以灰度世界假设为基础,假设认为对于一幅有着大量色彩变化的图像R 、G 、B 三个分量的平均值趋于同一个灰度值。
改良算法基于图象熵约束的灰度世界算法,利用图像的熵来约束增益系数,从而防止过校正现象。
在改良的基础上可以利用灰度阶分层的方法对图像中像素值偏小的进行处理,从而增强图像的亮度。
2.设计原理2.1灰度世界法灰度世界算法是以灰度世界假设为基础,假设认为对于一幅有着大量色彩变化的图像R 、G 、B 三个分量的平均值趋于同一个灰度值。
(1)首先利用公式,,计算出R 、G 、B 三个通道的平均值B G R 、、,(N 为图像的像素总数,Bi Gi Ri 、、分别为校正前第i 个像素的红绿蓝三个分量)令图像的平均灰度值 )(31B G R Grey ++=(2)求R 、G 、B 三个通道的增益系数,用如下公式:,,则对于图像中的每一个像素点C ,其校正后的三个通道为''',,B G R :kr Ri R *'= ,kg Gi G *'=,kb Bi B *'=(3)将图像各个像素的''',,B G R 三个分量调整到可以显示的范围[0,255]之内,首先要求出图像中所有''',,B G R 的最大值MAXval,令factor= MAXval/255,如果factor>1则对于图像中每个像素重新调整。
其''',,B G R 得到新的'''''',,B G R ,用如下公式计算:factor R R '''=,factor G G '''=,factorB B '''=2.2基于图像熵的灰度世界法原理:利用图像熵来约束增益系数,从而防止过校正现象。
步骤:在完成灰度世界步骤2中kr 、kg 、kb 之后进行。
(1)首先对图像三个颜色通道分别计算一维离散相对熵Hr :8)(log*)(2552∑=-=i i ik R k p k p H(其中k=R 、G 、B ,即求BRG R R R H H H ,,,8代表灰阶,25628=) (2)求R 、G 、B 三个通道的“约束”增益系数:1)1(+-=RR rc r H kr k1)1(+-=G R rc g H kg k 1)1(+-=B R rc b H kb k(3)求出增益系数rc b rcg rc r k k k ,,之后继续灰度世界算法步骤(2)即可。
3.设计程序流程图:3.1灰度世界法3.2基于图像熵的灰度世界法4.设计程序4.1灰度世界法I=imread('yumi1.jpg');I=double(I);[M,N,K]=size(I); %计算图像行列像素数S=M*N; %计算图像的像素总数SRs=0;Gs=0;Bs=0; %初始化3个通道Rs、Gs、Bs求和值Rs=double(Rs);Gs=double(Gs);Bs=double(Bs);R=I(:,:,1); %红色分量G=I(:,:,2); %绿色分量B=I(:,:,3); %蓝色分量for i=1:Mfor j=1:NRs=Rs+R(i,j); %分别计算红绿蓝的灰度值总和Gs=Gs+G(i,j);Bs=Bs+B(i,j);endendRa=Rs/S; %红色通道的平均值Ga=Gs/S; %绿色通道的平均值Ba=Bs/S; %蓝色通道的平均值Grey=(Ra+Ga+Ba)/3; %图像的平均灰度值kr1=Grey/Ra; %R通道的增益系数kg1=Grey/Ga; %G通道的增益系数kb1=Grey/Ba; %B通道的增益系数for i=1:Mfor j=1:NR1(i,j)=kr1*R(i,j); %校正后的红色通道像素计算G1(i,j)=kg1*G(i,j); %校正后的绿色通道像素计算B1(i,j)=kb1*B(i,j); %校正后的蓝色通道像素计算endendfor i=1:Mfor j=1:NMax(i,j)=max(R1(i,j),G1(i,j)); %求校正后图象中所有R1,G1,B1的最大值矩阵 Max(i,j)=max(Max(i,j),B1(i,j));endendMAX=0;for i=1:Mfor j=1:NMAX=max(MAX,Max(i,j)); %求校正后图象中所有R1,G1,B1的最大值endendfactor=MAX/255; %计算factor的值if factor>1 %判断factor的值是否大于1for i=1:Mfor j=1:NR2(i,j)=R1(i,j)/factor; %factor>1,对校正后图象红色通道重新调整 G2(i,j)=G1(i,j)/factor; %factor>1,对校正后图象绿色通道重新调整 B2(i,j)=B1(i,j)/factor; %factor>1,对校正后图象蓝色通道重新调整 I1(i,j,1)=R2(i,j);I1(i,j,2)=G2(i,j); %将重新调整后的像素合到I1图象中I1(i,j,3)=B2(i,j);endendelsefor i=1:Mfor j=1:NI1(i,j,1)=R1(i,j);I1(i,j,2)=G1(i,j); %将校正后的像素合到I1图象中I1(i,j,3)=B1(i,j);endendendI1=uint8(I1);I=uint8(I);subplot(121); imshow(I);title('原始图像');subplot(122); imshow(I1);title('校正后图像');4.2基于图像熵的灰度世界法I=imread('yumi1.jpg');I=double(I);[M,N,K]=size(I); %计算图像行列像素数S=M*N*K; %计算图像的像素总数SRs=0;Gs=0;Bs=0; %初始化3个通道Rs、Gs、Bs求和值Rs=double(Rs);Gs=double(Gs);Bs=double(Bs);R=I(:,:,1); %红色分量G=I(:,:,2); %绿色分量B=I(:,:,3); %蓝色分量for i=1:Mfor j=1:NRs=Rs+R(i,j); %分别计算红绿蓝的灰度值总和Gs=Gs+G(i,j);Bs=Bs+B(i,j);endendRa=Rs/S; %红色通道的平均值Ga=Gs/S; %绿色通道的平均值Ba=Bs/S; %蓝色通道的平均值Grey=(Ra+Ga+Ba)/3; %图像的平均灰度值kr1=Grey/Ra; %R通道的增益系数kg1=Grey/Ga; %G通道的增益系数kb1=Grey/Ba; %B通道的增益系数%改良算法,基于图像熵约束的灰度世界算法%计算R通道“约束”增益系数Rnum=0; %初始化红色通道灰度值为某一灰度值时的统计量Ri=uint8(R);for x=1:256Pr(1,x)=0; %初始化概率矩阵endfor t=0:255for i=1:Mfor j=1:Nif Ri(i,j)==tRnum=Rnum+1; %统计红色通道各阶灰度值的像素数endendendPr(1,t+1)=Rnum/S; %红色通道各灰度级的统计概率Rnum=0;if Pr(1,t+1)==0Pr(1,t+1)=1; %若概率为零则赋值为一endPr1(1,t+1)=(-1)*Pr(1,t+1)*log2(Pr(1,t+1));end%求熵Rss=0; %Rss代表信息量总和for x=1:256Rss=Rss+Pr1(1,x);Hr=Rss/8; %红色通道的一维离散相对熵endkr2=(kr1-1)*Hr+1; %红色通道“约束”增益系数%计算G通道“约束”增益系数Gnum=0; %初始化绿色通道灰度值为某一灰度值时的统计量Gi=uint8(G);for x=1:256Pg(1,x)=0; %初始化概率矩阵endfor t=0:255for i=1:Mfor j=1:Nif Gi(i,j)==tGnum=Gnum+1; %统计绿色通道各阶灰度值的像素数 endendendPg(1,t+1)=Gnum/S; %绿色通道各灰度级的统计概率Gnum=0;if Pg(1,t+1)==0Pg(1,t+1)=1; %若概率为零则赋值为一endPg1(1,t+1)=(-1)*Pg(1,t+1)*log2(Pg(1,t+1));end%求熵Gss=0; %Gss代表信息量总和for x=1:256Gss=Gss+Pg1(1,x);Hg=Gss/8; %绿色通道的一维离散相对熵endkg2=(kg1-1)*Hg+1; %绿色通道“约束”增益系数%计算B通道“约束”增益系数Bnum=0; %初始化蓝色通道灰度值为某一灰度值时的统计量Bi=uint8(B);for x=1:256Pb(1,x)=0; %初始化概率矩阵endfor t=0:255for i=1:Mfor j=1:Nif Bi(i,j)==tBnum=Bnum+1; %统计蓝色通道各阶灰度值的像素数 endendendPb(1,t+1)=Bnum/S; %蓝色通道各灰度级的统计概率Bnum=0;if Pb(1,t+1)==0 %若概率为零则赋值为一Pb(1,t+1)=1;endPb1(1,t+1)=(-1)*Pb(1,t+1)*log2(Pb(1,t+1));end%求熵Bss=0; %Bss代表信息量总和for x=1:256Bss=Bss+Pb1(1,x);Hb=Bss/8; %蓝色通道的一维离散相对熵endkb2=(kb1-1)*Hb+1; %蓝色通道“约束”增益系数for i=1:Mfor j=1:NR1(i,j)=kr2*R(i,j); %校正后的红色通道像素计算G1(i,j)=kg2*G(i,j); %校正后的绿色通道像素计算B1(i,j)=kb2*B(i,j); %校正后的蓝色通道像素计算endendfor i=1:Mfor j=1:NMax(i,j)=max(R1(i,j),G1(i,j)); %求校正后图象中所有R1,G1,B1的最大值矩阵 Max(i,j)=max(Max(i,j),B1(i,j));endendMAX=0;for i=1:Mfor j=1:NMAX=max(MAX,Max(i,j)); %求校正后图象中所有R1,G1,B1的最大值endendfactor=MAX/255; %计算factor的值if factor>1 %判断factor的值是否大于1for i=1:Mfor j=1:NR2(i,j)=R1(i,j)/factor; %factor>1,对校正后图象红色通道重新调整 G2(i,j)=G1(i,j)/factor; %factor>1,对校正后图象绿色通道重新调整 B2(i,j)=B1(i,j)/factor; %factor>1,对校正后图象蓝色通道重新调整 I1(i,j,1)=R2(i,j);I1(i,j,2)=G2(i,j); %将重新调整后的像素合到I1图象中I1(i,j,3)=B2(i,j);endendelsefor i=1:Mfor j=1:NI1(i,j,1)=R1(i,j);I1(i,j,2)=G1(i,j); %将校正后的像素合到I1图象中I1(i,j,3)=B1(i,j);endendendI1=uint8(I1);subplot(121); imshow(uint8(I));title('原始图像');subplot(122); imshow(I1);title('校正后图像');4.3 基于灰阶分层的灰度世界改良算法部分程序如下:for k=1:Kfor i=1:Mfor j=1:Nif I(i,j,k)<15I(i,j,k)=40;endendendend5.图像效果分析:5.1 基于灰度世界算法处理的图像如下:对图像的分析:处理后的图像与原图像比较偏暗且发蓝,因为原图象大部分为黑色,整体像素值偏小,所以灰度平均值较小,计算出的增益系数kr、kg、kb也较小,导致处理后的灰度值较小,所以图象整体偏暗,观察m程序运行后数据得出,增益系数中只有kb是大于1的,对图像中每个像素重新成比例的调整,只有蓝色分量得到了增益,故图像整体偏蓝。