OpenISP 模块拆解 · 第10讲:颜色空间转换 (CSC)

OpenISP 模块拆解 · 第10讲:颜色空间转换 (CSC)

模块作用

CSC 是颜色空间转换模块,openISP 用它把 RGB 转为 YUV。转换后,亮度 Y 和色度 U/V 分离,方便后续分别做亮度降噪、锐化、色度抑制、饱和度控制。

openISP 实现

源码类名为 CSC(img, csc)csc 是 3x4 矩阵:

text 复制代码
Y = (R*c00 + G*c01 + B*c02 + c03) / 1024
U = (R*c10 + G*c11 + B*c12 + c13) / 1024
V = (R*c20 + G*c21 + B*c22 + c23) / 1024

配置文件中的小数系数在主程序里乘以 1024,形成固定点矩阵。

默认转换

配置类似 limited range RGB to YUV:

text 复制代码
Y =  0.257R + 0.504G + 0.098B + 16
U = -0.148R - 0.291G + 0.439B + 128
V =  0.439R - 0.368G - 0.071B + 128

其中 Y offset 为 16,U/V 中性点为 128。

为什么转 YUV

图像质量调校常常希望分离亮度和色度:

  • Y 通道:降噪、锐化、亮度对比度。
  • UV 通道:饱和度、色相、伪彩抑制。

这样可以减少亮度处理对颜色的副作用。

读源码注意点

源码没有显式 clipping,最后直接转 uint8。若矩阵输出超出范围,真实系统应做饱和裁剪。

面试问答

Q1: YUV 中 Y 是不是等于绿色通道?

不是。Y 是由 RGB 加权得到的亮度分量,只是 G 权重通常最大,因为人眼对绿色更敏感。

Q2: U/V 为什么常以 128 为中性点?

在 8-bit 无符号表示中,色度需要表达正负偏移。用 128 作为零色度中心,低于或高于 128 表示不同色度方向。

Q3: 为什么锐化通常只做 Y 通道?

人眼对亮度细节更敏感,对色度分辨率较低。只锐化 Y 能增强清晰度,同时避免放大色噪和彩边。

Q4: CSC 和 CCM 都是矩阵,有什么区别?

CCM 是颜色校正,用于传感器 RGB 到目标 RGB 的颜色还原。CSC 是颜色空间转换,例如 RGB 到 YUV,用于后续编码或调校。

Q5: limited range 和 full range YUV 有什么区别?

limited range 通常 Y 在 16...235,UV 在 16...240;full range 使用 0...255。范围不同会影响黑位、白位和显示兼容性。

相关推荐
几司11 小时前
OpenISP 模块拆解 · 第4讲:抗混叠滤波 (AAF)
isp
几司11 小时前
OpenISP 模块拆解 · 第11讲:非局部均值降噪 (NLM)
人工智能·算法·均值算法·isp
几司1 天前
OpenISP 模块拆解 · 第8讲:颜色校正矩阵 (CCM)
isp
几司2 天前
OpenISP 模块拆解 · 第2讲:黑电平补偿 (BLC)
isp
北山有鸟6 天前
解决香橙派没有适配ov13855的3A算法
linux·c++·相机·isp
岁月蹉跎的一杯酒7 天前
【RKAIQ ISP21】RK3568 平台 SHARP_V3 锐化增强模块详解(GC2053 实战)
isp
岁月蹉跎的一杯酒7 天前
【RKAIQ ISP21】RK3568 平台 BAYERNR_V2 Bayer 域降噪模块详解(GC2053 实战)
isp
岁月蹉跎的一杯酒7 天前
【RKAIQ ISP21】RK3568 平台 LUT3D_CALIB 三维颜色查找表模块详解(GC2053 实战)
isp
岁月蹉跎的一杯酒8 天前
【RKAIQ ISP21】RK3568 平台 CCM_CALIB 颜色校正矩阵模块参数详解(GC2053 实战)
isp