python效率计算-提高python中重心坐标计算的效率

背景:我试图将一张脸变成另一张不同形状的脸.

为了将一个图像扭曲成另一个图像,我使用面部地标的delaunay三角剖分并将一个肖像的三角形扭曲到第二个肖像的相应三角形.我正在使用重心坐标系将三角形内的一个点映射到另一个三角形上相应的扭曲位置.

我的第一种方法是用逆乘法求解系统Ax = b,其中A由三角形的三个角组成,b代表当前点,x代表该点的重心坐标(alpha,beta和gamma) ).我发现每个三角形一次矩阵A的倒数,然后对于该三角形中的每个点,通过找到A ^ -1和点b的点积来计算重心坐标.我发现这很慢(该功能需要36秒才能完成).

根据其他帖子的建议,我尝试使用最小二乘解决方案来提高此过程的效率.但是,当我使用numpy的lsq方法时,时间增加到154秒.我相信这是因为A矩阵在内部循环每次运行时都被考虑在内,而在此之前我能够在两个循环开始之前只找到一次逆.

我的问题是,如何提高这个功能的效率?有没有办法存储A的因子分解,以便每次为新点计算最小二乘解,它不会重复相同的工作?

该函数的伪代码:

# Iterate through each triangle (and get corresponding warp triangle)

for triangle in triangulation:

# Extract corners of the unwarped triangle

a = firstCornerUW

b = secondCornerUW

c = thirdCornerUW

# Extract corners of the warp triangle

a_prime = firstCornerW

b_prime = secondCornerW

c_prime = thirdCornerW

# This matrix will be the same for all points wi

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值