第三章 Demosaic与去噪:从马赛克到纯净图像

各位好,欢迎来到第三章。今天聊的话题,是ISP Pipeline里最基础、也最考验功底的两个模块——Demosaic和去噪。

我经常跟新人说,你去看一颗Sensor的Raw图,那满屏的RGBG马赛克,就像一块没拼完的拼图。Demosaic就是把这拼图拼成完整的彩色图像。而去噪,则是把拼图过程中产生的瑕疵、灰尘统统擦掉。

这两个模块是串在一起的。你Demosaic做不好,去噪再强也救不回来。反过来,去噪太猛,Demosaic的边缘细节就糊了。嗯,这里面的平衡,咱们今天好好拆解一下。

3.1 颜色插值算法:从Bayer到RGB

先看Demosaic。说白了,就是每个像素只采集了一种颜色(R、G或B),我们需要用周围像素的信息,把缺失的两种颜色猜出来。

3.1.1 双线性插值

最朴素的方法,就是双线性插值。拿一个Bayer Pattern的G像素举例,它缺R和B,那就直接取周围R和B的平均值。

我刚开始做ISP的时候,觉得这方法太简单了,肯定不行。后来发现,在光照均匀、纹理平坦的区域,双线性插值其实够用,而且计算量极低。但一到边缘和纹理密集的地方,就露馅了——伪彩色、锯齿,全跑出来了。

双线性插值的核心问题:它假设颜色变化是线性的,但真实世界的边缘往往是突变的。所以边缘处会出现“拉链效应”和“假彩色”。

3.1.2 边缘导向插值

那怎么改进?我个人的习惯是,先判断边缘方向,再沿着边缘方向插值,而不是盲目地四周平均。

举个例子,如果当前像素位于一条水平边缘上,那垂直方向的颜色变化剧烈,水平方向变化平缓。这时候,我们只取水平方向的相邻像素做插值,就能避免跨过边缘引入错误颜色。

具体实现上,常见的方法有:

  • 梯度检测法:计算水平和垂直方向的梯度,选择梯度小的方向进行插值。
  • Hamilton-Adams算法:在梯度检测的基础上,引入色差(Color Difference)的概念,利用G通道的连续性来修正R和B。
  • 自适应插值:根据局部纹理复杂度,动态切换插值策略。

我在项目中遇到过一个问题:用边缘导向插值后,某些斜线边缘还是会有锯齿。后来发现,是因为只考虑了水平和垂直两个方向。加上45度和135度方向后,效果就好多了。

避坑指南:边缘方向检测的阈值设置很关键。阈值设得太低,平坦区域也会被误判为边缘,产生不必要的纹理;设得太高,边缘又插值不干净。我曾经在一个低光场景下调试了整整两天,最后发现是阈值没跟着ISO走。

3.2 空域去噪与频域去噪

Demosaic做完,图像是彩色的了,但噪声也放大了。尤其是低光场景,那噪点简直不忍直视。去噪,就是ISP里最吃算力的模块之一。

3.2.1 空域去噪

空域去噪,直接在像素域操作。最经典的就是高斯滤波、双边滤波、非局部均值(NLM)。

双边滤波我用的最多。它既考虑了空间距离,又考虑了像素值差异。说白了,就是“颜色相近、距离又近的像素才一起平均”。这样能保边去噪,效果比高斯滤波好得多。

但双边滤波有个毛病——梯度反转。在强边缘附近,如果参数没调好,会出现“光晕”或者“浮雕”效果。我踩过这个坑,后来加了一个梯度修正的步骤才解决。

算法 保边能力 计算量 典型场景
高斯滤波 差 低 平坦区域预处理
双边滤波 好 中 通用去噪,需调参
NLM 极好 高 低光、高ISO场景
引导滤波 好 低 实时系统,边缘保持

3.2.2 频域去噪

频域去噪,就是把图像变换到频率域(比如DCT、小波),然后对高频分量做衰减。因为噪声通常集中在高频,而图像细节也在高频,所以难点在于区分“噪声”和“细节”。

小波去噪我用的比较多。它能把图像分解成不同尺度的子带,每个子带代表不同频率和方向的信息。然后对高频子带做软阈值或硬阈值处理。

你想想看,如果阈值设得太高,细节就没了,图像变得像塑料一样平滑。设得太低,噪声又去不干净。这个度,全靠经验和场景适配。

注意:频域去噪容易产生“振铃效应”(Ringing Artifact),尤其是在强边缘附近。表现为边缘周围出现一圈一圈的波纹。我建议在频域处理完后,加一个后处理步骤来抑制振铃。

3.3 高通SNR模块详解

好了,终于到重头戏了。高通平台的SNR(Spatial Noise Reduction)模块,是它ISP里最核心的去噪引擎。我调过好几个高通平台的相机,SNR模块的配置直接影响最终画质。

3.3.1 SNR模块架构

高通的SNR不是单一算法,而是一个多级、多尺度的去噪框架。它通常包含:

  • 预处理级:对Raw域做简单的暗电流校正和固定模式噪声去除。
  • 主去噪级:基于多尺度分解(类似小波或拉普拉斯金字塔),对每个尺度做自适应去噪。
  • 后处理级:对去噪后的图像做边缘增强和纹理恢复,避免过度平滑。

我个人觉得,SNR模块最厉害的地方在于它的“自适应”能力。它会根据局部亮度、纹理复杂度、ISO值,动态调整去噪强度。低光区域重去噪,高光区域轻去噪,边缘区域保细节。

3.3.2 关键参数与调优

在QCT(Qualcomm Camera Tuning)工具里,SNR模块的参数非常多。我挑几个最关键的说说:

参数名 作用 调优建议
Strength 整体去噪强度 按ISO分段设置,低ISO设低,高ISO设高
Edge Threshold 边缘保护阈值 设得太低,边缘被磨平;太高,噪声残留
Texture Preservation 纹理保留程度 人像场景设高,风景场景可适当降低
Chroma Noise Reduction 彩色噪声去除 低光场景建议开大,但注意不要偏色

我曾经在一个夜景项目里,SNR的Strength参数从0调到100,图像从“全是噪点”变成“像油画一样平滑”。最后取了个中间值60,再配合Edge Threshold微调,才找到那个“干净又不失细节”的平衡点。

3.3.3 SNR与3A的联动

这里要特别提一下,SNR不是独立工作的。它和AEC(自动曝光控制)、AWB(自动白平衡)有很强的联动。

举个例子,AEC把曝光时间拉长,ISO降低,噪声自然就少了,SNR的负担就轻了。反过来,如果AEC为了防抖把曝光时间缩短,ISO飙高,SNR就得加大力度去噪。

我建议在做Tuning的时候,先把AEC策略定好,再调SNR。否则你SNR调了半天,AEC一改,全白费。

核心思路:去噪不是万能的。最好的去噪,是在源头减少噪声——也就是通过3A算法让Sensor工作在最佳信噪比区间。SNR只是最后一道防线。

本章知识结构图

下面这张图,把Demosaic和去噪的流程、算法分类、以及高通SNR模块的位置串起来了。你可以把它当作本章的“地图”。

Demosaic与去噪知识结构图 Demosaic与去噪知识结构图 Bayer Raw 输入 Demosaic 颜色插值 将马赛克拼成完整RGB图像 双线性插值 边缘导向插值 自适应插值 图像去噪 空域去噪 + 频域去噪 空域去噪(双边/NLM) 频域去噪(小波/DCT) 高通 SNR 模块 多级自适应空间噪声抑制 预处理级 主去噪级 后处理级 与3A联动调优 核心原则:先Demosaic后去噪,去噪强度需与ISO和场景自适应

好了,这一章的内容就到这里。Demosaic和去噪,看似基础,但里面的门道很深。你把这些基础打牢了,后面学HDR、多帧合成、AI去噪这些高级功能,才能理解它们到底在解决什么问题。