关键词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

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐