一般来讲,直播美颜sdk中的祛痘有两种实现方式,一是采用高度磨皮,去掉痘痘跟周围不同的像素,做一个局部的平均;还有一种方式是做图像修复。从效果上来看,基于图像修复技术做祛痘的效果会更好,接下来就给大家重点介绍一下直播美颜sdk中的这种技术。
一、图像修复算法介绍
图像修复是图像复原中的一个重要内容,主要利用那些被破坏区域的边缘,即边缘的颜色和结构,复制、混合到损坏的图像中进行修复图像。OpenCV中集成了用于修复小尺度缺损的数字图像修补技术,即利用待修补区域的边缘信息,同时采用一种由粗到精的方法来估计等照度线的方向,并采用传播机制将信息传播到待修补的区域内,以便达到较好的修补效果。
二、图像修复原理
修复一个像素点具体原理如下:
如下图所示,Ω区域是待修复的区域,而δΩ是指Ω区域的边界。要修复Ω中的像素,就需要计算出新的像素值来代替原值。
现在假设p点是要修复的像素,以p为中心选取一个小邻域B(ϵ),该邻域中的点像素值都是已知的,ϵ就是OpenCV函数中的参数inpaintRadius。q为Bϵ(p)中的一点,这里需要用邻域Bϵ(p)中的所有点计算p点的新灰度值。但是邻域内的每个像素点所起的作用是不同的,所以就引入了权值函数,这里的w(p,q)是权值函数,用来限定邻域中各像素的贡献大小。
其中,d0和T0分别为距离参数和水平集参数,一般都取1.方向因子dir(p,q)保证了离p点越近的像素点对p点的贡献越大。水平集距离因子lev(p,q)保证了离经过点p的待修复区域的轮廓线越近的一只像素点对点p的贡献越大。
三、通过图像修复算法实现祛痘
根据inpaint()函数的原理,选择要修复的区域,然后对这个区域进行修复,python调用了模拟美颜相机的手动祛痘操作,以获取当前的坐标,然后绘制出一个圆,对圆里面的图像做修复。
选中图像中黑色斑点的位置,然后生成一个单通道的mask,利用这个单通道的mask图像进行inpaint操作。从运行结果来看,算法对祛痘的效果表现很好,圆形对图像进行了修复,修复后的图像与原本的皮肤非常相近,基本看不出太大区别。
以上,就是在直播美颜sdk中,如何利用图像修复算法实现祛痘的大体过程,如果您对直播美颜sdk开发感兴趣,欢迎咨询官方客服。
声明:本文由美狐原创,未经允许禁止转载,谢谢合作。