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

为了将一个图像扭曲成另一个图像,我使用面部地标的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 within the triangle

triMatrix = matrix of a, b, and c

# Bounding box of the triangle

xleft = min(ax, bx, cx)

xright = max(ax, bx, cx)

ytop = min(ay, by, cy)

ybottom = max(ay, by, cy)

for x in range(xleft, xright):

for y in range(ytop, ybottom):

# Store the current point as a matrix

p = np.array([[x], [y], [1]])

# Solve for least squares solution to get barycentric coordinates

barycoor = np.linalg.lstsq(triMatrix, p)

# Pull individual coordinates from the array

alpha = barycoor[0]

beta = barycoor[1]

gamma = barycoor[2]

# If any of these conditions are not met, the point is not inside the triangle

if alpha, beta, gamma > 0 and alpha + beta + gamma <= 1:

# Now calculate the warped point by multiplying by alpha, beta, and gamma

# Warp the point from image to warped image

python效率计算公式_提高python中重心坐标计算的效率相关推荐

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

    背景:我试图将一张脸变成另一张不同形状的脸. 为了将一个图像扭曲成另一个图像,我使用面部地标的delaunay三角剖分并将一个肖像的三角形扭曲到第二个肖像的相应三角形.我正在使用重心坐标系将三角形内的 ...

  2. python个数计算公式_使用python中的公式计算第n个斐波纳契数

    你确实看到了舍入错误. 矩阵形式是更准确和更快的算法. Literateprograms.org列出了一个很好的实现,但它还列出了基于Lucas数的以下算法: def powLF(n): if n = ...

  3. python数值计算速度_提高python数值计算速度

    以下是自己写的一个python脚本,用来进行高斯展开的,可发现运行速度特别慢,短板应该是数值计算,请问有没有什么方式可以加快它的运行速度?另外,我一直是自学的,代码肯定有许多不... 以下是自己写的一 ...

  4. python个数计算公式_用python计算1-100的合数的个数

    最佳答案 具体代码如下所述: __author__ = 'Yue Qingxuan'# -*- coding: utf-8 -*-#求质数p=[2]for i in range(2,101): for ...

  5. python 概率分布模型_使用python的概率模型进行公司估值

    python 概率分布模型 Note from Towards Data Science's editors: While we allow independent authors to publis ...

  6. python 时间序列预测_使用Python进行动手时间序列预测

    python 时间序列预测 Time series analysis is the endeavor of extracting meaningful summary and statistical ...

  7. python坐标系 向量分量_关于Python中的向量相加和numpy中的向量相加效率对比

    直接使用Python来实现向量的相加 # -*-coding:utf-8-*- #向量相加 def pythonsum(n): a = range(n) b = range(n) c = [] for ...

  8. python文本筛选_使用python对多个txt文件中的数据进行筛选的方法

    使用python对多个txt文件中的数据进行筛选的方法 一.问题描述 筛选出多个txt文件中需要的数据 二.数据准备 这是我自己建立的要处理的文件,里面是随意写的一些数字和字母 三.程序编写 impo ...

  9. python中立方表示_在Python中表示一个对象的方法

    在 Python 中一切都是对象.如果要在 Python 中表示一个对象,除了定义 class 外还有哪些方式呢?我们今天就来盘点一下. 0x00 dict 字典或映射存储 KV 键值对,它对查找.插 ...

最新文章

  1. php面试题2018
  2. OAuth2,JWT,Open-ID Connect和其他令人困惑的事物
  3. net-snmp在Linux下的安装过程【转】
  4. JavaScript笔记(展开的层)-4
  5. 遗传算法详解python代码实现以及实例分析
  6. I2C 总线详解-转
  7. 关于计算机高中英语作文,关于电脑的高中英语作文:Computers
  8. js操作html节点中怎么删除子节点,在JavaScript中删除DOM节点的所有子元素
  9. 国标GB28181摄像头直播视频流媒体服务器获取视频流失败问题分析
  10. 改进维纳滤波的实现——光学稀疏孔径成像系统图像恢复算法研究 陈灏
  11. 手机抢红包助手深陷作弊指责 部分外挂植入木马
  12. 一.JavaWeb学习路线
  13. 计算机启动盘安装教程,小白装机u盘使用方法
  14. s7-200 smart中VD,VW这类变量在INTOUCH中如何对应
  15. win11启动修复无法修复你的电脑解决方案
  16. wps可以正常使用word、excel,却无法打开所有的ppt文件,也无法新建ppt文件
  17. 戴尔·卡内基《赢得朋友》
  18. 深度解析信创服务器主板一站式解决方案核心技术!
  19. HarmonyOS实战[一]——原理概念介绍安装:基础篇
  20. 美高G3便携智能微型投影机 春节显身手

热门文章

  1. Nmap高级使用学习篇
  2. html中留言表格怎么写,前端之HTML+CSS表格的写法
  3. 简易自制冰淇淋(本来想叫朗姆酒冰淇淋,酒好像挥发了)
  4. GlusterFS 简介
  5. MATLAB/Simulink自动代码生成(二)
  6. 在中国,预算15万以内,推荐十辆最适合25岁男士的,最好的车。
  7. lego ev3 matlab,科学网—[转载]【源码】乐高MINDSTORMS EV3硬件的MATLAB支持包 - 刘春静的博文...
  8. HTML中的图片标签,真的如你认为的那么简单吗?
  9. 4000万股民已成为金融买办要挟中央的人质
  10. 免密认证:从此告别手机验证码