图片 1

介绍正文将介绍如何编写二个独有200行的Python脚本,为两张画像照上人物的“换脸”。那一个进程可分为四步: •检测脸部标识。 •旋转、缩放和转移第二张图像,使之与第一张图像相适应。 •调节第二张图像的色彩平衡,使之与第三个相相称。 •把第二张图像的特点混合在首先张图像中。完整的源代码能够从那边下载: 1.用到dlib提取面部标志该脚本使用dlib的Python绑定来提取面部标记:用Dlib完成了杂文One Millisecond Face Alignment with an Ensemble of Regression Trees中的算法 。算法自身特别复杂,但dlib接口使用起来特轻巧: get_landmarks(卡塔尔(قطر‎函数将二个图像转产生numpy数组,并回到二个68 x2成分矩阵,输入图像的各样特征点对应每行的三个x,y坐标。特征提取器要二个粗糙的分界框作为算法输入,由古板的能回去八个矩形列表的人脸检测器提供,其每个矩形列表在图像中对应叁个脸。为了营造特色提取器,预练习模型必不可缺,相关模型可从dlib sourceforge库下载(_predictor_68_face_landmarks.dat.bz2)。2.用普氏解析(Procrustes analysis卡塔尔国调治脸部现行反革命我们曾经有了三个标记矩阵,每行有风姿洒脱组坐标对应三个一定的面孔特征。大家前几日要搞明白怎么旋转、翻译和规模化第二个向量,使它们尽或者契合首个向量的点。主张是,能够用同生龙活虎的转变在率先个图像上覆盖第贰个图像。把它们更数学化,寻觅T,s和Lacrosse,令下边这几个表明式的结果最小: 路虎极光是个2 x2正交矩阵,s是标量,T是二维向量,pi和qi是地方标志矩阵的行。事实注解,那类难题能够用“常规普氏解析法” (Ordinary Procrustes Analysis卡塔尔(英语:State of Qatar) 解决: 代码分别实现了下边几步: 1.将输入矩阵转变为浮点数。那是随后步骤的供给条件。 2.每叁个点集减去它的矩心。少年老成旦为那七个新的点集找到了一个精品的缩放和旋转方式,那八个矩心c1和c2就能够用来找到完整的消除方案。 3.相似,每二个点集除以它的正规化不是。那消亡了问题的零器件缩放偏差。 4.应用Singular Value Decomposition总计旋转部分。能够在维基百科上看到有关解决正交普氏难点的内情。 5利用仿射转变矩阵再次来到完整的转变。之后,结果能够插入OpenCV的cv2.warpAffine函数,将图像二映射到图像少年老成: 图像对齐结果如下:3.改过第二张图像的水彩如若我们总括直接覆盖范围部特征,比非常的慢就能够看出七个标题: 两幅图像之间不等的肤色和光线产生了覆盖区域的边缘不总是。大家试着改革: 结果是这么: 此函数试图改造图像2的水彩来同盟图像1。它经过用im2除以im2的高斯模糊,然后乘以im1的高斯模糊。这里的主张是用TucsonGB缩放校色,不过否用全数图像的总体常数比例因子,每种像素都有温馨的局地比例因子。用这种艺术两图像之间光线的反差只可以在某种程度上被改过。举个例子,假若图像1是从风流浪漫边照亮,但图像2是均匀照明的,色彩订正后图像2也会冒出未照亮边暗一些的境况。相当于说,那是二个一定粗糙的章程,而且消释难点的重大是一个体面的高斯内核大小。假若太小,第二个图像的面孔特征将展现在其次个图像中。过大,内核之外区域像素被掩瞒,并发生变色。这里的基业用了三个0.6 *的眸子间距。4.把第二张图像的本性混合在率先张图像中用八个遮罩来抉择图像2和图像1的什么部分应该是最后突显的图像:值为1(森林绿卡塔尔(英语:State of Qatar)之处为图像2相应呈现出的区域,值为0(纯白卡塔尔国的地点为图像1相应显得出的区域。值在0和1之内为图像1和图像2的掺和区域。 那是转换上边那张图的代码:大家把上述代码降解: •get_face_mask(卡塔尔(قطر‎的定义是为一张图像和一个标识矩阵生成三个遮罩,它画出了五个反革命的凸多边形:四个是眼睛周边的区域,三个是鼻子和嘴部周边的区域。之后它由10个像素向遮罩的边缘外界羽化扩充,能够援救隐蔽任何不总是的区域。•那样一个遮罩同一时候为那七个图像生成,使用与步骤第22中学风姿浪漫致的转移,能够使图像2的遮罩转变为图像1的坐标空间。•之后,通过三个element-wise最大值,那四个遮罩结合成三个。结合那四个遮罩是为了保证图像1被遮住,而显现出图像2的天性。最终,应用遮罩,给出最后的图像:原作链接: