White Patch Retinex的目的是为了恢复图像本身的色彩,因此势必会引入图像中外界光源的强度,成像表达式如下所示:
式中,G是图像成像的几何尺寸因子,R是物体在X位置处对波长$\lambda$的光反射系数(反射系数大小,直接决定图像亮度),L是光源强度,S是相机感光系数,最终成像为I,x分别表示像素在图像中的位置。一般RGB照相机仅仅对r,g,b三个颜色反应,即$\lambda$由三个窄带波长组成,那么上式可以表示成:
原始的White patch retinex算法
该算法的主要思想是:如果有一个白色的patch在场景中,那么这个patch在每个band反射最大光照,那么这个就是就是该光照下的颜色,例如如果$Ri(x,y)=1$对于i属于r,g,b,且G为1,那么$I_i(x,y)=L_i$。
如果像素的颜色和成像的I成正比,即$c_i(x,y)=I_i(x,y)$,那么有$c_i(x,y) = G(x,y)R_i(x,y)L_i$,根据white patch retinex思想,寻找图像中最亮的点,那么有$L{i,max}=max(c_i(x,y))$,求得的$L_i$被作为光源的强度。恢复的图像为:
改进的White patch retinex算法
上述的方法效果不是太好,这里改进的方法不再单纯使用最亮点来估计光源强度,而是求原始图像每个通道的累计直方图,取累计到某一个值p*n时对应的图像像素值作为$L_i$。其中p为百分值,实验中取为1%-5%,n为图像像素点数。具体如下式表示:
其中所求像素值$j_c$应满足下列限制条件:
式中的$H_c$为各个通道的直方图,k为灰度级,根据上述理论就可以求得环境光。
参考:
1.https://blog.csdn.net/u012736685/article/details/50730784
2.https://blog.csdn.net/fightingforcv/article/details/46988431