OpenISP 模块拆解 · 第15讲:色相饱和度控制 (HSC)

OpenISP 模块拆解 · 第15讲:色相饱和度控制 (HSC)

模块作用

HSC 是色相和饱和度控制模块,作用在 YUV 的 UV 色度通道。它用于整体颜色风格调整,例如让颜色更鲜艳、偏暖或偏冷。

openISP 实现

源码类名为 HSC(img, hue, saturation, clip)。输入是 UV 两通道图像。

它先构造 0..359 度的 sin/cos LUT,并乘以 256 用作固定点。

理论公式

将 UV 去中心:

text 复制代码
u = U - 128
v = V - 128

色相旋转:

text 复制代码
U' = u*cos(hue) + v*sin(hue) + 128
V' = v*cos(hue) - u*sin(hue) + 128

饱和度缩放:

text 复制代码
U'' = saturation * (U' - 128) / 256 + 128
V'' = saturation * (V' - 128) / 256 + 128

其中 saturation=256 表示 1 倍。

读源码注意点

openISP 源码先计算 hue 旋转,但随后又用原始 self.img 计算 saturation 并覆盖前面的结果。因此当前实现中 hue 旋转实际没有生效,主要生效的是 saturation。

参数说明

参数 含义
hue 色相旋转角度
saturation 饱和度增益,256 为 1 倍
clip 输出上限

面试问答

Q1: YUV 中如何调整饱和度?

以 128 为 UV 中性点,把 U/V 到 128 的偏移乘以饱和度系数,再加回 128。偏移越大,颜色越鲜艳。

Q2: 色相调整本质是什么?

在 UV 平面围绕中性点旋转向量,相当于改变颜色方向,但尽量保持色度幅度。

Q3: 饱和度过高有什么副作用?

会放大色噪、伪彩和压缩色块,也可能造成颜色 clipping,让肤色和自然物体不真实。

Q4: 为什么 HSC 常放在后段?

它属于风格调校,通常在基础颜色还原、降噪、伪彩处理之后做,避免把前面的问题放大。

Q5: openISP 的 HSC 有什么实现问题?

hue 旋转结果被 saturation 计算覆盖,导致 hue 参数实际不生效。应先旋转,再基于旋转结果做饱和度缩放。

相关推荐
几司4 小时前
OpenISP 模块拆解 · 第3讲:镜头阴影校正 (LSC)
isp
几司15 小时前
OpenISP 模块拆解 · 第6讲:色度噪声过滤 (CNF)
isp
几司1 天前
OpenISP 模块拆解 · 第1讲:坏点校正 (DPC)
笔记·学习·isp
几司1 天前
OpenISP 模块拆解 · 第12讲:双边滤波降噪 (BNF)
人工智能·计算机视觉·isp
几司1 天前
OpenISP 模块拆解 · 第5讲:白平衡增益控制 (AWB)
isp
几司1 天前
OpenISP 模块拆解 · 第10讲:颜色空间转换 (CSC)
isp
几司1 天前
OpenISP 模块拆解 · 第4讲:抗混叠滤波 (AAF)
isp
几司1 天前
OpenISP 模块拆解 · 第11讲:非局部均值降噪 (NLM)
人工智能·算法·均值算法·isp
几司2 天前
OpenISP 模块拆解 · 第8讲:颜色校正矩阵 (CCM)
isp