3、YUV域噪声分析:亮度噪声与色度噪声特性、噪声对边缘的影响、高通平台噪声模型
做ISP的人都知道一句话:不懂噪声,就别谈画质。YUV域的噪声分析,说白了就是搞清楚两件事——噪声长什么样,以及它怎么毁掉你的边缘。
我在高通平台上调了七八年的3A和降噪模块,踩过的坑比走过的路还多。今天咱们就把YUV域的噪声彻底扒开看看。
3.1 亮度噪声与色度噪声:一对性格迥异的兄弟
YUV空间里,Y通道管亮度,UV通道管颜色。噪声在这两个通道上的表现完全不同。
| 特性 | 亮度噪声 (Y) | 色度噪声 (U/V) |
|---|---|---|
| 视觉敏感度 | 人眼非常敏感 | 人眼相对不敏感 |
| 频率分布 | 宽频带,含高频细节 | 集中在低频 |
| 对边缘影响 | 直接破坏锐度 | 产生彩色伪影 |
| 典型形态 | 颗粒感、闪烁 | 色块、彩色噪点 |
| 降噪难度 | 容易损失细节 | 容易产生色偏 |
亮度噪声,说白了就是画面上的颗粒感。你在暗光下拍一张纯灰卡,放大看那些密密麻麻的亮暗斑点,就是Y通道噪声。我习惯把它分成两类:
- 光子散粒噪声:物理极限,跟光照强度的平方根成正比。光越暗,噪声越明显。
- 读出噪声:传感器电路引入的,跟增益(ISO)强相关。
色度噪声就更有意思了。它通常表现为红绿或蓝紫的彩色斑点。为什么是红绿?因为Bayer阵列的CFA排列决定了G通道采样率是R和B的两倍,插值后U/V通道的噪声相关性变差。
关键认知: 人眼对亮度细节的分辨率远高于色度。Y通道降噪要非常克制,UV通道则可以下重手。这是YUV域处理的基本逻辑。
3.2 噪声对边缘的影响:为什么锐化前必须先降噪
这个问题我当年吃过亏。有一次调一个夜景项目的边缘增强,锐化强度拉上去之后,画面边缘确实清晰了,但噪声也被放大了——边缘周围出现了一圈一圈的振铃,客户直接打回。
为什么会这样?
边缘在频域上属于高频成分,噪声同样也是高频。锐化滤波器(比如拉普拉斯算子)无法区分哪个是真实边缘、哪个是噪声。它一视同仁地增强,结果就是:
- 边缘过冲:真实边缘两侧出现白边或黑边
- 噪声放大:平坦区域的颗粒感变成明显的纹理
- 振铃效应:强边缘周围出现波纹状伪影
我画了一张图,帮你直观理解这个关系:
我曾经踩过的坑: 有一次为了追求锐度,把降噪强度调低、锐化强度调高。结果在暗光场景下,画面边缘出现了明显的“水彩画”效应——边缘像被水晕开了一样。后来才意识到,降噪不足时锐化会把噪声结构强化成虚假边缘。
3.3 高通平台噪声模型:从RAW到YUV的噪声传递
高通平台的ISP pipeline里,噪声不是一成不变的。它从RAW域开始,经过黑电平校正、去马赛克、白平衡、颜色校正、Gamma等模块,最终到达YUV域时,噪声的统计特性已经发生了复杂的变化。
我习惯把高通平台的噪声模型拆成三个阶段:
3.3.1 RAW域噪声模型
这是噪声的源头。高通平台通常使用光子转移模型来描述:
// 高通平台RAW域噪声模型(简化版)
// sigma_read: 读出噪声标准差(与增益无关)
// K: 转换增益(e-/DN)
// S: 信号强度(DN)
// gain: 模拟增益
sigma_total = sqrt(sigma_read^2 + K * S * gain)
// 实际高通代码中还会加入:
// - 行噪声(column FPN)
// - 像素响应非均匀性(PRNU)
// - 温度相关暗电流噪声
3.3.2 去马赛克后的噪声相关性变化
这是最容易忽略的一点。Bayer插值后,相邻像素的噪声不再独立——它们变得相关了。我举个例子:
- 原始Bayer:每个像素只有R/G/B之一,噪声独立
- 插值后:每个像素都有完整的RGB,但G通道的插值引入了空间相关性
- YUV转换后:Y = 0.299R + 0.587G + 0.114B,噪声被加权混合
结果就是:Y通道的噪声方差 ≈ 0.299²σR² + 0.587²σG² + 0.114²σB²。但别忘了,插值后的σR、σG、σB之间还有协方差项。
我的实战经验: 在高通SM8250平台上调试时,我发现U/V通道的噪声在暗部区域会出现“块状”分布。追根溯源,是去马赛克算法在低光照下插值权重计算不准导致的。解决方案是在YUV域增加一个基于局部方差的色度降噪强度映射表。
3.3.3 高通平台的噪声参数化模型
高通在它的ISP tuning工具中(比如Chimera),把YUV域的噪声模型参数化为几个关键曲线:
| 参数名称 | 含义 | 典型取值范围 |
|---|---|---|
| y_std_lut | 亮度噪声标准差 vs 亮度 | 0.5 ~ 15.0 |
| uv_std_lut | 色度噪声标准差 vs 亮度 | 0.3 ~ 8.0 |
| y_corr_radius | 亮度噪声空间相关半径 | 1 ~ 5 (像素) |
| uv_corr_radius | 色度噪声空间相关半径 | 2 ~ 8 (像素) |
| noise_profile_gain | 增益映射系数 | 0.8 ~ 2.0 |
这些参数怎么用?我一般会在调试时先拍一组灰卡(从暗到亮),然后提取每个亮度区间的噪声标准差,拟合出y_std_lut和uv_std_lut。有了这两个曲线,降噪强度就可以做到亮度自适应。
3.4 噪声分析的工程实践
说了这么多理论,最后分享几个我在高通平台上实际用过的分析手段:
- 平坦区域提取法:从图像中自动检测平滑区域(方差小于阈值),统计这些区域的Y/U/V标准差
- 频率域分析:对Y通道做FFT,观察高频分量的能量分布——噪声通常表现为均匀的高频能量,而真实边缘有方向性
- 噪声轮廓曲线:沿着一条穿过边缘的线,提取Y值变化。理想边缘是阶跃函数,有噪声的边缘会叠加随机波动
- 色度噪声分离:在U-V平面上做散点图,噪声表现为围绕中心点的随机分布,色偏则表现为中心点偏移
一句话总结: YUV域的噪声分析,核心是理解亮度噪声和色度噪声的差异,以及它们如何被ISP pipeline中的各个模块调制。只有把噪声模型摸透了,你才能设计出既降噪又不丢细节的边缘增强算法。