赞
踩
Retinex理论认为,人眼观测到的图像S是光照图像L和物体反射图像R的乘积。而R才是真实的恒常性的图像,但是怎么从观测图像S中计算R呢?这是个病态问题,根本不可解。研究者就通过加以一定的约束条件,比如光照L具有缓变平滑性、L与S有一定的弱相关性等等,然后估计出光照图像L,进而得到R。
根据之前对retinex算法的原理分析,我们可以得到:r=s-l=logS-logL,其中原始图像为S(x, y),反射图像为R(x, y),亮度图像为L(x, y),下面我直接贴下SSR的公式部分:
在 SSR 算法中,参数 c 的选择直接影响图像增强的效果:c 越小,SSR 的动态压缩能力越强,图像阴暗部分的细节得到更好的增强,但是由于平均对比度范围较小,结果会产生颜色失真;c 越大,SSR 的颜色保真度越高,但是动态压缩能力会减弱。通常 SSR 是在动态范围压缩和色感一致性之间寻找平衡点。
SSR 算法可能出现 halo 现象,Jobson等人又提出了多尺度Retinex算法。通过联合多个尺度的滤波结果,补偿 halos 和照射信息的缺失,突出暗区域的细节;
代码请参见:http://download.csdn.net/download/piaoxuezhong/10029685。
论文:A Multiscale Retinex for Bridging the Gap Between Color Images and the Human Observation of Scenes
从S中如何估计L,就衍生出了各种各样的实现方式,影响较大的有:中心环绕、随机路径、变分、金字塔迭代等等方法。其中,中心环绕算法无疑是影响最大的retinex实现方式,使用高斯尺度算子来估计光照图像,计算速度快。当然,它也有一些缺点:
1) 在强光阴影过渡区容易出现光晕现象; 主要是由于高斯算子不能在过渡区很好的估计光照所致。
2) 对比较亮的图像处理欠佳,比如雾霾图像。
主要原因有二:retinex不是专门的去雾算法;对数化处理压缩了亮区域的显示范围,导致其细节弱化。
由于L和R是乘积的关系,为了便于处理,一般对观测图像S先进行对数处理,这样就转换成了加性关系。使用对数处理可以极大的提升暗区域的像素值,以增加对比度,但代价是压缩了亮区图像的显示范围,导致其细节模糊甚至丢失。所以个人认为,retinex适用于处理那些光照不足的图像,对于比较亮的图像,不妨先进行反色处理再retinex。
3) 色彩保持能力较弱。
因为对rgb三个颜色通道各自归一化处理的缘故,有论文提到了一些改善方法,但我发现还是不容乐观。此外,三通道各自归一化处理后,其颜色均值是接近于128的,如果后面再跟一个指数化操作(对数处理的反操作),将导致图像颜色明显偏暗,所以这是一般retinex算法只有对数处理没有指数处理的缘故。
一点点改进如下:
1)使用引导滤波来快速估计光照图像,减少光晕的出现,实验表明,该步骤对色彩保持能力也有一定的提升;
2)在使用多个尺度算子进行合成的时候,不是简单的做均值处理;
3)在完成retinex处理之后,再做一次简单的gamma校正,使其均值接近于128。
参考资料:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。