关键词RK3568 RKAIQ ISP21 Gamma Gamma Curve IQ Tuning GC2053
适用平台: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 调试的核心。


参考资料

  1. Rockchip RKAIQ Framework Documentation
  2. RKAIQ ISP21 Gamma Calibration Guide
  3. RKMedia Developer Guide
  4. GC2053 Datasheet
  5. RKAIQ Source Code
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐