也是上上周布置的作业,主要是比较不同 Retinex 算法实现的结果。同样也是需要自己看论文并实现算法,这点应该是选这门课最大的优点了,也是硕士需要掌握的基本技能。
今天在课上,还以为会被批评,没想到被夸奖了一翻,心里美滋滋。授课教授说我写的 report 很清晰明了,可以清晰地知道哪张结果图片对应哪个算法,还问我是不是写过很多论文。哈哈,论文是没写过的,倒是看过不少,知道非英语母语读者的痛点在哪里以及一些基本的套路。
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 (Single 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
- sigma = 16,32,64 时,比较不同高斯滤波的性能
-
- 读取并对图像进行二维高斯滤波:
- input image - X; 高斯滤波后的图片结果 - Y; 令 Z = X/Y
- 求 Z 的均值(mean)和标准差(sigma)
- 以均值为中心,取 -2sigma 到 2sigma 范围内的值,然后将其扩展到 [0,255] 范围并输出图像
-
- 读取并对图像进行二维高斯滤波:
- input image - X; 高斯滤波后的图片结果 - Y; 令 Z = logX - logY
- 求 Z 的均值(mean)和标准差(sigma)
- 以均值为中心,取 -2sigma 到 2sigma 范围内的值,然后将其扩展到 [0,255] 范围并输出图像
结果比较
一些标注
在比较结果之前,先对一些标注信息进行说明,这样会有助于后续的结果对比。
SSR : Single Scale Retinex
SSR - DIV : Single Scale Retinex ( 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 算法来说,太多的参数是一个负担(实验中只采用了论文推荐的经验参数,而没有尝试更多的参数比较)。
参考
[1]. http://www.cnblogs.com/Imageshop/archive/2013/04/17/3026881.html
[2]. http://www.cnblogs.com/Imageshop/p/3810402.html