Retinex 理论
Retinex 这个词由 Retina 和 Cortex 两个单词组成。在 Retinex 理论中,物体的颜色是由物体对长波、中波和短波光线的反射能力决定的,而不是由反射光强度的绝对值决定的,并且物体的色彩不受光照非均性的影响,具有一致性。
在 Retinex 理论中,人眼得到的图像数据取决于入射光和物体表面对入射光的反射。如上图所示,I(x,y) 是我们最终得到的图像数据,先是由入射光照射,然后经由物体反射进入成像系统,最终形成我们所看到的图像。该过程可以用公式表示:
其中,I(x,y)代表被观察或照相机接收到的图像信号;L(x,y) 代表环境光的照射分量 ;R(x,y) 表示携带图像细节信息的目标物体的反射分量。
将该式子两边取对数,可以得到物体原本的信息:
在图像处理领域,常将该理论用于图像增强,为了得到成像更好的图片。这时,R(x,y) 表示为图像增强得到后的图像,I(x,y) 为原始的图像。在处理过程中 L(x,y) 常为 I(x,y) 高通滤波之后的结果,也可以用其他滤波的方法,比如中值滤波,均值滤波等等。
SSR 算法
SSR (Singal Scale Retinex),即单尺度视网膜算法是 Retinex 算法中最基础的一个算法。运用的就是上面的方法,具体步骤如下:
- 输入原始图像 I(x,y) 和滤波的半径范围 sigma;
- 计算原始图像 I(x,y) 高斯滤波后的结果,得到 L(x,y);
- 按照公式计算,得到 Log[R(x,y)];
- 将得到的结果量化为 [0, 255] 范围的像素值,然后输出结果图像。
需要注意的是,最后一步量化的过程中,并不是将 Log[R(x,y)] 进行 Exp 化得-到 R(x,y) 的结果,而是直接将 Log[R(x,y)] 的结果直接用如下公式进行量化:
将过程整合在一起就是如下过程:
MSR 算法
MSR (Multi-Scale Retinex),即多尺度视网膜算法是在 SSR 算法的基础上提出的,采用多个不同的 sigma 值,然后将最后得到的不同结果进行加权取值,公式如下所示:
其中 n 是尺度的数量, σ= {σ1,σ2,…,σn} 是高斯模糊系数的向量, wk 是与第 k 个尺度相关的权重,其中 w1 + w2 + … + wn = 1 。
MSRCR 算法
MSRCR 算法是一种改进 MSR 的算法,全称是 Multi-Scale Retinex with Color Restoration,即带色彩恢复的多尺度视网膜增强算法。
就是在 MSR 的基础上,加上了色彩恢复的功能。详细的内容及公式可以查看论文 《A multiscale retinex for bridging the gap between color images and the human observation of scenes》。
作业要求
任务 1
在论文中随机选择两个 MSR 算法,实现并比较。
任务 2
结果比较
一些标注
在比较结果之前,先对一些标注信息进行说明,这样会有助于后续的结果对比。
SSR : Single Scale Retinex
SSR - DIV : Single Scale Retin e t ( Z = X/Y )
SSR - LOG : Single Scale Retinex (logZ = logX – logY)
MSR : Multi - Scale Retinex
MSRCR : Multi - Scale Retinex with Color Restoration
实验结果
不同 sigma 取值的对比
在 SSR 图像组、SSR- DIV 图像组和 SSR- LOG 图像组中,我们可以看到当 sigma 值不大的时候(16-128),增强后的图像亮度比原图像要暗。而且图像的亮度随着 sigma 值的增加而增加。当 sigma=256 时,图像的亮度将与原始图像相似。
不同 SSR 算法对比
通过比较不同的 SSR 方法,可以发现当 sigma 值在 16-128 之间时,SSR-DIV 的结果亮度最暗,而 SSR-LOG 的结果稍暗,但结果比 SSR 的结果更蓝。对于 SSR 和 SSR-LOG 算法,sigma 选择 64 或 128 是当前实验图片的最佳结果。对于 SSR-DIV 的结果,选择 256 是最佳选择。
不同 MSR 算法对比
通过对 MSR 算法和 SSR 算法的比较,可以发现,MSR 和 MSRCR 算法的结果一般要比 SSR 算法的结果更亮,因为多重尺度(多个 sigma 的取值)的组合。对两种 MSR 算法的结果进行比较,可以发现,结果没有太大的差别。而且在这些组合中,64-128-256 的组合结果是最优的。不仅图像变得更清晰,而且颜色也变得更加明亮。此外,对于 MSRCR 算法来说,太多的参数是一个负担(实验中只采用了论文推荐的经验参数,而没有尝试更多的参数比较)。