深度学习AI美颜系列---美图秀秀AI美图之跨次元相机特效
深度学习AI美颜系列---美图秀秀AI美图之跨次元相机特效算法解析
最近在做类似美图秀秀AI美图里的跨次元相机特效算法,美图跨次元相机特效举例如下:
原图 美图秀秀跨次元相机效果
Fig. 1美图秀秀跨次元相机特效举例
跨次元相机特效是美图秀秀在2017年开发的一个全新的关于自拍的玩法,能够让自己的照片变成手绘美女,做到“照片一秒转手绘”,效果举例如上图所示。最初上线6种风格特效,分别为“天使之恋、十里桃花、童话萌主、樱之少女、人鱼眼泪、暗夜女爵”。
美图秀秀跨次元相机特效是一个深度学习和传统算法相结合的算法组合,并非单一的深度学习算法或者传统算法可以实现的。
这里本人将其划分为两个分析过程:表面分析、内在技术分析;
1,表面分析
①跨次元相机到目前为止,经历了快两年的时间,这么长的更新时间,目前来看,依旧火爆,而且市面上依旧没有其他类似效果的竞争对手;
②到目前为止,处理单张照片依旧耗时较长,一般在2-3s左右;
③这项功能对照片上传大小有较强要求,需要用户上传图像大小不能小于某一尺寸,同时,需要正脸半身照片,五官无遮挡;
上述三点可以看出美图该算法复杂度较高,不易优化,或者无法实时处理,更无法应用到相机界面,同时,无法较好的处理小脸非半身照片case;
2,内在技术分析
从Fig.1的效果对比来看,本人对其总结如下几点:
①人像照片做了背景替换,使用到了人像分割技术;
②人像区域中,仅仅头发区域进行了头发丝特效处理和头发区域特效处理,该过程比较复杂,据官方声明,使用到了机器学习或者DL技术判断头发纹理走势,在纹理走势下绘制发丝效果,目前具体技术尚不可知;
③人像美妆,在图中可以看到,眉毛、眼影、瞳孔和唇彩等都发生了变化,因此,使用了人像美妆技术;
④人像美颜,在图中对比可以发现,效果图中眼睛变大,人脸变小,五官立体感增强,因此,该算法使用了大眼瘦脸、立体五官等脸部微调技术;
⑤人像整体画面的亮度对比度发生了明显的变化,因此,个人猜测,该算法具有自动亮度对比度调节功能;
⑥原图和效果图中,人像表面增加了特有的贴纸效果,因此,该算法使用了静态贴纸技术;
⑦头发丝绘制算法,美图跨次元中的头发丝绘制效果,可谓时转手绘的点睛之笔;
基于上述猜测,本人对应实现该算法,效果举例如下:
原图 本人跨次元相机算法效果
Fig.2 本人算法效果
在本人算法中没有使用静态贴纸,这个可以随意添加,整体上实现了类似的效果,但是头发丝绘制部分还没有美图秀秀的梦幻,没有它更接近手绘风格;
整体而言,这个特效算法允许用户自定义背景,前景贴纸,头发丝绘制颜色以及面部妆容和人脸变形等内容,但由于算法的复杂度,仅仅适合服务器端运行,可以实现对应微信小程序或H5调用,目前本人算法耗时在1S以下,略优于美图秀秀。
关于算法的具体实现,本文不做详细展示,所用到的算法及代码链接如下:
①人脸自动美型 人脸变形
②人像染发
③人像美颜之磨皮美白 磨皮美白2
④人像抠图
⑤人像美妆 妆容迁移
⑥颜色滤镜
⑦头发柔顺
关于头发柔顺方面,本人博客中之前并未介绍过,这里给出一个参考链接,该链接来自大佬Imageshop: https://www.cnblogs.com/Imageshop/p/10797177.html
使用的时LIC线积分算法来处理头发区域的,线积分的示意图如下:
Fig.3 LIC算法示意图
代码如下:
/// make white noise as the LIC input texture ///
void MakeWhiteNoise(int Width, int Height, unsigned char* pNoise)
{srand(100000);for (int j = 0; j < Height; j++)for (int X = 0; X < Width; X++){int r = rand();r = ((r & 0xff) + ((r & 0xff00) >> 8)) & 0xff;pNoise[j * Width + X] = (unsigned char)r;}
}
//LIC
void FastFlowImagingLIC_Appr(int Width, int Height, float* pVectr, unsigned char* pNoise, unsigned char* pImage, float krnlen)2 {3 float Step = 0.333333f; // 每次前进0.33333像素的流线距离 4 int LoopAmount = int(krnlen / Step); // 流线是左右对称的5 if (LoopAmount <= 0) LoopAmount = 1;6 int Weight = LoopAmount * 2;7 for (int Y = 0; Y < Height; Y++)8 {9 unsigned char *LinePD = pImage + Y * Width;
10 float *LinePV = pVectr + Y * Width * 2;
11 for (int X = 0; X < Width; X++, LinePV += 2)
12 {
13 float PosX_P = X + 0.5f, PosY_P = Y + 0.5f, PosX_N = X + 0.5f, PosY_N = Y + 0.5f;
14 float VectorX = LinePV[0] * 0.333333f, VectorY = LinePV[1] * 0.333333f;
15 int Sum = 0;
16 for (int Z = 0; Z < LoopAmount; Z++)
17 {
18 PosX_P += VectorX; PosY_P += VectorY; // X和Y都是归一化的,所以*0.333333f后流线距离也就是0.25了
19 PosX_N -= VectorX; PosY_N -= VectorY;
20 int Index_P = IM_ClampI(PosY_P, 0, Height - 1) * Width + IM_ClampI(PosX_P, 0, Width - 1);
21 int Index_N = IM_ClampI(PosY_N, 0, Height - 1) * Width + IM_ClampI(PosX_N, 0, Width - 1);
22 Sum += pNoise[Index_P] + pNoise[Index_N];
23 }
24 LinePD[X] = (unsigned char)(Sum / Weight);
25 }
26 }
27 }
在Imageshop的链接中有详细的讲解,对应效果如图所示:
Fig.4 线积分特效效果举例
上述就是整个算法过程的分析,在实际开发中,这个特效综合了十余种复杂的算法技术,囊括了美颜美妆以及图像分割等等内容,算法知识上需要大家对各个方面都有全面的认识,介于商业信息问题,本文仅作技术上的分析,不做详细代码展示,掌握了算法之后,相信大家代码不是问题!
这里感谢Imageshop大佬的分享!
深度学习AI美颜系列---美图秀秀AI美图之跨次元相机特效相关推荐
- 深度学习AI美颜系列---AI美颜磨皮算法一
深度学习AI美颜系列---AI美颜磨皮算法一 转自:https://blog.csdn.net/trent1985/article/details/80661230 首先说明一点,为什么本结内容是&q ...
- 深度学习AI美颜系列
为什么要开始写AI美颜这个系列的内容? 人像美颜美妆滤镜现在来看,几乎成为了人们生活拍照,摄影的刚需,目前市面上绝大多数的算法依旧停留在传统的图像算法阶段,仅有少数的AI算法也尚属于探索研究阶段,比如 ...
- 深度学习AI美颜系列---人脸数据增强
深度学习AI美颜系列---人脸数据增强 在深度学习的训练中,我们经常会对较少的数据进行数据增强,一般而言,常用的数据增强包括如下几种: 1,旋转: 2,缩放: 3,镜像: 4,平移: 5,调色: 6, ...
- 深度学习AI美颜系列---AI滤镜特效算法
滤镜是图像美化中必不可少的步骤, 所谓滤镜,最初是指安装在相机镜头前过滤自然光的附加镜头,用来实现调色和添加效果.我们做的滤镜算法又叫做软件滤镜,是对大部分镜头滤镜进行的模拟,当然,误差也就再所难免, ...
- 深度学习AI美颜系列---肤色相似度计算(CIELAB色差计算)
深度学习AI美颜系列---肤色相似度计算(CIELAB色差计算) 在AI美颜中,经常会用到肤色相似度计算,如何实现这个算法? 步骤如下: 1,人脸皮肤分割: 2,对人脸皮肤分割结果进行LAB颜色空间转 ...
- 2.7mnist手写数字识别之训练调试与优化精讲(百度架构师手把手带你零基础实践深度学习原版笔记系列)
2.7mnist手写数字识别之训练调试与优化精讲(百度架构师手把手带你零基础实践深度学习原版笔记系列) 目录 2.7mnist手写数字识别之训练调试与优化精讲(百度架构师手把手带你零基础实践深度学习原 ...
- 深度学习与计算机视觉系列(8)_神经网络训练与注意点
深度学习与计算机视觉系列(8)_神经网络训练与注意点 作者:寒小阳 时间:2016年1月. 出处:http://blog.csdn.net/han_xiaoyang/article/details ...
- 深度学习与计算机视觉系列(4)_最优化与随机梯度下降\数据预处理,正则化与损失函数
1. 引言 上一节深度学习与计算机视觉系列(3)_线性SVM与SoftMax分类器中提到两个对图像识别至关重要的概念: 用于把原始像素信息映射到不同类别得分的得分函数/score function 用 ...
- 深度学习与计算机视觉系列(10)_细说卷积神经网络
转载自: 深度学习与计算机视觉系列(10)_细说卷积神经网络 - 龙心尘 - 博客频道 - CSDN.NET http://blog.csdn.net/longxinchen_ml/article/d ...
- 深度学习与计算机视觉系列(1)_基础介绍
转载自: 深度学习与计算机视觉系列(1)_基础介绍 - 龙心尘 - 博客频道 - CSDN.NET http://blog.csdn.net/longxinchen_ml/article/detail ...
最新文章
- JVM XMX设置多大比较好,Docke容器里该怎么设置JVM呢@无界编程
- 特征重要性、特征集成+FeatureUnion、特征选择变换器+ColumnTransformer、标签特征变换+TransformedTargetRegressor、特征质量、自动学习数据中的特征
- 如何批量创建网页的快捷方式
- node exprass安装运行实例
- VTK:绘制箱形图 BoxChart用法实战
- qt做的接收串口数据并显示曲线_QT无人机地面站设计与制作
- 为什么我饿了么产品总监不干,却要从事自由职业?
- python 数学基础_Python3数学基础 - 随笔分类 - 既生喻何生亮 - 博客园
- vonic 环境配置_Vonic 2.0 全新文档站上线
- java mysql tomcat my_Java、Tomcat 及 MySQL 环境配置
- 云原生火爆技术人朋友圈,你可别云里雾里了!
- 用集合return多个值_Laravel + Nestedset 扩展:嵌套集合模型实现无限级分类
- python数据科学库_Python数据科学库
- Java开发实战经典【Java基础】
- 编译CWM-recovery
- 大学生 生活小技巧:利用插件(Tampermonkey )学习网课 | 查题
- openpyxl,给单元格插入公式,求和通过excel公式实现
- 计算机里面的Profile怎么翻译比较好?
- HTML5 之 Img 标签
- 计算机信息系统安全保护等级由低到高,网络信息系统安全保护等级分为几级?...
热门文章
- OPNsense用户手册-用户界面
- Vue子组件与父组件(看了就会)
- flutter: The method ‘DioHttpHeaders.add‘ has fewer named arguments thanthose of overridden ....
- JAVA 实现汉字五行笔画查询
- 如何获取网页logo(favicon.ico)
- Windows10邮件添加qq邮箱已过期问题
- 2.3 常用导数公式及推导
- SharePoint Designer 2013 连接 Office 365 必需安装2个SP
- 【平衡小车制作】(四)陀螺仪MPU6050(超详解)
- java金额元与万元转换_java中金额元转万元工具类代码实例