OpenISP 模块拆解 · 第16讲:亮度对比度控制 (BCC)
OpenISP 模块拆解 · 第16讲:亮度对比度控制 (BCC)
模块作用
BCC 是亮度和对比度控制模块,作用在 Y 通道。它位于 pipeline 后段,用于最终影调和显示观感调整。
openISP 实现
源码类名为BCC(img, brightness, contrast, clip)。
核心公式:
Y1 = Y + brightness Y2 = Y1 + (Y - 127) * contrast主程序中contrast会再除以2^5,所以配置值是固定点风格的整数参数。
参数说明
| 参数 | 含义 | 现象 |
|---|---|---|
brightness | 全局亮度偏移 | 正值变亮,负值变暗 |
contrast | 对比度增益 | 正值拉开明暗差 |
clip | 输出上限 | 限制到 0…255 |
调参现象
- 亮度过高:黑位抬高,画面发灰,高光易裁剪。
- 亮度过低:暗部死黑,细节丢失。
- 对比度过高:高光和阴影被压扁,画面硬。
- 对比度过低:画面平,层次不足。
学习重点
- BCC 是全局线性调整,不理解局部内容。
- 对比度调整以 127 附近为中心,改变像素离中灰的距离。
- BCC 不能替代完整 tone mapping。
面试问答
Q1: 亮度和对比度有什么区别?
亮度是整体加减偏移,所有像素大致同方向移动。对比度是以中灰为中心拉伸或压缩亮暗差。
Q2: 为什么对比度公式要减 127?
127 是 8-bit 图像的中间灰附近。以它为 pivot,可以让低于中灰的像素更暗,高于中灰的像素更亮。
Q3: BCC 为什么放在 Y 通道?
Y 通道代表亮度。只改 Y 可以调整明暗和对比,同时尽量不改变颜色方向。
Q4: BCC 过强会导致什么?
会造成 clipping,暗部和高光细节丢失,也可能让噪声和压缩瑕疵更明显。
Q5: BCC 和 Gamma 有什么区别?
BCC 是线性或近线性全局调整,Gamma 是非线性曲线。Gamma 更适合控制暗部、中间调和亮部的非线性关系。
