美颜相机基本算法总结

news/2024/10/31 5:26:14/

一、主要内容概述

本文主要是对美颜相关的一些内容的学习做一个总结,一个基本的美颜相机大概包含了美颜和美型两个方面,美颜主要是磨皮美白等效果,美型则是对眼睛、鼻子、脸型等做一些微调;大多美型相机还会提供各式各样的滤镜、提供好看的2D贴纸,更有苹果相机提供了动漫滤镜以及3DEmoji效果可用于AR等高端场景;

由于自己是一个初学者,对以上所有内容都只能做一个简单的介绍,而不能非常深入,所提供的效果也只是达到一个参考而非商用效果,还请见谅;

这里的算法实现主要是基于unity的shaderlab来完成的;

二、美颜效果

1.美白

美白部分所采用的是log曲线来提升美白效果;

要注意一点,美白是让皮肤变白而不是简简单单让屏幕变得更亮,所以如何让周围环境不做出太多改变,而是只让人脸变得更白则是美白所要追求的效果。这里,也许会想到使用皮肤检测,对满足条件的像素值进行提亮,其它不变,这个方法当然也考虑过,但是使用颜色检测的方法检测皮肤的话有两大缺点,第一,增加了判断条件,在GPU里面加入太多判断会严重影响GPU的效率,第二,数字图像一般都会有很强的椒盐噪声,这个在手机相机得到的屏幕里是很强的,当然肉眼看不太出来,当使用颜色检测的时候就会把噪声效果放大,所以不可取。这里采用的是基于灰度值的转换,也就是转换之后,要在像素值和新像素值之间以原像素的灰度作为参考因素进行插值,这样对于颜色过暗的部分尤其像头发部位就不会再有什么亮度上的改变。

fixed Beauty_Log(fixedc, float beta){fixed a = (log(c*(beta-1)+1))/log(beta);return a;
}fixed4 SkinBeauty(fixed4 srcCol){fixed beta = 1.0001 + 8.0 * _Whiten;beta = beta * (srcCol.r + srcCol.g + srcCol.b) / 3.0;srcCol.r = Beauty_Log(srcColr.r, beta);srcCol.g = Beauty_Log(srcColr.g, beta);srcCol.b = Beauty_Log(srcColr.b, beta);return srcCol;
}

首先我们是对像素的三个通道进行分别处理的,我们要做的工作就是第一个函数,对通道的值进行提升,注意这个函数的特点,它是一个凸函数,在(0,1)区间内,它的值也是(0,1),但是结果是大于等于原值的,这个函数一个重要的参数是beta,beta越大,美白程度越高。在第二个函数里面,对三个通道进行了相同的提升,但是beta的值是基于灰度值进行修改的,这样做的好处是消除了美白对于头发和眉毛眼睛等部位的影响,使其主要对皮肤等部位感兴趣。

2.磨皮

磨皮应该是一个相机里最重要的一个功能了,好的磨皮效果对用户的吸引力总是惊人的;

先假设读者对图像处理有简单的了解,如高斯滤波、双边滤波、均值滤波等;应用于磨皮效果最简单的滤波就是双边滤波了,为什么不是高斯滤波呢,因为高斯滤波它只考虑了空间域,处理之后整个图片会非常模糊,包括边界部分;而磨皮的目标则是不能失去边缘轮廓的细节,否则就会给人一种特别“假”的感觉,而双边滤波则考虑了空间域和像素域,能够满足保留边缘的需要;

在实现磨皮效果前,需要先分析一下一个好的磨皮效果需要哪些东西

  • 磨皮应该保留好脸部细节,不能磨到不该磨的部位,例如眉毛、头发、嘴唇等等,试想一下,如果磨皮以后头发也特别模糊,是不是看起来很差
  • 磨皮效果要看起来通透,也就是色块要比较均匀,这种效果需要结合其它效果一起才能真正做出来,仅仅做滤波是不够的;

所以,基于以上分析,可以开始由简入繁,先实现双边滤波,再思考如何更好的保留磨皮细节,然后再思考如何变得更加通透;

三、美型效果

实现美型效果需要人脸的关键点检测,这个人脸识别有关,所以这里只能大概讲述一下美型的部分,而人脸关键点相关则不在此范畴;

美型效果就是五官的调整,随便一个美颜相机都可以看到,有眼睛、额头、鼻头、鼻翼、嘴型、下巴、脸型等等;

美型在图像处理上的核心做法就是液化效果,无论是眼睛还是其它部位的调整,其思路都是液化;

四、滤镜效果

使用Lut,这也是比较常用的后处理技术;

fixed3 ApplyLut2d(sampler2D tex, fixed3 uvw, fixed3 scaleOffset){uvw.z = scaleOffset.z;fixed shift = floor(uvw.z);uvw.xy = uvw.xy * scaleOffset.z * scaleOffset.xy + scaleOffset.xy * 0.5;uvw.x += shift * scaleOffset.y;uvw.xyz = lerp(tex2D(tex, uvw.xy).rgb, tex2D(tex, uvw.xy + fixed2(scaleOffset.y, 0)).rgb, uvw.z - shift);return uvw;
}

 使用如下lut表来做滤镜效果,类似于后处理中的Color Grading;

 五、贴纸效果使用简单的帧动画来代替

这里就是根据时间来计算当前使用哪一帧;

fixed4 frag(v2f i) : SV_Target{float time = floor(_Time.y * _FramePlaySpeed);float row = floor(time / _HorizontalAmount);float column = time - row * _HorizontalAmount;row = row % _VerticalAmount;column = column % _HorizontalAmount;half2 uv = i.uv + half2(column, -row);uv.x /= _HorizontalAmount;uv.y /= _VerticalAmount;return tex2D(_StickerTex, uv);
}

 


http://www.ppmy.cn/news/437078.html

相关文章

【项目:实现美颜相机——java】

我们可以用java代码实现美颜相机的功能。 类似于之前的图片处理效果: 【java用监听器实现选择处理图片的效果】_ZERO_HOPE的博客-CSDN博客 摄像头抓取的图片一帧一帧地绘制在界面上,得到视频效果。 我们对图片进行处理,就能得到滤镜效果的…

为什么说网络安全是IT行业最后的红利?

前言 “没有网络安全就没有国家安全”。当前,网络安全已被提升到国家战略的高度,成为影响国家安全、社会稳定至关重要的因素之一。 网络安全行业特点 1、就业薪资非常高,涨薪快 2021年猎聘网发布网络安全行业就业薪资行业最高人均33.77万…

IOS 笔记大全 (UI控件到网络协议)

1 MVC模式:(model+view+controller):是一种帮你把代码功能和显示划分出来的设计模式; 2 model:较为底层的数据引擎,负责管理实体中所继承的数据; 3 view:和…

HTTP请求和数据安全

http 超文本传输协议 http协议: 超文本传输协议(Hypertext Transfer Protocol) http协议规定了客户端和服务器之间的数据传输格式. http协议是在网络开发中最常用的协议.不管是移动客户端还是PC端,访问网络资源经常使用http协议. http优点: <1> 简单快速: http协议…

网络干货

一、OSI七层模型 OSI七层模型&#xff08;五层&#xff09;&#xff1a;本质&#xff1a;每一层都与很多的网络协议 &#xff08;1&#xff09; 应用层 &#xff1a;最接近用户&#xff0c;将应用程序呈现给用户&#xff0c;HTTP&#xff0c;FTP&#xff0c;POP3&#xff0c;S…

深入浅出--iOS的TCP/IP协议族剖析Socket

深入浅出--iOS的TCP/IP协议族剖析&&Socket 简介 该篇文章主要回顾--TCP/IP协议族中的TCP&#xff0f;UDP、HTTP&#xff1b;还有Socket。&#xff08;&#xff0d;&#xff0d;该文很干&#xff0c;酝酿了许久&#xff01;你能耐心看完吗&#xff1f;&#xff09; 我在…

流媒体传输协议

流媒体传输协议 流媒体指的是使音频和视频形成稳定和连续的传输流和回放流的一系列技术、方法和协议的总称&#xff0c;即流媒体技术。 通过流媒体技术&#xff0c;服务器能够向客户机发送稳定和连续的多媒体数据流。客户机在接收数据的同时以一个稳定的速率回放&#xff0c;…

连京东都开始卖翻新机,教你识别手中的iPhone 隐藏id

连京东都开始卖翻新机&#xff0c;教你识别手中的iPhone 1505631/1 竹晓依 楼主 2015-05-27 14:28 闲来没事码字发一个小白必看技术贴&#xff0c;望大家前来支持 &#xff0c;如有说错&#xff0c;望指点哈。 当我们拿到自己心爱的iPhone&#xff0c;都会有一种无比的新鲜感&a…