Retinex理论是基于色彩恒常的一种代表性计算理论,全称是视网膜皮层理论(Retinal-cortex theory)。Retinex理论认为人类知觉到的物体表色与物体表面的反射性质有着密切的关系。照度(illumination)引起的色彩变化一般是平缓的,通常表现为平缓的照明梯度,而由表面反射性质(reflection)引发的颜色变化效应则往往表现为突变形式。通过分辨这两种变化形式,人们就能将图像的照度变化作出区分,从而得知由照度变化引起的表色变化,使对表色的知觉保持横常。
基于Retinex理论的低亮度图片增强算法,通常把图片分解为亮度分量(illumination)和反射分量(reflection),通过增强分解得到的亮度部分,最后将增强的亮度分量与反射分量融合得到增强后的低亮度图片。
本文介绍两种基于Retinex理论的低亮度增强算法:
- A Probabilistic Method for Image Enhancement With Simultaneous Illumination and Reflectance Estimation (PLE)
- A weighted variational model for simultaneous reflectance and illumination estimation(SRIE)
PLE
由Retinex理论,我们可以将观测的图像S分解成图片的亮度I和图片的反射部分R:
S是8比特的图像,其范围在[0,255],R的范围在[0,1],I的范围也是[0,255],"."表示逐元素相乘。
由于我们的目标是通过观察到的图像S得到图像的亮度分量I和反射分量R,则根据贝叶斯理论,可以得到:
其中是后验概率,是似然函数,和是先验概率。
为了减少计算的复杂度,之前的方法通常对等式的两边采取了对数操作,将乘法变成了加法,而且,对数转换的操作有利于增强图像暗部区域的对比度。然而对数操作的副作用会造成很多低亮度区域不需要恢复的结构也被恢复出来,导致恢复出错误的图像。
为此,该文章并没有采用对数转换,依然在线性域上去求解R和I。
首先,文章先分析了似然函数与先验概率:
likelihood
假设估计的误差符合均值为0,方差为高斯分布的独立同分布随机变量:
prior :
基于反射分量包含的边缘信息是分段连续的(piece-wise continuous),所以反射分量的梯度分布满足拉普拉斯分布:
prior :
基于亮度分量的梯度分布在空域上是光滑的:
基于亮度分量在数值上是显著区别与反射分量,因此需要一个正则项来限制亮度分量的数值范围:
是高斯分布的均值,在这篇文章里,用图像S的平均值来替代。
最后:
为了有效地同时估计图像亮度和反射分量,最大后验概率估计(MAP)问题被转化成能量最小化问题,即:
将以上的先验和似然概率考虑其中,可以得到以下的目标函数:
其中,、 、为正的参数,为p-norm操作。
是为了保证分解后图像的L2的保真度,即最小化 与的欧式距离。
是为了保证亮度分量在空间域上的光滑性。
是对应于TV反射稀疏性,为了保证反射分量的piece-wise continuous.
是为了限制亮度分量的数值。
这这篇文章中使用了交替方向乘子算法(alternating direction method of multipliers,ADMM)来求解目标函数的极值点,由于L1-norm难以求解,文章中引入了辅助的参数,目标函数被改写为:
由ADMM理论,原目标函数被分为三个子优化问题迭代求解,在第j次迭代过程中,三个子优化问题分别是:
具体求解过程可参考原文,这里不做过多解释。
得到R和I后,使用Gamma矫正来增强亮度分量I:
其中W是255,参数设置为2.2。
增强后的图片可有以下公式得到:
SRIE
之前讨论到在求解亮度和反射分量的过程中,通常会使用对数操作来减少计算量,但是对数操作的副作用会造成很多低亮度区域不需要恢复的结构也被恢复出来,导致恢复出错误的图像。这里先介绍为什么会出现这种情况。
由Retinex理论,我们可以将观测的图像S分解成图片的亮度I
和图片的反射部分R:
S是8比特的图像,其范围在[0,255],R的范围在[0,1],I的范围也是[0,255],"."表示逐元素相乘。
采用对数变换后,可以得到:
其中。
与上篇文章类似,可以得到以下的目标优化函数:
在对数域上,对于一个给定的信号,梯度的变化为:
因此,当信号很小的时候,的值会变得很大,从而暂居主导地位。即在恢复图像的过程中,目标函数会更加倾向于恢复图像暗部区域,导致很多不该恢复出的细节恢复出来,而图像的亮度区域则无法恢复出较出真实的结构。
上图显示了原图和对数域图以及他们相对应的梯度图,可以明显的观察到在对数域的梯度图,很多背景区域上的细节被放大。
为了解决这个问题,上篇文章PLE没有采用对数变换,而这篇文章则采用了一个补偿的方式,来弥补在对数域上梯度过于放大暗部区域的问题。
文章中采用的目标函数是:
即在梯度部分直接乘上了一个‘’来弥补对数梯度上‘’的影响。
在求解过程中,文章中直接使用了前次迭代结果的和来代替和,即:
与前篇文章类似,引入了新的变量来解决L1-norm难以求解的问题:
同样地使用了ADMM算法将原问题分为三个子优化问题:
具体求解过程也与前篇文章类似,具体可参考原文,这里不做过多解释。
得到R和I后,使用Gamma矫正来增强亮度分量I:
其中W是255,参数设置为2.2。
增强后的图片可有以下公式得到:
算法实现
PLE: https://xueyangfu.github.io/paper/2015/TIP/Matlab_code.zip
SRIE: https://xueyangfu.github.io/paper/2016/cvpr/Matlab_implementation.zip
结果比较
参考文献
- http://psychology.wikia.com/wiki/Retinex_theory
- https://ieeexplore.ieee.org/document/7229296
- https://ieeexplore.ieee.org/document/7780673