海思 Sharpen Auto 模式完整参数详解
这是海思锐化模块自动模式的完整参数表,展示了商用 ISP 级别的精细控制 ------ 这就是为什么海思画质比开源方案好的根本原因。
一、核心设计:二维参数表
注意数组维度:
c
运行
参数[OT_ISP_SHARPEN_LUMA_NUM][OT_ISP_AUTO_ISO_NUM]
↓ 亮度等级 ↓ ↓ ISO档位 ↓
这是二维查表! 不仅随 ISO 变化,还随画面亮度变化:
- ISO 维度:16 档,高 ISO 降低锐化
- 亮度维度:通常 8 档,暗区降低锐化(暗区噪声大)
二、逐组参数详解
2.1 亮度权重表
c
运行
td_u8 luma_wgt[8][16]; // [亮度等级][ISO]
作用:不同亮度区域的锐化权重
- 亮区(Luma=200~255):权重高 → 充分锐化
- 暗区(Luma=0~50):权重低 → 避免放大暗噪
- 典型:亮区 100%,暗区 30%~50%
2.2 纹理 / 边缘分离控制(核心创新)
海思锐化不是单一强度,而是纹理和边缘分别控制:
c
运行
// 纹理强度(毛发、布料、皮肤纹理)
td_u16 texture_strength[4][16]; // [4个增益等级][ISO]
// 边缘强度(文字、轮廓、硬边缘)
td_u16 edge_strength[4][16]; // [4个增益等级][ISO]
// 纹理频率截止(控制什么算"纹理")
td_u16 texture_freq[16];
// 边缘频率截止(控制什么算"边缘")
td_u16 edge_freq[16];
原理:频域分解
plaintext
原图 → 多尺度分解 → 3个频带
↓
低频 → 不处理(保留大结构)
中频 → texture_strength 控制(纹理)
高频 → edge_strength 控制(边缘)
调试原则:
texture_strength>edge_strength→ 画面通透、有质感edge_strength>texture_strength→ 边缘硬、像 "描边"
2.3 过冲 / 下冲抑制(振铃控制)
c
运行
td_u8 over_shoot[16]; // 边缘白边抑制
td_u8 under_shoot[16]; // 边缘黑边抑制
USM 锐化的通病:边缘产生 "白边 + 黑边" 的振铃效应。
海思的解决方案:分别限制正负过冲幅度
plaintext
锐化后像素 = 原值 + 细节 × 增益
如果 细节 > 0(亮边缘):最大值限制为 over_shoot
如果 细节 < 0(暗边缘):最小值限制为 under_shoot
- 值 = 0:完全抑制,无振铃但边缘偏软
- 值 = 255:无限制,边缘锐利但振铃明显
- 典型值:over_shoot=32~64, under_shoot=24~48
2.4 运动区域独立参数(全套!)
注意:运动区域有全套独立参数,不是简单乘个系数!
c
运行
// 运动区:纹理/边缘强度
td_u16 motion_texture_strength[4][16];
td_u16 motion_edge_strength[4][16];
// 运动区:频率截止
td_u16 motion_texture_freq[16];
td_u16 motion_edge_freq[16];
// 运动区:过冲/下冲
td_u8 motion_over_shoot[16];
td_u8 motion_under_shoot[16];
设计思想:
- 静止区:高锐化、高过冲 → 追求清晰度
- 运动区:低锐化、低过冲 → 追求无锯齿、流畅
2.5 过冲抑制增强
c
运行
td_u8 shoot_sup_strength[16]; // 过冲抑制强度
td_u8 shoot_sup_adj[16]; // 过冲抑制自适应系数
高级振铃抑制:检测强边缘附近,进一步限制过冲。
2.6 细节控制
c
运行
td_u8 detail_ctrl[16]; // 细节增强强度
td_u8 detail_ctrl_threshold[16]; // 细节阈值(小于此值不增强)
小细节增强:针对极细微纹理的单独控制。
2.7 边缘滤波控制
c
运行
td_u8 edge_filt_strength[16]; // 边缘前滤波强度
td_u8 edge_filt_max_cap[16]; // 边缘滤波最大限制
锐化前先对边缘做轻微平滑,避免噪声被当成边缘放大。
2.8 分通道增益(极其重要)
c
运行
td_u8 r_gain[16]; // R通道锐化增益
td_u8 g_gain[16]; // G通道锐化增益
td_u8 b_gain[16]; // B通道锐化增益
td_u8 skin_gain[16];// 肤色区域增益
为什么分通道?
- B 通道噪声最大 → b_gain 设为 0.5~0.7,减少蓝噪
- R 通道次之 → r_gain 设为 0.7~0.8
- G 通道噪声最小 → g_gain 设为 1.0,保证清晰度
- 肤色单独 → skin_gain 设为 0.2~0.4,皮肤光滑
典型配置:
plaintext
g_gain = 100%
r_gain = 75%
b_gain = 50%
skin_gain = 30%
这就是为什么专业相机锐化后噪点少 ------B 通道根本就没怎么锐化!
2.9 最大增益限制
c
运行
td_u16 max_sharp_gain[16];
全局最大锐化增益上限,防止极端参数导致画面崩坏。
2.10 高级子模块
c
运行
// 过冲阈值属性
ot_isp_sharpen_auto_shoot_threshold_attr shoot_threshold_attr;
// 边缘相关性属性(抗锯齿)
ot_isp_sharpen_auto_edge_rly_attr edge_rly_attr;
// 运动自适应增益
ot_isp_sharpen_auto_gain_by_mot_attr gain_by_mot_attr;
三、海思锐化 vs 开源 USM 对比
表格
| 特性 | 开源 USM | 海思 Sharpen |
|---|---|---|
| 强度控制 | 单一全局 | 纹理 / 边缘分离 |
| 亮度自适应 | 无 | 8 级亮度查表 |
| ISO 自适应 | 无 | 16 级 ISO 查表 |
| 运动自适应 | 无 | 全套独立参数 |
| 肤色保护 | 无 | 单独增益控制 |
| 分通道 | 无 | R/G/B 分别控制 |
| 振铃抑制 | 无 | 正负过冲分别限制 |
| 频带控制 | 无 | 纹理 / 边缘频率截止 |
| 控制维度 | 1 维 | 8 维控制 |
四、调试优先级(从粗到细)
第一级(必调)
- 分通道增益:b_gain 降到 50%,skin_gain 降到 30%
- 过冲抑制:over_shoot=48, under_shoot=32
- Auto 曲线:ISO>3200 时强度减半
第二级(优化)
- 纹理 / 边缘比例:texture > edge,避免描边感
- 亮度权重:暗区权重降到 50% 以下
- 运动参数:运动区强度降到静止区的 30%
第三级(精细)
- 频率截止、细节控制、过冲抑制增强等
总结
海思 Sharpen 模块的本质:
不是一个简单的 "锐化强度" 滑块,而是一个 8 维度的自适应控制系统
- ISO 维度 × 亮度维度 × 频带 (纹理 / 边缘) × 运动 / 静止
- × 肤色 / 非肤色 × R/G/B 通道 × 过冲限制 × 细节阈值
这就是为什么海思 ISP 的锐化 "看起来很锐但噪点不多"------ 它只在 ** 该锐化的地方(亮区、静止、G 通道、边缘)** 锐化,** 不该锐化的地方(暗区、运动、B 通道、肤色、平坦区)** 根本就不锐化。
开源算法的问题就是 "一刀切"------ 所有地方用同一个锐化强度,结果就是要么不够锐,要么锐化后噪点满天飞。