【RKAIQ ISP21】RK3568 平台 Gamma 曲线模块参数详解(GC2053 实战)
本文详细介绍了RK3568/RV1126/RK3588平台ISP21框架中的Gamma曲线调试方法。Gamma曲线用于将传感器线性亮度转换为适合人眼观看的数据,直接影响画面黑场深度、中间调通透性和高光柔和度。文章从Gamma原理、架构入手,重点解析了Gamma_en开关、Gamma_out_segnum分段类型、Gamma_curve曲线等核心参数,并提供了4种典型曲线风格对比和调节速查表。
关键词:
RK3568RKAIQISP21GammaGamma CurveIQ TuningGC2053
适用平台:RK3568 / RV1126 / RK3588(ISP21 框架通用)
作者笔记:本文基于gc2053_default_JX8006.json实战调试过程整理
📑 文章目录
- 前言
- 一、Gamma 是什么
- 二、整体架构
- 三、
Gamma_en—— Gamma 总开关 - 四、
Gamma_out_segnum—— 曲线分段类型 - 五、
Gamma_out_offset—— 输出偏移 - 六、
Gamma_curve—— 45 点 Gamma 曲线核心 - 七、4 种典型 Gamma 曲线风格
- 八、Gamma 曲线调节速查
- 九、当前 IQ 文件状态分析
- 十、
adegamma_calib—— 反 Gamma 模块 - 十一、Gamma 与其他模块协同
- 十二、典型问题速查表
- 十三、Gamma 曲线设计示例
- 十四、板端验证流程
- 附:Python 自动生成 Gamma 曲线
- 总结
- 参考资料
前言
agamma_calib_v10 是 RKAIQ ISP21 框架中的 Gamma 曲线模块。
它的作用可以简单理解为:
把传感器输出的“线性亮度”重新映射成更符合人眼观看习惯的亮度。
如果没有 Gamma:
- 画面会发灰
- 对比度很差
- 黑场浮起来
- 高光很生硬
Gamma 的本质:
输入亮度
↓
Gamma 曲线重映射
↓
输出亮度
它决定:
- 黑场深不深
- 中间调是否通透
- 高光是否柔和
- 画面有没有“立体感”
一、Gamma 是什么
Gamma 本质上是一条:
亮度映射曲线
作用:
把线性的 Sensor 数据
转换成适合显示器和人眼观看的数据
Gamma 的核心思想
传感器输出:
线性亮度
但:
人眼对暗部更敏感
因此:
- 暗部需要更多层次
- 高光需要压缩
- 中间调需要增强对比
于是就需要:
Gamma 曲线
二、整体架构
Gamma 模块非常简单:
agamma_calib_v10
└── GammaTuningPara
├── Gamma_en
├── Gamma_out_segnum
├── Gamma_out_offset
└── Gamma_curve
模块说明
| 字段 | 作用 |
|---|---|
| Gamma_en | 总开关 |
| Gamma_out_segnum | 曲线分段方式 |
| Gamma_out_offset | 输出偏移 |
| Gamma_curve | 45 点 Gamma 曲线 |
三、Gamma_en —— Gamma 总开关
参数说明
| 值 | 含义 |
|---|---|
1 |
启用 Gamma |
0 |
关闭 Gamma |
推荐配置
"Gamma_en": 1
为什么必须开
如果关闭:
画面会严重发灰
因为:
Sensor 输出本身是线性的
并不适合直接显示。
四、Gamma_out_segnum —— 曲线分段类型
⭐ Gamma 最关键参数之一
参数说明
| 值 | 含义 | 推荐 |
|---|---|---|
GAMMATYPE_LOG |
对数分段 | ✅ 推荐 |
GAMMATYPE_EQU |
等距分段 | ❌ 一般不用 |
五、LOG 分段为什么更好
LOG 分段:
暗部点位更密集
高光点位更稀疏
符合:
人眼对暗部更敏感
LOG 分布示意
0,1,2,4,8,16,32,64,128...
特点:
| 区域 | 点位密度 |
|---|---|
| 暗部 | 很密 |
| 高光 | 很稀 |
六、Gamma_out_offset —— 输出偏移
作用:
整条 Gamma 曲线整体偏移
参数说明
| 值 | 效果 |
|---|---|
| 正值 | 整体变亮 |
| 负值 | 整体变暗 |
| 0 | 不偏移 |
当前配置
"Gamma_out_offset": 0
推荐保持默认。
七、Gamma_curve —— 45 点 Gamma 曲线核心
🔥 整个 Gamma 模块最核心部分。
7.1 基本规则
Gamma_curve:
固定长度 45
必须满足
| 规则 | 说明 |
|---|---|
| 长度必须 45 | 多一个少一个都会出错 |
| 必须单调递增 | 后面的值不能小于前面 |
| 范围 0~4095 | 12-bit |
当前 Gamma 曲线
"Gamma_curve": [
0,4,7,11,15,19,22,27,30,
57,68,80,90,113,135,156,179,
218,257,294,328,388,441,488,532,
617,700,779,854,990,1116,1237,1350,
1545,1716,1885,2051,2355,
2600,2810,2990,3320,3590,3830,4030
]
八、Gamma 曲线分区理解
前 8 点:黑场区
idx 0 ~ 7
决定:
- 黑场深度
- 暗部层次
中间区域:中调区
idx 18 ~ 32
决定:
- 对比度
- 通透感
- 立体感
末尾区域:高光区
idx 40 ~ 44
决定:
- 高光是否硬切
- 白色是否柔和
九、4 种典型 Gamma 曲线风格
9.1 原厂 LOG 曲线
特点:
- 暗部抬高
- 对比度弱
- 画面偏灰
典型问题:
白白的
灰灰的
9.2 标准 sRGB 曲线
特点:
- 中性
- 标准显示器风格
- 色彩准确
9.3 S 型曲线(当前使用)
⭐ IPC 最常用
特点:
- 暗部压低
- 中段提陡
- 高光柔和
效果:
画面更有立体感
9.4 极致电影风
特点:
- 黑场很沉
- 中段极陡
- 高光 rolloff
缺点:
容易丢暗部细节
十、Gamma 曲线调节速查
| 想要效果 | 修改区域 | 调节方向 |
|---|---|---|
| 黑场更黑 | 前 8 点 | 整体降低 |
| 暗部更亮 | 前 8 点 | 整体提高 |
| 中段更通透 | 中间区域 | 提高 5~10% |
| 高光不过曝 | 末 5 点 | 留 headroom |
| 整体变亮 | 全部 | ×1.1 |
| 整体变暗 | 全部 | ×0.9 |
十一、当前 IQ 文件状态分析
当前状态
| 字段 | 状态 | 说明 |
|---|---|---|
| Gamma_en | ✅ 1 | 已开启 |
| Gamma_out_segnum | ✅ LOG | 推荐 |
| Gamma_out_offset | ✅ 0 | 默认 |
| Gamma_curve | ✅ S 型 | 已优化 |
当前曲线的特点
1. 黑场压低
前 8 点:
比默认低约 30%
效果:
黑场更沉
2. 中段增强
中间调:
提升约 5~8%
效果:
画面更通透
3. 高光 rolloff
末点:
4030
而不是:
4095
效果
高光不硬切
十二、adegamma_calib —— 反 Gamma 模块
文件里还有:
adegamma_calib
默认:
"degamma_en": 0
用途
作用:
把 Gamma 图像重新拉回线性域
通常用于:
- RAW 域处理
- HDR 流程
- 特殊 ISP 算法
普通 IPC:
一般不用
十三、Gamma 与其他模块协同
数据流:
ADRC
↓
Gamma
↓
CCM
↓
最终输出
十四、核心协同关系
| 协同模块 | 关系 |
|---|---|
| Gamma vs ADRC | 都影响对比度 |
| Gamma vs CPROC | 都影响亮度对比 |
| Gamma vs CCM | Gamma 会影响颜色饱和度 |
调试铁律
1. 先调 Gamma 再调 CPROC
原因:
Gamma 是基础亮度形状
2. 不要同时猛调 ADRC + Gamma
否则:
容易过冲
3. Gamma 改完必须重新看色彩
因为:
暗部抬升会影响 CCM 输出
十五、典型问题速查表
| 现象 | 调节方法 |
|---|---|
| 🌫️ 画面发灰 | 改 S 型曲线 |
| ⚫ 黑场不够沉 | 降低前 8 点 |
| 🌑 暗部死黑 | 提高前 8 点 |
| 🪟 高光过曝 | 末点改 4030 |
| 🎨 对比度不足 | 提高中段 |
| ☀️ 整体太亮 | 全曲线 ×0.9 |
| 🌚 整体太暗 | 全曲线 ×1.1 |
十六、Gamma 曲线设计示例
16.1 原厂默认 LOG 曲线
[0,5,10,16,21,27,32,38,43,
54,65,76,86,108,129,149,170,
208,245,280,312,370,420,465,507,
588,667,742,813,943,1063,1178,1286,
1471,1634,1795,1953,
2243,2502,2736,2947,3308,3605,3860,4095]
特点:
画面偏灰
16.2 当前 S 型曲线(推荐)
[0,4,7,11,15,19,22,27,30,
57,68,80,90,113,135,156,179,
218,257,294,328,388,441,488,532,
617,700,779,854,990,1116,1237,1350,
1545,1716,1885,2051,2355,
2600,2810,2990,3320,3590,3830,4030]
特点:
黑场沉
中段通透
高光柔和
16.3 电影风曲线(参考)
[0,2,4,7,10,13,16,20,24,
35,48,62,78,105,135,165,200,
240,290,345,405,480,555,625,700,
800,920,1040,1170,1330,1490,1660,1830,
2050,2270,2480,2680,
2880,3080,3260,3540,3760,3920,4030]
特点:
电影感强
十七、板端验证流程
17.1 推送 IQ 文件
adb push gc2053_default_JX8006.json /oem/etc/iqfiles/
17.2 停止冲突进程
/oem/RkLunch-stop.sh
17.3 启动 RTSP
rkmedia_vi_venc_rtsp_test -a /oem/etc/iqfiles
十八、建议测试场景
建议重点验证:
- 🌑 黑色物体
- ⚪ 白色高光
- 👤 人脸肤色
- 🎨 渐变测试图
- 🪟 室内拍窗外
附:Python 自动生成 Gamma 曲线
import numpy as np
x = np.array([
0,1,2,3,4,5,6,7,8,
16,24,32,40,56,72,88,104,
136,168,200,232,296,360,424,488,
616,744,872,1000,
1256,1512,1768,2024,
2536,3048,3560,4072,
5096,6120,7144,8168,
10216,12264,14312,16383
])
x_norm = x / x.max()
gamma = 2.2
s_curve = np.power(x_norm, 1/gamma)
s_curve = 0.5 + 0.5 * np.tanh(
2.5 * (s_curve - 0.5)
)
y = (s_curve * 4030).astype(int).tolist()
y[0] = 0
print(y)
总结
Gamma 的本质:
重新分配亮度层次
真正决定的是:
- 黑场
- 对比度
- 立体感
- 高光风格
实际项目里最重要的:
不是“亮”
而是:
有层次
有立体感
不过曝
因此:
- Gamma_curve 前段
- 中段
- 高光 rolloff
才是 Gamma 调试的核心。
参考资料
- Rockchip RKAIQ Framework Documentation
- RKAIQ ISP21 Gamma Calibration Guide
- RKMedia Developer Guide
- GC2053 Datasheet
- RKAIQ Source Code
更多推荐


所有评论(0)