pytorch液态算法如何实现瘦脸效果(pytorch,开发技术)

时间:2024-05-02 21:09:29 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

算法思路:

pytorch液态算法如何实现瘦脸效果

假设当前点为(x,y),手动指定变形区域的中心点为C(cx,cy),变形区域半径为r,手动调整变形终点(从中心点到某个位置M)为M(mx,my),变形程度为strength,当前点对应变形后的目标位置为U。变形规律如下,

  • 圆内所有像素均沿着变形向量的方向发生偏移

  • 距离圆心越近,变形程度越大

  • 距离圆周越近,变形程度越小,当像素点位于圆周时,该像素不变形

  • 圆外像素不发生偏移

pytorch液态算法如何实现瘦脸效果

其中,x是圆内任意一点坐标,c是圆心点,rmax为圆心半径,m为调整变形的终点,u为圆内任意一点x对应的变形后的位置。

对上面公式进行改进,加入变形程度控制变量strength,改进后瘦脸公式如下,

pytorch液态算法如何实现瘦脸效果

优缺点:

优点:形变思路简单直接

缺点:

  • 局部变形算法,只能基于一个中心点,向另外一个点的方向啦。如果想多个点一起拉伸,只能每个点分别做一次液化,通过针对多个部位多次液化来实现。

  • 单点拉伸的变形,可以实现瘦脸的效果,但是效果自然度有待提升。

代码实现:

importcv2importmathimportnumpyasnpdeflocalTranslationWarpFastWithStrength(srcImg,startX,startY,endX,endY,radius,strength):ddradius=float(radius*radius)copyImg=np.zeros(srcImg.shape,np.uint8)copyImg=srcImg.copy()maskImg=np.zeros(srcImg.shape[:2],np.uint8)cv2.circle(maskImg,(startX,startY),math.ceil(radius),(255,255,255),-1)K0=100/strength#计算公式中的|m-c|^2ddmc_x=(endX-startX)*(endX-startX)ddmc_y=(endY-startY)*(endY-startY)H,W,C=srcImg.shapemapX=np.vstack([np.arange(W).astype(np.float32).reshape(1,-1)]*H)mapY=np.hstack([np.arange(H).astype(np.float32).reshape(-1,1)]*W)distance_x=(mapX-startX)*(mapX-startX)distance_y=(mapY-startY)*(mapY-startY)distance=distance_x+distance_yK1=np.sqrt(distance)ratio_x=(ddradius-distance_x)/(ddradius-distance_x+K0*ddmc_x)ratio_y=(ddradius-distance_y)/(ddradius-distance_y+K0*ddmc_y)ratio_x=ratio_x*ratio_xratio_y=ratio_y*ratio_yUX=mapX-ratio_x*(endX-startX)*(1-K1/radius)UY=mapY-ratio_y*(endY-startY)*(1-K1/radius)np.copyto(UX,mapX,where=maskImg==0)np.copyto(UY,mapY,where=maskImg==0)UX=UX.astype(np.float32)UY=UY.astype(np.float32)copyImg=cv2.remap(srcImg,UX,UY,interpolation=cv2.INTER_LINEAR)returncopyImgimage=cv2.imread("./tests/images/klst.jpeg")processed_image=image.copy()startX_left,startY_left,endX_left,endY_left=101,266,192,233startX_right,startY_right,endX_right,endY_right=287,275,192,233radius=45strength=100#瘦左边脸processed_image=localTranslationWarpFastWithStrength(processed_image,startX_left,startY_left,endX_left,endY_left,radius,strength)#瘦右边脸processed_image=localTranslationWarpFastWithStrength(processed_image,startX_right,startY_right,endX_right,endY_right,radius,strength)cv2.imwrite("thin.jpg",processed_image)

实验效果:

pytorch液态算法如何实现瘦脸效果

 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:pytorch液态算法如何实现瘦脸效果的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:css如何给input取消边框颜色下一篇:

3 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18