1. 夜景摄影的挑战:低光照、高ISO噪声、动态范围不足、运动模糊
各位同学好,我是老张。做计算摄影这些年,我踩过最多的坑,就是夜景拍摄。
你想想看,白天光线充足,随便一台手机都能拍出不错的照片。可一到晚上,问题全来了。噪点、模糊、暗部死黑、高光过曝……说白了,夜景就是手机摄影的“照妖镜”。
这一章,我们来拆解夜景摄影的四大核心挑战。只有把问题看清楚,后面讲多帧融合和去噪算法时,你才知道每一行代码在解决什么。
1.1 低光照:信号弱,信噪比天然低
先问一个问题:一张照片是怎么形成的?
光线通过镜头,打到传感器上,每个像素点收集光子,转换成电信号。光线越强,收集的光子越多,信号越强。
到了晚上,环境光可能只有白天的千分之一甚至万分之一。传感器能收到的光子数量急剧下降。信号弱了,但传感器本身的电路噪声、读出噪声可不会减少。结果就是——信噪比(SNR)直线下跌。
核心结论:低光照的本质问题是信号太弱,而不是噪声变大了。噪声水平基本固定,信号小了,噪声占比自然就高了。
我记得刚入行时,有个项目在暗光下拍出来的画面全是“雪花”。我当时以为是传感器坏了,折腾了两天。后来师傅一句话点醒我:“你先把曝光时间拉长三倍试试。”果然,信号上来了,噪点就压下去了。
但曝光时间不能无限拉长,这就引出了下一个问题。
1.2 高ISO噪声:增益放大了信号,也放大了噪声
既然光线不够,那就把信号放大呗。ISO就是这个放大器。
ISO每提高一档,信号被放大的倍数就翻一倍。听起来不错,对吧?但问题是,噪声也被同步放大了。
| ISO值 | 信号放大倍数 | 噪声放大倍数 | 典型场景 |
|---|---|---|---|
| 100 | 1x | 1x | 白天户外 |
| 400 | 4x | 4x | 室内灯光 |
| 1600 | 16x | 16x | 黄昏/暗室 |
| 6400 | 64x | 64x | 夜景/极暗 |
看到没?ISO 6400时,信号和噪声都被放大了64倍。但噪声是随机的、杂乱无章的,放大后看起来就是满屏的颗粒和彩色斑点。
我的经验:在实际项目中,ISO超过3200后,单帧画面的可用性就很差了。降噪算法能救回来一部分,但细节损失不可避免。所以夜景模式的核心思路之一,就是尽量用低ISO多拍几张,而不是单帧拉高ISO。
1.3 动态范围不足:亮部与暗部不可兼得
动态范围,简单说就是传感器能同时记录的最亮和最暗之间的跨度。
人眼的动态范围大约在20档以上。而手机传感器的动态范围,好一点的也就10-12档。到了夜景,这个差距更明显。
举个例子:你拍一个城市夜景,有明亮的霓虹灯,也有黑暗的巷子。传感器如果为了保留暗部细节而拉长曝光,霓虹灯区域就会过曝,变成一片死白。反过来,如果为了保住高光而缩短曝光,暗部就全黑了,什么细节都没有。
为什么会这样?因为传感器的每个像素点只能记录一定范围内的光强。超过这个范围,要么饱和(全白),要么截止(全黑)。
注意:动态范围不足导致的“死白”和“死黑”,是后期算法很难修复的。一旦像素值饱和到255(8位图)或截止到0,信息就永久丢失了。所以夜景模式必须通过多帧融合来扩展动态范围。
我曾经做过一个测试:用单帧拍摄夜景,暗部区域的信噪比只有5dB左右,而高光区域的信噪比能达到40dB以上。这种巨大的差异,单帧算法根本没法同时兼顾。
1.4 运动模糊:长曝光与手持拍摄的矛盾
低光照下,为了收集足够的光子,最直接的办法就是延长曝光时间。
但问题来了——手会抖。
手持拍摄时,人手的自然抖动频率大约在1-10Hz。曝光时间超过1/30秒,画面就开始出现肉眼可见的模糊。到了夜景模式,曝光时间动辄1/4秒甚至1秒,不模糊才怪。
运动模糊有两种:
- 全局模糊:整个画面都糊了。通常是手持抖动造成的。
- 局部模糊:只有运动物体(行人、车辆)糊了。背景是清晰的。
这两种模糊的处理方式完全不同。全局模糊可以通过OIS(光学防抖)和EIS(电子防抖)来缓解。但局部模糊,尤其是夜景中快速移动的物体,单帧几乎无解。
关键认知:夜景模式的多帧融合,本质上是在“时间分辨率”和“空间分辨率”之间做权衡。多帧可以降低噪声、扩展动态范围,但代价是引入了帧间配准和运动补偿的难题。
1.5 四大挑战的关系图谱
这四个挑战不是孤立的。它们互相影响,甚至互相矛盾。我画了一张图,帮你理清它们之间的关系。
从这张图可以看得很清楚:四个挑战形成了一个恶性循环。低光照迫使你拉长曝光或提高ISO,但长曝光带来运动模糊,高ISO带来噪声。而动态范围不足,又让亮部和暗部无法同时保留。
单帧拍摄,无论如何都跳不出这个循环。唯一的出路,就是多帧融合。
1.6 小结:问题清单
这一章的内容,我帮你整理成了一份清单。后面讲到算法时,你可以随时回来对照。
| 挑战 | 本质问题 | 对画质的影响 | 多帧融合的解决思路 |
|---|---|---|---|
| 低光照 | 光子数量不足 | 信噪比低,画面暗 | 多帧叠加增强信号 |
| 高ISO噪声 | 增益放大噪声 | 颗粒感、彩色噪点 | 低ISO多帧,避免高增益 |
| 动态范围不足 | 传感器宽容度有限 | 死白/死黑 | 不同曝光帧融合 |
| 运动模糊 | 曝光期间位移 | 画面模糊、拖影 | 短曝光帧+配准对齐 |
个人建议:如果你刚开始接触夜景算法,不要急着调参数。先把这四个挑战的物理成因搞清楚。我在项目中见过太多人,一上来就调降噪强度,结果细节全没了。方向错了,努力白费。