3、低光照图像模型:噪声模型与Retinex理论
做低光照增强,第一件事不是调算法,而是搞清楚——图像到底是怎么变差的。
我早年接过一个安防项目,摄像头在楼道里,晚上几乎全黑。我用了一堆增强算法,结果噪点比信号还明显。后来才意识到:不懂噪声模型,调参就是瞎蒙。
这一章,我们就来拆解低光照图像的退化机制。从噪声类型到光照退化,再到经典的Retinex理论。嗯,都是后面实战的基础。
3.1 噪声模型:三种最常见的噪声
低光照下,噪声是主要矛盾。传感器接收的光子少,信噪比就低。我习惯把噪声分成三类来理解:
| 噪声类型 | 来源 | 数学模型 | 特点 |
|---|---|---|---|
| 高斯噪声 | 传感器热噪声、电路读出噪声 | 均值为0,方差σ² | 加性、与信号无关 |
| 泊松噪声 | 光子到达的随机性(散粒噪声) | 均值=方差=λ | 信号相关,暗区更明显 |
| 散粒噪声 | 光电转换过程的量子涨落 | 泊松分布特例 | 低光照下主导噪声 |
3.1.1 高斯噪声
高斯噪声是最基础的模型。说白了,就是每个像素上叠加一个随机值,服从正态分布。
数学上很简单:
I_noisy = I_clean + n, n ~ N(0, σ²)
我在项目中遇到过:用CMOS传感器在长曝光时,热噪声会明显增加。这时候σ会随温度升高而变大。所以工业相机往往带制冷——不是炫技,是真的有用。
3.1.2 泊松噪声与散粒噪声
这个要重点讲。低光照下,散粒噪声才是主角。
你想想看:光子到达传感器是随机的,服从泊松分布。光照越弱,光子数越少,随机波动就越明显。这就是散粒噪声的本质。
模型是这样的:
I_noisy ~ Poisson(λ), 其中 λ = I_clean
注意:泊松噪声的方差等于均值。也就是说,亮区噪声大,暗区噪声小。但暗区信噪比更低,所以看起来更脏。
3.2 光照退化模型
除了噪声,光照本身也在退化。低光照图像可以建模为:
I(x,y) = R(x,y) · L(x,y) + N(x,y)
其中:
- I:观测到的图像
- R:反射率(物体固有属性)
- L:光照分量(平滑、缓慢变化)
- N:噪声
这个模型告诉我们两件事:
- 低光照主要是L分量小,不是物体本身黑
- 增强的本质是估计L并补偿它,同时抑制N
我习惯把这个过程画成一张图,方便理解:
3.3 Retinex理论简介
Retinex是"Retina"和"Cortex"的合成词。这个理论的核心观点很朴素:人眼感知的颜色,取决于反射率,而不是光照。
换句话说:一张白纸在阳光下是白的,在阴影里也是白的。但相机拍出来,阴影里的纸就是灰的。Retinex要做的,就是把人眼的这个能力教给算法。
3.3.1 核心假设
- 光照分量L是平滑的:变化缓慢,低频
- 反射分量R是突变的:边缘、纹理,高频
- 两者相乘得到观测图像
所以Retinex的求解思路就是:从I中分离出L和R。怎么做?取对数,把乘法变加法:
log(I) = log(R) + log(L)
然后,用低通滤波器估计log(L),再用减法得到log(R)。最后指数还原。
3.3.2 经典方法:SSR与MSR
| 方法 | 全称 | 核心思路 | 缺点 |
|---|---|---|---|
| SSR | 单尺度Retinex | 用一个高斯核估计光照 | 尺度难选,要么光晕要么细节丢失 |
| MSR | 多尺度Retinex | 多个高斯核加权融合 | 计算量大,颜色容易失真 |
| MSRCR | 带颜色恢复的MSR | 加入颜色恢复因子 | 参数多,调参麻烦 |
我早期做低光照增强时,直接调OpenCV的MSRCR。效果嘛……有时候惊艳,有时候翻车。后来才明白:Retinex假设光照是平滑的,但现实中的光照往往有硬阴影。这就是它的天花板。
3.4 本章小结
这一章我们拆解了低光照图像的退化机制:
- 噪声模型:高斯、泊松、散粒——低光照下散粒噪声是主要矛盾
- 光照退化模型:I = R·L + N,增强就是估计L、恢复R、抑制N
- Retinex理论:从人眼感知出发,做光照-反射率分解