去雾算法研究之Fast Visibility Restoration from a Single Color or Gray Level Image学习
本文首先给出了雾的效果模型:
·可见性恢复算法
当没有可利用的深度信息,就不能利用Koschmieder’s法则去将大气因子k和场景深度d的联系分开,从而就无法进行去雾。
。于是,引入atmospheric veil(大气耗散函数)的强度V (x,y)= Is(1− e^-kd(x,y)),将公式可以改写为:
I(x,y)=R(w,y)(1-V(x,y)/Is)+V(x,y) (1)
1.白平衡(white balance)
雾天图像常常需要进行色彩平衡以消除色偏。为了确保图像进行了正确的白平衡处理,必须估计场景的照明度。场景的照明度估计通常又被称之为白点估计(WP)。白点算法将图像的R, G, B三颜色通道的最大值作为图像的照明度,即标准白色。在去雾算法中,大气散射模型中的大气光值A被视为照明度的颜色。因此,白平衡操作主要是通过将原有雾图像I(x)除以A来获取白平衡纠正图像Iw(x)。假设IW(x)被归一化到0到1之间,则此限制条件可表示为:
能见度修复前进行白平衡算法。不同光源下,照片会有一定的偏色的现象。通过加强对应的补色来进行补偿.白平衡以后雾是纯白色的,处理之后和原图会有一定的差距,把所有的像素值规格在(0,1),则Is就可以设置为向量(1,1,1)。以下代码分了是彩色图和不是彩色图:
if (ncol==3)
if (balance==0.0) % global white balance on clear pixels
w=min(orig,[],3);
ival = quantile(w(:),.99);
[rind,cind]=find(w>=ival);
sel(:,1)=orig(sub2ind(size(orig),rind,cind,ones(size(rind))));
sel(:,2)=orig(sub2ind(size(orig),rind,cind,2*ones(size(rind))));
sel(:,3)=orig(sub2ind(size(orig),rind,cind,3*ones(size(rind))));
white=mean(sel,1);
white=white./max(white)
orig(:,:,1)=orig(:,:,1)./white(1);
orig(:,:,2)=orig(:,:,2)./white(2);
orig(:,:,3)=orig(:,:,3)./white(3);
end
if (balance>0.0) % local white balance
fo(:,:,1)=medfilt2(orig(:,:,1), [sv, sv], 'symmetric');
fo(:,:,2)=medfilt2(orig(:,:,2), [sv, sv], 'symmetric');
fo(:,:,3)=medfilt2(orig(:,:,3), [sv, sv], 'symmetric');
nbfo=mean(fo,3);
fo(:,:,1)=(fo(:,:,1)./nbfo).^balance;
fo(:,:,2)=(fo(:,:,2)./nbfo).^balance;
fo(:,:,3)=(fo(:,:,3)./nbfo).^balance;
nbfo=mean(fo,3);
fo(:,:,1)=fo(:,:,1)./nbfo;
fo(:,:,2)=fo(:,:,2)./nbfo;
fo(:,:,3)=fo(:,:,3)./nbfo;
orig(:,:,1)=orig(:,:,1)./fo(: