1. 暗光之痛:为什么手机夜景拍照总是糊?——HDR与噪声的物理根源

你有没有这样的经历?

晚上朋友聚会,掏出手机想拍张合影。取景框里看着还行,按下快门一看——满屏噪点,人脸糊成一片。放大一看,暗部全是红绿蓝的小颗粒,亮部又过曝得惨白。

这不是你的手机不行。这是物理规律在跟你作对。

我做了快十年图像处理,从CMOS传感器底层驱动一直干到算法落地。说实话,暗光拍照这个坑,几乎每个手机厂商都踩过。今天我们就从根上聊聊,为什么夜景拍照这么难。

1.1 光子不够用——信噪比的天花板

先问个问题:一张照片是怎么来的?

说白了,就是光子打在传感器上,转换成电信号。光越多,信号越强。光越少,信号越弱。

暗光场景下,光子数量急剧下降。传感器接收到的信号弱到几乎要被底噪淹没。这就引出一个核心概念——信噪比(SNR)。

信噪比公式(简化版):

SNR = 信号功率 / 噪声功率

暗光下信号功率低,噪声功率相对不变,SNR 直线下降。这就是噪点产生的根本原因。

我记得有一次在实验室调一个1/2.3英寸的传感器,光照度只有5 lux。示波器上看信号,几乎跟噪声基线混在一起。当时我就意识到,算法再强,也架不住物理层面的信号缺失。

光照条件 典型照度 (lux) SNR 典型范围 (dB) 画质表现
晴天户外 10,000 - 100,000 40 - 60 纯净、细节丰富
室内灯光 100 - 500 25 - 35 轻微噪点,可接受
黄昏/黎明 10 - 50 15 - 25 噪点明显,细节丢失
夜景/暗光 1 - 10 5 - 15 严重噪点,画质劣化

1.2 曝光三要素的囚徒困境

既然光不够,那就多进点光呗?

理论上没错。但手机摄影有三大变量:光圈、快门速度、ISO。它们互相制约,形成了一个死循环。

  • 光圈:手机镜头光圈基本固定,f/1.8 已经算大的了。再大,镜头模组就塞不进去了。
  • 快门速度:暗光下想多进光,就得拉长曝光时间。但手持拍摄超过 1/30 秒,手抖就糊了。上三脚架?用户不答应。
  • ISO:信号太弱,只能放大信号。但放大信号的同时,噪声也被放大了。ISO 3200 以上,照片基本没法看。

避坑指南:

我曾经在一个项目里,为了压低噪声,把 ISO 锁死在 800 以下。结果快门速度被迫降到 1/8 秒,成片率不到 20%。后来我学乖了——不要跟物理规律硬刚,要学会跟噪声共存,再用算法去收拾它。

1.3 噪声的三大来源

噪声不是一种东西。它分三类,每一类的处理方式都不一样。

  1. 光子散粒噪声:光子到达传感器的时间和位置是随机的。光越少,这种随机性越明显。这是物理极限,没法消除。
  2. 读出噪声:传感器把电荷转换成电压、再转换成数字信号的过程中引入的噪声。跟电路设计直接相关。
  3. 热噪声:温度越高,电子热运动越剧烈。长曝光时传感器发热,热噪声会显著增加。

我个人习惯把噪声分成两类:固定模式噪声和随机噪声。固定模式噪声可以通过标定去除,随机噪声才是算法要啃的硬骨头。

1.4 HDR 的困境——动态范围不够用

暗光场景还有一个麻烦:动态范围。

你想想看,夜景里既有明亮的灯光招牌,又有漆黑的阴影。传感器的动态范围有限,亮部细节和暗部细节只能保一头。

保亮部?暗部全黑,啥也看不见。保暗部?亮部过曝,一片死白。

这就是 HDR(高动态范围)技术要解决的问题。但 HDR 本身也会引入新问题:

  • 多帧合成产生鬼影:手持拍摄时,每帧之间会有微小位移。合成时边缘会出现重影。
  • 运动物体模糊:拍夜景人像时,人稍微动一下,多帧合成就会糊掉。
  • 计算量爆炸:多帧对齐、融合、去噪,每一步都是算力黑洞。

注意:

HDR 不是万能的。它只是把动态范围的问题,转化成了多帧对齐和去噪的问题。如果底层的噪声没处理好,HDR 合成出来的就是一张高动态范围的噪点图——更清晰,也更难看。

1.5 知识体系总览

下面这张图,是我自己总结的暗光成像问题树。每次做新项目,我都会拿它来梳理思路。

暗光成像问题树 暗光成像质量差 信号不足 噪声干扰 动态范围不足 光圈受限 快门受限 散粒噪声 读出噪声 热噪声 亮部过曝 暗部欠曝 ISO被迫拉高 → 噪声放大 细节被噪声淹没 HDR多帧合成引入鬼影 最终结果:照片糊、噪点多、动态差 核心矛盾:暗光下信号不足 → 噪声放大 + 动态范围压缩 → 传统ISP管线无法同时兼顾去噪和保细节 → 需要HDR+去噪联合优化算法来破局(后续章节展开)

1.6 小结:问题已经摆在这了,下一步怎么办?

暗光拍照糊,不是某一个环节的问题。它是信号、噪声、动态范围三个维度共同作用的结果。

你想想看:

  • 物理上,光子不够,信噪比低——这是天花板。
  • 工程上,曝光三要素互相制约——这是枷锁。
  • 算法上,HDR 和去噪互相打架——这是战场。

我个人的经验是:不要试图在物理层面解决所有问题。传感器就那么大,光圈就那么大,你变不出花来。真正的突破口在算法——用多帧信息换信噪比,用联合优化换动态范围。

后面的章节,我会一步步拆解 HDR 去噪算法的核心思路。从多帧对齐、时域滤波,到频域分解、深度学习降噪,每个环节我都会把项目里踩过的坑、试过的方案、最终落地的经验,原原本本讲给你听。

嗯,准备好了吗?