美文网首页程序员
基于肤色保护的自然饱和度增强算法

基于肤色保护的自然饱和度增强算法

作者: yongbaoqiji | 来源:发表于2023-11-23 15:08 被阅读0次

饱和度增强指的是通过调整图片和视频画面的饱和度特性,使得画面色彩得以还原真实色彩更加逼真或相比原画面更加丰富,从而提升人的视觉主观感受。对视频图像等后处理具有重要的意义。

1. 饱和度

饱和度是指色彩的鲜艳程度,也称色彩的纯度。

饱和度取决于该色中含色成分和消色成分(灰色)的比例。含色成分越大,饱和度越大;消色成分越大,饱和度越小。

其中,HSV模式中饱和度(Saturation)的计算公式(基于RGB色彩通道):

hsv.sat=\frac{max(r,g,b)-min(r,g,b)}{min(r,g,b)}

饱和度也可定义为彩度除以明度,与彩度同样表征彩色偏离同亮度灰色的程度。计算公式如下:

sat(r,g,b)=max(\frac{(r,g,b)-gray}{1-gray},\frac{gray-(r,g,b)}{gray})
sat=max(sat(r,g,b))

2. 自然饱和度增强模型

有了前面对饱和度的定义和计算公式,我们知道当拿到当前任意一个像素点,我们知道如何获取这个像素点的饱和度。

接下来,我们的目标是,对饱和度进行增强调节,首先,给出定义饱和度增强的数学模型,如下:

color=rgb+f(sat)\cdot(rgb-gray)
以上公式关键有2点:

(1) 利用了第1节中关于彩度定义中,彩色偏离灰色的程度,我们对饱和度增强就是在加大这个偏离程度。

(2) 通过什么样的数学模型表征这个偏离程度,线性模型还是非线性模型。如果使用线性,可能会存在对一些色彩过度增强导致色偏。

基于以上第2点,自然饱和度(Vibrance)的概念早已被提出。在调整自然饱和度时,会自适应提升画面中即饱和度低的颜色,而使原本饱和度够的颜色保持原状。自然饱和度的概念最先由 photoshop 提出,重点在于适应性,自然饱和度调整后一般比直接饱和度调整要更自然。

如何实现自然饱和度,这个时候主要看上面公式中f(k)如何定义。本文提出一种简化的基于Gamma曲线的自然饱和度数学模型:

f(sat)=k(1-sat)^{l}

其中,sat的计算由第一节两个饱和度计算公式的出。
该数学模型的曲线如下图:


image.png

从以上曲线看出,该模型根据当前像素点的饱和度,很好地自适应调整了对应的饱和度系数。饱和度越高的点,增强效果越弱,饱和度越低的点,增强效果越强。

3. 肤色保护模型

在短视频或直播视频中,人像作为画面的主要内容的场景频率较高,以上的自然饱和度模型并没有考虑肤色情况,如果不加区别进行调节,可能会导致人像肤色偏红失真。因此,我们需要针对肤色区域进行识别,并对肤色区域做特殊处理,进而减轻饱和度的调整强度。

此时,新的饱和度增强模型更新为,其中,skin(rgb)代表肤色模型:
color=rgb+skin(rgb)\cdot{f(sat)\cdot(rgb-gray)}

常用的肤色模型,包括基于RGB,YCrCb,YCgCr,HSV等色彩模型。针对肤色识别,已经有很多文章,本文限于章节内容,不做具体介绍。可以参考文献[1];

以上每一种模型都有自己的局限性,无法保证各种场景有100%的正确肤色识别正确率,和错判为肤色误判率。比如,RGB彩色模型受亮度影响较大;以上模型基本模型都有一个一个共同特征,按照区别判断,比如,以常用的YCrCb为例,可能的肤色区别为(最好根据自己的数据源调整范围):
\left\{ \begin{aligned} 133 \leq C_r <173\\ 77 \leq C_b < 127 \end{aligned} \right.
直接应用以上数学模型判断,会导致二值效应,即强烈的边际效应。所以改进的模型,可以基于YCrCb椭圆模型,使得skin(C_r,C_b)的输出改为连续的函数,调整后的模型如下,表示的含义是,离肤色中心点越接近,值越接近1,即代表为肤色的概率越高,否则,越远离肤色点,表示为肤色的概率越低。从而保证,skin(C_r,C_b)的输出是连续的。
skin(C_r,C_b)=1 - k\cdot{({\frac{(C_r-C_{r0})^2}{a^2}+\frac{(C_b-C_{b0})^2}{b^2}})}\\
其中,C_rmax,C_bmax代表阀值上界,C_rmin,C_bmin代表阀值下界:
a=\frac{{C_{rmax}-C_{rmin}}}{2}\\
b=\frac{{C_{bmax}-C_{bmin}}}{2}\\
C_{r0}=\frac{{C_{rmax}+C_{rmax}}}{2}\\
C_{b0}=\frac{{C_{bmax}+C_{bmax}}}{2}\\
经以上优化后,新的模型为:
color=rgb+(1-skin(C_r,C_b))\cdot{f(sat)\cdot(rgb-gray)}
其中,(C_r,C_b)根据RGB计算得到。

参考文献:

[1]Human Skin Detection Using RGB, HSV and YCbCr Color Models

喜欢的话,记得帮忙点赞

相关文章

网友评论

    本文标题:基于肤色保护的自然饱和度增强算法

    本文链接:https://www.haomeiwen.com/subject/spkgwdtx.html