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 天前
第8章:ISP降噪技术全景
isp
几司4 天前
第6章:ISP前端处理:像素级处理
isp
几司5 天前
第5章:ISP前端处理:光学缺陷校正
isp
几司5 天前
第2章:CMOS图像传感器原理与技术
isp
几司5 天前
第4章:ISP前端处理:原始数据校正
isp
几司5 天前
第3章:图像传感器与ISP协同设计
isp
几司9 天前
第1章:ISP概述与发展历程
isp
木 东15 天前
图像高亮处过曝,该如何解决
图像处理·数码相机·camera·isp
岁月蹉跎的一杯酒18 天前
全志ISP调试相关文档—持续更新
isp
几司21 天前
OpenISP 模块拆解 · 第9讲:伽马校正 (GAC)
isp