1、问题:彩色图像整体向某一方向移动,导致图像偏冷、偏黄
2、产生原因:采集设备的彩色偏差等因素
3、解决问题的思想:基于灰度世界假设,RGB三个通道的平均值近似同一灰度值,然后分别调至每一像素。
4、GrayWorld 算法的具体实现步骤如下:
(1) 计算分别图像三个颜色分量的平均值avgR 、avgG、avgB ,并令图像的平均灰度值为
avgGray = ( avgR+ avgG + avgB) / 3
令 ar = avgGray /avgR
ag = avgGray /avgG
ab = avgGray /avgB
对于图像中每个像素c,调整其 R、G、B分量c(R)、c(G)、c(B),使得
c(R) = c(R)*ar
c(G) = c(G)*ag
c(B) = c(B)*ab
(3)将图像中每个像素的 R、G、B 值都调整到可示范围区间内。例如对于 24 位真彩图像,令factor为图像中所有像素的R、G、B三个分量中的最大值,并令factor= factor/ 255。若factor >1,则对于图像中的每一个像素c,调整其分量c ( R )、 c ( G )、 c ( B ),使得
c(R) = c(R) /factor
c(G) = c(G) /factor
c(B) = c(B) /factor
5、代码实现
matlab:
A=imread(frames.images{1});
A=double(A);
A(:,:,1)=A(:,:,1)*1.05;
A(:,:,2)=A(:,:,2)*0.95;
figure(1)
imshow(uint8(A))
avg_R=mean(mean(A(:,:,1)));
avg_G=mean(mean(A(:,:,2)));
avg_B=mean(mean(A(:,:,3)));
avg_Gray=(avg_R+avg_B+avg_G)/3;
ar=avg_Gray/avg_R;
ag=avg_Gray/avg_G;
ab=avg_Gray/avg_B;
new_A(:,:,1)=uint8(A(:,:,1)*ar);
new_A(:,:,2)=uint8(A(:,:,2)*ag);
new_A(:,:,3)=uint8(A(:,:,3)*ab);
figure(2)
imshow(new_A)
avg_R=mean(mean(new_A(:,:,1)));
avg_G=mean(mean(new_A(:,:,2)));
avg_B=mean(mean(new_A(:,:,3)));
结果:
1)原图
2)对各通道乘一系数
3)均衡化结果