影楼精修-牙齿美型修复算法解析

本文介绍影楼修图中的牙齿美型修复功能的算法实现。

我们大部分人的牙齿看起来都可能会有一些问题,比如牙齿不平整,大门牙,牙齿泛黄,牙齿发黑,牙齿残缺等等,拍照之后影响美观度,正是这个爱美的需求场景,诞生了牙齿美型修复的技术功能。顾名思义,牙齿美型修复就是通过图像处理技术将你的不美观的牙齿照片变成整齐、洁白完美的牙齿,满足你自我欣赏或是晒朋友圈的需求。

牙齿美型修复功能最早出现于美图秀秀家族,目前在美图云修,像素蛋糕,百度网盘AI修图等商业应用以及各类app中都有存在,也深受大家喜爱。

我们以像素蛋糕为例,给出示例图如下:

牙齿美型修复算法

目前牙齿美型修复的技术资料非常少,仅有美图和像素蛋糕(真景科技)的两篇专利:

厦门美图-专利号 CN 111179177 A: 图像处理方法、装置、电子设备和可读存储 介质

像素蛋糕-专利号CN 119313578 A: 一种基于深度学习的牙齿美化方法及装置

其中美图的专利较早,但读起来模棱两可,像素蛋糕的专利相对严谨和可验证,这里将以此来详细介绍。

算法方案

假设原图为S,最终效果图为D,算法方案如下:

1.将S进行人脸点位检测识别,得到嘴巴点位;

举例如下图所示:

2.根据嘴巴点位获取嘴巴区域图像A;

3.构建牙齿美型修复网络模型M;

使用生成GAN网络,举例如:Pix2Pix,输入512×512×3用户嘴巴区域图像,输出512×512×3牙齿美型结果图;

4.将A输入M,得到牙齿美型修复后的效果图B;

5.将B贴回原图S,得到最终效果图D;

方法流程非常简单,但它的难点在于如何构建成对的牙齿美型数据集,来训练GAN网络模型;

数据集构建方案

像素蛋糕专利中的牙齿美型数据集构建方案如下:

1.收集大量高分辨率牙齿整齐的人像照片,通过人脸关键点获取人脸或牙齿图像,与GAN网络输入大小一致,该图像定义为牙齿目标图集;

2.利用牙齿分割算法提取牙齿mask;

3.对牙齿进行随机变形;

3.1对整齐牙齿区域划分为若干个规则的矩形网格,每个网格顶点作为图像的控制点;

3.2利用牙齿mask提取任意一颗牙齿边缘,在边缘区域选择控制点,沿特定方向移动预设距离或随机方向移动预设距离;

3.3根据移动前后的网格顶点位置,对牙齿图像进行液化变形处理,生成牙齿自然变形后的图像,以此方式来构建牙齿变形或者残缺的图像样本;

4.对牙齿进行蛀牙/黄牙/裂痕模拟等操作;

4.1模拟蛀牙,使用图像处理软件或Opencv等,在牙齿图像上添加黑色或深色斑点;

4.2模拟黄牙,将牙齿图像从BGR颜色空间转换为HSV颜色空间,调整饱和度和亮度,模拟牙齿变黄效果;

4.3模拟裂痕,在牙齿图像上绘制细长的黑色或深色线条;

通过1-4的步骤,即可得到牙齿瑕疵图;重复上述步骤,批量构建成对数据集<牙齿瑕疵效果图,牙齿目标图>;

上述过程就是成对牙齿美型修复数据集构建的方法;

整体上,像素蛋糕牙齿美型修复算法就介绍完了,在像素蛋糕软件中,牙齿修复功能与牙齿美白功能是分开的,为了方便调节,像素蛋糕做了详细的功能支撑,比如牙齿美白,颜色调节以及牙齿边缘补齐等,如下图所示:

本人方案

本文从个人经验角度,构建了不太一样的方案:

1.数据集构建,本文这里给出一种新的数据集构建方法,该方法为本人验证使用:

1.1收集大量露出牙齿的人像照片(一般照片即可,不需要牙齿特别整齐的照片),通过人脸关键点获取人脸图像,可以以ffhq的人脸对齐标准进行构建,记录为牙齿瑕疵图集;

1.2.使用SD1.5,WebUI img2img+Controlnet+canny方案制作数据集;

prompt和相关参数设置如下:

基模型可选人像美化相关的基模型,比如realistic等;

通过图像重绘,获取牙齿美观的目标图,然后根据人脸关键点位,将牙齿区域融合到原图中,即可得到牙齿美型后的效果图。制作数据举例如下:

1.3构建1W+的牙齿美型修复数据对(包含了牙齿形状修复+黄牙/黑牙牙齿美白);

2.使用GAN网络,输入原图,输出目标效果图,训练牙齿美型修复算法模型;

本人方案相比而言更加简洁一点,个人角度来看,一直觉得"简约是美"。

最后,给出牙齿美型方案的效果验证对比:

**注意:**相比于牙齿美型修复功能,牙齿美白功能就变得小儿科了,可以使用GAN网络+美白数据集的方案来实现,也可以使用牙齿分割Mask+HSV调色的传统图像处理方案来实现,这里就不在累赘了。

相关推荐
云边有个稻草人1 小时前
【C++】第二十一节—一文详解 | 红黑树实现(规则+效率+结构+插入+查找+验证)
算法·红黑树·红黑树的插入·红黑树的结构·红黑树完整代码·红黑树的效率·红黑树的查找
仟濹2 小时前
【C/C++】整数超过多少位时用「高精度」
c语言·c++·算法
DIY机器人工房5 小时前
一个可以检测本机的字节顺序,并对任意数据进行字节顺序的反转操作的代码。
嵌入式硬件·算法·嵌入式·diy机器人工房
杰克尼7 小时前
11. 盛最多水的容器
算法·leetcode·职场和发展
程序员Xu9 小时前
【OD机试题解法笔记】查找接口成功率最优时间段
笔记·算法
技术思考者9 小时前
Leetcode - 反转字符串
数据结构·算法·leetcode
SKYDROID云卓小助手10 小时前
无人设备遥控器之多设备协同技术篇
网络·人工智能·嵌入式硬件·算法·信号处理
熬了夜的程序员11 小时前
【华为机试】34. 在排序数组中查找元素的第一个和最后一个位置
数据结构·算法·华为od·华为·面试·golang
phltxy11 小时前
ArrayList与顺序表
java·算法
小拇指~12 小时前
梯度下降的基本原理
人工智能·算法·计算机视觉