1. 噪声的诞生:手机摄影噪声的来源与数学模型
做手机摄影算法这么多年,我见过太多「白天是神,晚上是鬼」的拍照场景。白天光线充足,随便一拍都好看;一到暗光环境,满屏噪点,画面脏得像砂纸。为什么会这样?
说白了,噪声是物理世界的「原罪」。只要光信号在转换、传输、存储,就一定会引入噪声。今天我们就来扒一扒,手机摄影里的噪声到底从哪来,长什么样,怎么用数学描述它。
1.1 三大噪声来源
1.1.1 光子噪声(Photon Shot Noise)
这是最根本的噪声,躲不掉的。光本身是由一个个光子组成的,到达传感器的光子数量服从泊松分布。你想想看,如果平均每秒有100个光子到达,那实际到达的数量可能是95、102、98……这种随机波动就是光子噪声。
我在项目中遇到过一个问题:为什么同样曝光时间,暗光下噪点比亮光下明显得多?原因就在这里。光子噪声的强度等于光子数的平方根。光线越暗,光子数越少,信噪比就越差。
1.1.2 读出噪声(Read Noise)
读出噪声是传感器把电荷转换成电压、再转换成数字信号时引入的。这部分噪声跟光线强弱无关,是电路本身的「底噪」。
嗯,这里要注意:读出噪声在暗光下特别致命。因为暗光下信号本身很弱,读出噪声会「淹没」掉细节。我记得有一次调试夜景模式,发现ISO越高,读出噪声反而被放大了——后来才意识到是模拟增益放大了噪声。
1.1.3 暗电流噪声(Dark Current Noise)
传感器即使完全遮光,也会产生电荷。为什么?因为半导体材料本身的热激发会产生电子-空穴对。温度越高,暗电流越大。
你想想看,夏天拍夜景,手机发烫,暗电流噪声就会飙升。这就是为什么专业相机有制冷模块,手机只能靠算法硬扛。
1.2 噪声模型与数学表示
把上面三种噪声综合起来,我们可以得到一个完整的噪声模型:
总噪声方差 = 光子噪声方差 + 读出噪声方差 + 暗电流噪声方差
σ²_total = σ²_shot + σ²_read + σ²_dark
其中:
σ²_shot = G × N_photon (G是增益系数)
σ²_read = 常数(由传感器决定)
σ²_dark = D × t (D是暗电流率,t是曝光时间)
这个模型在实际工程中非常有用。我经常用它来反推:给定一张照片的噪声水平,可以估算出当前场景的光子数、传感器增益等参数。
1.3 信噪比(SNR)的概念
信噪比,说白了就是「信号有多强,噪声有多弱」。数学上很简单:
SNR = 信号强度 / 噪声标准差
用分贝表示:SNR(dB) = 20 × log10(信号/噪声)
举个例子:如果信号是100,噪声是10,那SNR就是10,换算成dB是20dB。这个值越高,画面越干净。
| SNR (dB) | 画质感受 | 典型场景 |
|---|---|---|
| > 40 dB | 几乎无噪点 | 白天户外 |
| 30-40 dB | 轻微噪点 | 室内灯光 |
| 20-30 dB | 明显噪点 | 黄昏/暗光 |
| < 20 dB | 噪声严重 | 夜景/极暗光 |
1.4 知识体系总览
下面这张图,是我自己总结的噪声知识框架。你可以把它当作本章的「地图」:
1.5 实战中的噪声分析
在实际项目中,我一般会这样分析一张照片的噪声:
- 看亮度分布:暗部区域噪声最明显,通常是读出噪声和暗电流噪声的混合体
- 看纹理区域:平坦区域(如天空)的噪声是「颗粒感」,纹理区域的噪声是「细节丢失」
- 看颜色:彩色噪声(红绿蓝斑点)通常是去马赛克算法放大了噪声
- 看时间维度:视频中的闪烁噪声,往往是读出噪声的时域表现
好了,这一章我们搞清楚了噪声的「身世」——它从哪里来,长什么样,怎么用数学描述。下一章我们会深入实战,看看怎么用算法把这些噪声「干掉」。