这是一个非常有意思的应用,可以将一个人的脸逐渐过渡为另一个人的脸。花了大概1天完成了最基本的功能,大概3天去完善它,可能还有不少bug等着我去修改,不过先把目前的进展记录下来吧。
图形库:CImg
环境:Win10、C++11、VS2013
效果图一:
效果图二:


思路:
1) 分别对图像A和图像B采集控制点(坐标)


2) 利用Delaunay算法划分三角形,保证图像A和图像B的三角形一一对应且不重合。


3) 计算每对三角形的过渡三角形,过渡量为0~1。

4) 计算三角形到三角形的仿射变换矩阵。

5) 利用变换矩阵分别将图像A和图像B变换到过渡三角形网格。


6) 利用过渡量计算合成图的像素色彩。

我觉得难点主要在于 Delaunay算法 和 Affine Transformation矩阵计算,其次是应用的鲁棒性增强。由于目前还没有学习人脸识别的相关技术,所以还需要人为标定控制点,做一些“Dirty Work”。因此我也把工程分为了两个:一是主工程,专门负责已经三角分割后的图像处理。二是辅助工程,专门负责控制点的采集以及三角分割。可以这么说,主工程的核心是Morphing,辅助工程的核心是Delaunay。
先看看辅助工程吧,事先定义好了常用的结构体后,就可以写Delaunay算法了。Delaunay分割的准则是:任何三角形ABC,不存在一点D,在其外接圆内。考虑到人脸的控制点数量一般在低两位

本文介绍了计算机视觉中的FaceMorphing技术,通过C++和CImg库实现人脸逐渐过渡。难点包括Delaunay算法和仿射变换矩阵的计算。作者提供了辅助工程用于控制点采集和三角分割,主工程负责图像处理。整个过程涉及图像的三角形划分、过渡三角形计算和色彩合成。
最低0.47元/天 解锁文章
—— FaceMorphing&spm=1001.2101.3001.5002&articleId=119127576&d=1&t=3&u=fa774b91b5b449469c89bf663449e579)
2890

被折叠的 条评论
为什么被折叠?



