背景
色调加强作为视频后处理中画质加强技术的一部分,指的是通过调整图片和视频画面的饱和度个性,使得画面色调更加丰盛和真切,晋升人的视觉主观感触。因为设施摄像头的多样性,局部摄像头在视频采集时存在饱和度有余,画面发灰,色调寡淡等问题,这些状况在拍摄室外风物和色彩丰盛的场景时尤其容易呈现。这些问题能够通过算法的后处理调整进行改善。色调加强配合视频降噪,暗光加强,对比度调整,边缘增强等技术,能够对视频画质起到较大的晋升作用。
■色调加强成果示意图(左:原图 右:加强后)
原图起源:HEVC 规范测试码流
色调加强算法的设计
后处理对于色彩的调整,个别有两个不同的指标,“还原”和“难看”。“还原”指的是使画面可能实在出现场景的实在色彩,不偏色。“难看”指的是画面的色彩档次足够丰盛和天然,可能晋升人视觉的舒适感,使天空更蓝草地更绿,进去的画面更合乎人的爱好,是一个绝对主观的指标。色调加强次要关注在“难看”这一指标上。目前针对色调加强的主观评估规范和公共数据集都比拟不足,依据收集到的一些材料,大概能够演绎出以下色调加强算法的设计指标:
1. 调整后可能进步人对画面质量的主观感触。这个指标是否达成,次要依赖于开发人员、评测人员和用户的主观判断打分。
2. 算法具备适应性。适应性是指对于不同图像,或者同一图像的不同局部,调节强度因应图像个性而有差别。防止导致原来曾经较为娇艳的色调呈现过饱和的景象。
3. 调整后不产生显著瑕疵。色调加强比拟容易产生的问题是过饱和,画面细节的失落,偏色,或者导致色彩分层等瑕疵。另外也很容易强化画面暗部的黑白噪声。
4. 对于视频帧序列来说,色调加强的解决不能造成画面色彩渐变。比方一些依赖于全局统计量的算法,光源的忽然呈现可能会造成画面成果的渐变,造成画面成果的跳变。
5. 对人像的肤色进行爱护。单纯的色调加强算法容易导致人像肤色变“橙”的问题。因为人的肤色与物体的色彩不同,存在一个教训正当范畴,调整超出这个范畴之后就会使人像看上去不实在。所以须要对人的肤色进行肯定的爱护。
6. 须要思考色调加强在整个视频解决流程中与其余画质调整模块的配合,会否造成整体成果变差的状况。
以上的各点能够看做是算法设计时的一个自检表,并非必要全副严格满足,然而如果其中的一项呈现了比较严重的问题,那么这个算法的可用性会大打折扣。
色彩模型的抉择
色调加强办法个别通过将 RGB 色彩转换到适合的色彩模型,比方 HSV,YUV,Lab 色彩模型等,再套用设计好的算法对特定通道进行调整。个别心愿将表征色彩鲜艳水平的重量提取进去进行独自调整,这样调整的时候就不会对明暗造成影响,也不会造成偏色。
■调整流程示意
除此之外,目前还有应用基于神经网络的办法去做图像增强,由网络本人实现对图像的调整,而不须要由人来设计公式。深度学习的加强办法个别会将色调,对比度,亮度加强同时实现在一个网络中同时调整,达到画质加强的成果,而其中又分为黑盒办法和白盒办法等。
因为咱们色调加强的工程需要是疾速落地,在挪动端实现实时、轻量级,并且成果高度可控的算法,同时须要成果与美颜、暗光加强、去噪等模块解耦并相互配合,因而非神经网络的色调加强办法是更好的抉择。
色调加强办法面临的第一个问题是如何抉择适合的色彩模型去进行算法设计。
基于 HSV 色彩模型的饱和度调整
基于 HSV 饱和度的调整办法是将 RGB 色彩模型转换为 HSV 色彩模型,其中 HSV 别离示意(Hue)色相,(Saturation)饱和度和(value)明度。只调整饱和度能够在不影响明暗和色相的状况下加强色调的娇艳水平。
常见的调整办法有整体抬升,按比例减少,或者曲线调整,达到将整体饱和度进步的目标。如下图的 gamma 曲线就是比拟罕用的调整曲线。
■曲线调整示意图
然而饱和度调整同时晋升所有色彩的强度,比拟粗犷,有可能导致部分过饱和,部分细节的隐没。
■肤色产生了肯定的过饱和景象(左:原图 右:加强后)
■调整后衣服皱褶细节失落(左:原图 右:加强后)
原图起源:HEVC 规范测试码流
这对这个问题,天然饱和度(Vibrance)的概念被提出。在调整天然饱和度时,会智能晋升画面中比拟柔和(即饱和度低)的色彩,而使本来饱和度够的色彩保持原状。
基于天然饱和度的调整
天然饱和度的概念最先由 photoshop 提出,重点在于适应性,天然饱和度调整后个别比饱和度调整要天然。上面别离介绍两种天然饱和度调整的算法。
第一种间接在 RGB 通道上进行统计与调整。其天然饱和度调整的流程是:
1. 计算每个像素 r、g、b 的均值和最大值,别离记为 rgb_avg 以及 rgb_max。
2. 计算 k 值:k = (abs( rgb_max – rgb_avg) / 127.0 ) * Vibrance。其中 Vibrance v 为调节强度系数,范畴为 0~100。
3. 对 r、g、b 别离用同一公式进行调整,以 R 为例,r = (rgb_max – r) * k + r。
该种调节形式能够针对饱和度不同的像素进行不同的调整,可能比拟好防止过饱和的状况产生。然而从公式上能够晓得,其调整偏向于将 rgb 值往同一个 rgb_max 值进行凑近,可能无奈保障色彩保持稳定,不同色彩的调整力度差别较大,会产生偏色的状况。
第二种通过亮度和饱和度进行自适应调节。其天然饱和度的调整流程是:
1. 从 RGB 计算 luma 值:luma = 0.2126 r + 0.7152 g + 0.0722 *b。
2. 从 rgb 计算 satuation 值:satuation = max(r ,g, b) – min(r, g, b)。
3. 计算 k 值:k = 1.0 + Vibrance * (1.0 – satuation / 255.0),其中 Vibrance 为调节强度 0~1。
4. 对 r、g、b 别离用同一公式进行调整,以 r 为例,r = luma (1.0 – k) + r k。
同样地,从公式上能够晓得,其调整偏向于将 rgb 值往同一个 luma 值进行凑近,也是无奈保障色彩保持稳定,会产生偏色的状况。
■基于天然饱和度的加强(左:原图 右:加强后)
从色彩模型上看,基于 RGB、HSV 等色彩空间的色彩调整,对于人的视觉感知是非平均的,很可能会产生偏色的状况,因而须要一个更适合的色彩模型。Lab 色彩模型是 CIE 在 1976 年改良并且命名的一种色调模式。它是一种设施无关的色彩模型,也是一种基于生理特色的色彩模型,更适宜利用在色调加强上。
基于 Lab/Lch 色彩模型的调整
Lab 色彩模型由三个因素组成,一个因素是亮度(L),a 和 b 是两个色彩通道。而 Lch 色彩模型采纳了同 Lab 一样的色彩空间,但它采纳 c 示意饱和度值及 h 示意色调角度。能够认为,ch 是 ab 的极坐标示意形式。因为 Lch 模型是基于生理特色建设的,意味着如果只调节 c 饱和度值的话,就能够起到保障不偏色的成果。
开源图像处理软件 Gimp 的主动色调加强算法是应用 Lch 色彩模型进行调整的,其解决流程为:
1. 将 RGB 转换到 LCH。
2. 遍历图像像素,找到 C 的最大值 c_max 和最小值 c_min。
3. 对每个像素的 C 进行拉伸:c = (c – c_min) / (c_max – c_min) * 100。
4. 将 LCH 转换回 RGB。
■解决前
■解决后
在 Lch 空间进行调节要比 HSV 上调节迷信得多,从实际效果上看,基本上没有呈现偏色的状况。不过 Gimp 的办法次要针对的是图片,当用在视频上时,因为存在全局统计,求最大最小值,会减少肯定的运算量,同时它会受图像最强点和最弱点的影响较大,若有最强点和最弱点忽然来到或进入屏幕,成果可能呈现渐变,所以这个办法不适用于视频解决。在理论工程化的时候,须要从新设计调整公式,去除对于全局统计点的依赖。
黑白噪声克制
图像采集的噪声从色调空间上划分,能够分为 luma noise 亮度噪声与 chroma noise 黑白噪声。色调加强的利用场景中,比拟容易呈现的问题是同时把画面中的黑白噪声放大,因而在算法的设计过程中要尽量避免。
同样强度的噪声,在饱和度较低的平坦区域远比在色彩娇艳的区域看起来要显著。在彩色图像灰色区域中,噪声往往以黑白噪点的模式呈现,色调加强如果不加区分的话,会同时将这些噪点也一并加强,如下图:
■黑白噪声被加强示意图(左:原图 右:加强后)
针对黑白噪声的统计个性,在工程化的时候,须要进行噪声的判断,并升高色调加强在这些中央的调整强度。通过噪声克制之后的成果如下图:
■噪声克制成果
肤色爱护
因为人的肤色存在一个教训正当范畴,调整超出这个范畴之后就是使得人像看上去不实在。所以在色调加强的时候,须要对人的肤色进行肯定的爱护,防止调整适度。要对肤色进行爱护,首先要对肤色进行辨认,而后对于肤色的局部削弱色调加强的影响。肤色辨认算法大部分是基于某色彩空间下的统计特色,蕴含大量的经验值。个别支流的有以下的肤色识别方法:
基于 RGB 色调模型的肤色辨认
间接应用 RGB 色调模型是比拟简便的伎俩,因为个别传入的数据都是 RGB 为主。较为罕用的办法是条件判断法,对 RGB 的值进行条件判断,落入教训范畴中则判断为肤色。其中分为平均光照和侧光两种判断条件,实际操作时个别会将这两个判断条件同时应用,只有合乎其中一个,即判断为肤色。
除此之外,在 RGB 色调模型中还能够应用二次多项式模式检测。模型由两个归一化 R-G 立体的二次多项式和一个圆方程形成,只有这三个公式的值落入肯定教训范畴则判断为肤色。
基于 RGB 的肤色识别方法操作最为简便,个别不须要进行色调模型的转换。然而因为该色调没有将亮度和色彩进行拆散,判断公式个别都比拟烦冗,肤色辨认的准确性受光照条件的影响较大。
基于 YCbCr 色调模型的肤色辨认
个别咱们听到的 YUV 理论就是指 YCbCr。YCbCr 色调模型将色调合成为亮度值 Y 与二维色度值 CbCr,可能只对色度进行判断,防止光照条件的影响。应用 YCbCr 色调模型,比拟间接的肤色识别方法是范畴判断法。从 RGB 转换到 YCbCr 之后,对于 CbCr 组成的二维立体,只有落在教训范畴之内,都认为是肤色。文献上能查到不同教训范畴,个别抉择其中一种应用即可,例如 133 <= Cr <= 173,77 <= Cb <= 127。
除了直接判断范畴,YCbCr 也能够应用基于椭圆的肤色识别方法。该办法基于教训统计数据,对于 CbCr 组成的二维立体,只有落在椭圆之内,都认为是肤色,准确性比单纯的范畴判断更高。这个肤色检测办法被 opencv 所采纳。在 opencv 中的椭圆参数为:[113,155.6] 为椭圆核心,[23.4,15.6] 为长轴和短轴,歪斜角度为 43.0。
■椭圆肤色 CbCr 区域示意
基于 HSV 色调模型的肤色辨认
HSV 色调模型也同样将亮度与色彩进行了拆散,因而对于光照变动也有很强的抗干扰能力。
基于 HSV 的肤色识别方法常见的有基于高斯模型的办法。这个办法被开源解决库 GPUImage 所采纳的。其基本思路为:将 RGB 转换到 HSV 空间,并计算 h 与 skinHue 间隔:dist = abs(h – skinHue) / 0.5,其中 skinHue 为高斯模型统计均值,个别应用 0.05。高斯模型方差相干统计参数为 skinHueThreshold,个别取 40。高斯权重通过 exp(-dist dist skinHueThreshold) 公式求得。这个办法只计算出肤色辨认的权重(概率),前面能够通过设置阈值(比方 >0.95)来取得肤色检测后果。
另外,基于 HSV 的肤色识别方法也有范畴判断法,个别通过文献上提供的 H、S、V 教训范畴进行判断,操作比较简单,在此不具体列出。
■肤色辨认后果示意(上:原图 下:肤色辨认后果)
■肤色爱护下色调加强成果
色调加强算法落地成果
在退出了噪声克制和肤色爱护之后,咱们失去了最终的色调加强算法成果。
■退出噪声克制和肤色爱护之后的色调加强算法成果(左:原图 右:加强后)
原图起源:HEVC 规范测试码流
总结
总体来说,在咱们色调加强算法的落地过程中,退出了噪声克制和肤色爱护的算法可能在大部分场景下的取得更好的更稳固的成果。不过仍然有不少能够改良的方向,例如如何把针对场景和画面个性的适应性做得更好,如何把肤色辨认做得更精准等等。另外,目前这里探讨的只是色调加强,要做到比拟好的画质加强,还须要配合对比度亮度的调整,去噪算法,甚至是伪 HDR 算法等,如何通过交融不同的算法输入一个更好的后果,也是一个须要一直迭代钻研的课题。
Dev for Dev 专栏介绍
Dev for Dev(Developer for Developer)是声网 Agora 与 RTC 开发者社区独特发动的开发者互动翻新实际流动。透过工程师视角的技术分享、交换碰撞、我的项目共建等多种形式,汇聚开发者的力量,开掘和传递最具价值的技术内容和我的项目,全面开释技术的创造力。