本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
美颜SDK除了应用最多的直播、短视频、视频社交场景以外,同样还可以应用在一些美颜相机或P图软件里。现如今人们的美颜需求和美颜标准也随着时代的变化不断改变,他们不再喜欢过于夸张的美颜效果,反而更倾向于清新自然的美颜效果,其中磨皮作为基本的美颜需求相对来说人们对它的要求更高一些。本文主要分享一下关于导向滤波磨皮的算法是如何实现的。 目前来看导向滤波磨皮算法速度是比较快的,相比起其他的保边缘磨皮算法来说更快一些,所以在一些美颜SDK中导向滤波磨皮算法的应用也比较广泛。 值得一提的是,导向滤波磨皮算法中用到了大量的均值卷积,所以可采用快速积分图的方法进行加速,该算法也算是一种保边缘的滤波算法,但是其中所包含的用处远不止于滤波。比如在一些抠图算法中,如果直接对一张大图进行抠图速度会很慢,而这个算法中的升采样功能,可以对图像直接进行采样然后再从小图上抠图,最后进行升采样。参考代码如下: float*CGuidedfiler::Guidedfiler(float*inimg,float*guidedimg,int height,int widht,intRadius,float eps) intlenght=height*widht; float*mult=newfloat[lenght]; float*oned=new float[lenght]; for (inti=0;i<lenght;i++) { mult=inimg*guidedimg; oned=1; } float *covmult=newfloat[lenght]; float *covone=newfloat[lenght]; FastGetAVG(covmult,mult,widht,height,Radius); FastGetAVG(covone,oned,widht,height,Radius); for (inti=0;i<lenght;i++) { covmult/=covone; } delete[]mult; delete[]oned; //计算导向图、原图的窗口均值 float*mean_inimg=new float[lenght]; FastGetAVG(mean_inimg,inimg,widht,height,Radius); float*mean_guideimg=newfloat[lenght]; FastGetAVG(mean_guideimg,guidedimg,widht,height,Radius); for (inti=0;i<lenght;i++) { mean_guideimg/=covone; mean_inimg/=covone; } //计算ak的除数 float*var_guideimg=new float[lenght]; float*sqr_guideimg=new float[lenght]; for (inti=0;i<lenght;i++) { sqr_guideimg=guidedimg*guidedimg; } FastGetAVG(var_guideimg,sqr_guideimg,widht,height,Radius); delete[]sqr_guideimg; for (inti=0;i<lenght;i++) { var_guideimg=var_guideimg/covone-mean_guideimg*mean_guideimg; } //计算ak float*a=newfloat[lenght]; for (inti=0;i<lenght;i++) { a=(covmult-mean_guideimg*mean_inimg)/(var_guideimg+eps); } //计算bk float*b=newfloat[lenght]; for (inti=0;i<lenght;i++) { b=mean_inimg-a*mean_guideimg; } 拿美图秀秀只是进行一定的参考,因为美图的磨皮在边缘细节方面保持的并不是特别好,所以美图的磨皮可能并没有采用其他的肤色检测技术。可见,为了实现一些更加细节部分,在美颜SDK开发过程中需要提前考虑好想要实现的效果,并在各种算法之中应用各种技术,比如人脸检测技术、人脸肤色检测技术、美白检测技术等等,这都是非常重要的。 此外,由于美颜SDK所应用的场景不同那么需要侧重的地方也是不同的,像是直播和短视频这种泛娱乐应用场景,大多是在动态或视频过程中实现美颜,算法包括技术各方面在实现图片和视频时需要考虑的内容也不同。所以说,不仅需要在选择美颜SDK时考虑运营需求问题,还需要注重质量和技术问题。 声明:以上内容均为作者本人原创,转载需注明作者及原文链接,欢迎转载分享。
|