图像颜色校正设计论文.doc
《图像颜色校正设计论文.doc》由会员分享,可在线阅读,更多相关《图像颜色校正设计论文.doc(10页珍藏版)》请在冰豆网上搜索。
河北农业大学
数字图像处理课程设计
图像颜色校正
院系:
信息科学与技术学院
专业班级:
电子0902班
姓名:
刘华平
学号:
2009234020214
2012年12月9日
1设计目标:
图像的颜色使图像的一种重要特征,但是由于物体在不同的光源下呈现不同的原色,往往在拍摄的时候会产生偏色现象,图像颜色校正就是为了消除偏色现象。
2设计原理:
2.1灰度世界算法
假定一幅带有足够多色彩变化的图像,则这幅场景的平面反射能消除偏色。
(1)计算图像R,G,B三个颜色通道的平均通道(,,)
N:
为图像的像素总数。
,,分别为校正前图像第i个像素的红、绿、蓝三个分量值。
令图像的平均灰度值。
(2)求R,G,B三个颜色通道的增益系数()。
则对于图像中每个像素点C,其校正后的三个通道为()
(3)将图像中各个像素的谁分量调整到可显示的范围【0,255】之内。
求出图像所有像素灰度值的最大值。
令
如果,则对图像中每个像素进行新的调整,由得到。
注:
“灰度世界算法”不适用于大块单一颜色的情况。
2.2基于标准差加权的灰度算法
将图像分为若干宏块,然后计算每一宏块的R、G、B三个通道的平均值和标准差
3设计程序流程图
3.1灰度世界算法
读取图像yumi1.jpg
显示原图像
计算图像大小m*n
计算图像R、G、B分量所有像素点的总和R1、G1、B1
计算R、G、B三个通道所有像素点的平均值R1、G1、B1
计算整幅图像的平均灰度值Greg=(R1+G1+B1)/3
计算三个通道的增益系数kr=Greg/R1
kg=Greg/G1kg=Greg/B1
将图像调整到0—255范围内,先求得三个通道最大值max,令factor=max /255;
如果factor>1,则图像进行调整,R2=R2/factorG2=G2/factorB2=B2/factor,否则R2、G2、B2保持不变
求校正后的三个通道R2、G2、B2
R2=R*kr,G2=G*kg,B2=B*kb
得到校正图像J
输出校正图像J
读取原图像yumi1.jpg
显示原图像yumi1.jpg
获取图像RGB分量
将图像分别对RGB分量进行分块
计算宏块数m=480/16
n=640/16
对每一宏块,计算RGB分量的平均值ra,ga,ba和标准差sr,sg,sb
计算每一宏块的RGB相关系数D
对于每一宏块,设置标识f,如果D大于等于1,则标识f为1,否则为0
计算标准差加权的RGB分量的平均值wr,wg,wb
求出整幅图像的RGB三个通道的增益系数kr,kg,kb
用增益系数进行校正,得到新的RGB分量r3=r*kr,
G3=g*kg,b3=b*kb
将图像调整到0—255范围内,先求得三个通道最大值max,令factor=max /255;
如果factor>1,则图像进行调整,r3=r3/factorg3=g3/factorb3=b3/factor,否则r3、g3、b3保持不变
得到校正后的图像J
橡树校正后图像J
4.设计程序及图像效果分析
4.1I=imread('yumi1.jpg');%读取图像’yumi1.jpg’
imshow(I) %显示原图像I
I=double(I); %将图像变为双精度型
[m,n]=size(I);%计算图像I的大小
n=n/3; %图像列除以3
R1=0; %R1初始化
G1=0; %G1初始化
B1=0; %B1初始化
fori=1:
m
forj=1:
n %设置循环
R1=R1+I(i,j,1);%计算图像R分量所有像素点的灰度值总和
G1=G1+I(i,j,2);%计算图像G分量所有像素点的灰度值总和
B1=B1+I(i,j,3);%计算图像B分量所有像素点的灰度值总和
end
end %循环结束
R1=R1/(m*n); %计算R通道的平均值R1
G1=G1/(m*n);%计算G通道的平均值G1
B1=B1/(m*n);%计算B通道的平均值B1
Greg=(R1+G1+B1)/3;%计算整个图像的灰度平均值Greg
Kr=Greg/R1; %计算R通道的增益系数Kr
Kg=Greg/G1;%计算R通道的增益系数Kg
Kb=Greg/B1;%计算R通道的增益系数kb
fori=1:
m
forj=1:
n %设置循环体
R2(i,j)=I(i,j,1)*Kr;%对于图像中每个像素点,计算校正后R通道的值R2(i,j)
G2(i,j)=I(i,j,2)*Kg;%对于图像中每个像素点,计算校正后G通道的值G2(i,j)
B2(i,j)=I(i,j,3)*Kb;%对于图像中每个像素点,计算校正后B通道的值B2(i,j)
end
end %循环结束
fori=1:
m %设置循环体
forj=1:
n
MAX(i,j)=max(R2(i,j),G2(i,j));%对于每一个像素点,计算其R2,G2,B2分MAX(i,j)=max(MAX(i,j),B2(i,j)); %量的最大值
end
end %循环结束
MAX1=max(max(MAX)); %计算图像中所有R2,G2,B2的最大值
Factor=MAX1/255; %令Factor=MAX1/255
ifFactor>1 %如果Factor>1
fori=1:
m %设置循环体
forj=1:
n
J(i,j,1)=R2(i,j)/Factor; %调整图像R2分量
J(i,j,2)=G2(i,j)/Factor; %调整图像G2分量
J(i,j,3)=B2(i,j)/Factor; %调整图像B2分量,得到校正图像J
end
end %循环结束
else %如果Factor<=1
fori=1:
m
forj=1:
n%设置循环体
J(i,j,1)=R2(i,j); %R2分量保持不变
J(i,j,2)=G2(i,j); %G2分量保持不变
J(i,j,3)=B2(i,j); %B2分量保持不变,得到校正图像J
end
end
end %循环结束
J=uint8(J); %对校正后图像取整
Figure
imshow(J) %显示校正后图像J
图像效果分析:
原图像改进后图像
对于灰度世界算法:
一副带有足够色彩变化的图像,利用平均反射可以抵消偏色,而对比利用灰度世界算法改进前后的这两幅图像可看出,虽然图像被校正了,但图像校正后的颜色偏蓝,校正效果不理想,这是由于增益系数小于1造成的结果
4.2基于标准差加权的灰度算法
I=imread('yumi1.jpg');%读取原图像yumi1.jpg
imshow(I)%显示原图像yumi1.jpg
I=double(I);%将图像I变为双精度型
m=480/16;%计算分块行数
n=640/16;%计算分块列数
fori=1:
480
forj=1:
640
r(i,j)=I(i,j,1);%读取图像中的红色分量
g(i,j)=I(i,j,2);%读取图像中的绿色分量
b(i,j)=I(i,j,3);%读取图像中的蓝色分量
end
end
rf=mat2cell(r,ones(1,m)*16,ones(1,n)*16);%对红色分量分块
gf=mat2cell(g,ones(1,m)*16,ones(1,n)*16);%对绿色分量分块
bf=mat2cell(b,ones(1,m)*16,ones(1,n)*16);%对蓝色分量分块
fori=1:
m
forj=1:
n
r1=rf{i,j};
g1=gf{i,j};
b1=bf{i,j};%将每一宏块的红、绿、蓝分量分别赋予r1,g1,b1
ra(i,j)=sum(r1(:
)); %计算每一宏块红色分量总和
ga(i,j)=sum(g1(:
)); %计算每一宏块绿色分量总和
ba(i,j)=sum(b1(:
)); %计算每一宏块蓝色分量总和
ra(i,j)=ra(i,j)/(16*16); %每一宏块,红色分量平均值
ga(i,j)=ga(i,j)/(16*16); %每一宏块,绿色分量平均值
ba(i,j)=ba(i,j)/(16*16); %每一宏块,蓝色分量平均值
sr(i,j)=std(r1(:
)); %每一宏块,红色分量标准差
sg(i,j)=std(g1(:
)); %每一宏块,绿色分量标准差
sb(i,j)=std(b1(:
)); %每一宏块,蓝色分量标准差
end
end
fori=1:
m
forj=1:
n-1
d1(i,j)=abs(sr(i,j)-sr(i,j+1))+abs(sg(i,j)-sg(i,j+1))+abs(sb(i,j)-sb(i,j+1));