求解仿射变换矩阵

仿射变换是图形学中经常用到的方法,通常但是仿射变换的系数是未知的,需要找到变换前后的三对对应点进行求解。

python 复制代码
from affine import Affine
import numpy as np

参考文献
矩阵最小二乘法求解仿射变换矩阵

python 复制代码
def solve_affine(init_points, goal_points) -> Affine:
    # 分别整理成上面分析的6x6和6x1的矩阵
    # 先定义变量保留6个坐标的值
    (ax, ay), (bx, by), (cx, cy) = init_points
    (ax1, ay1), (bx1, by1), (cx1, cy1) = goal_points

    A = np.array([
        [ax, ay, 1, 0, 0, 0],
        [0, 0, 0, ax, ay, 1],
        [bx, by, 1, 0, 0, 0],
        [0, 0, 0, bx, by, 1],
        [cx, cy, 1, 0, 0, 0],
        [0, 0, 0, cx, cy, 1]
    ])

    B = np.array([ax1, ay1, bx1, by1, cx1, cy1]).reshape(6, 1)  # 比手写6X1矩阵要省事
    M = np.linalg.inv(A.T @ A) @ A.T @ B  # 套公式
    
    M=M.flatten().tolist()
    return Affine(*M) #转换成Affine对象
python 复制代码
A = [[0,0], [50, 0], [50, 50]]
B = [[30, 30], [130, 30], [130, 130]]

transform=solve_affine(A,B)

for a,b in zip(A,B):
    print(a,b,transform*a)
相关推荐
前端小L2 小时前
图论专题(二十五):最小生成树(MST)——用最少的钱,连通整个世界「连接所有点的最小费用」
算法·矩阵·深度优先·图论·宽度优先
前端小L14 小时前
图论专题(二十二):并查集的“逻辑审判”——判断「等式方程的可满足性」
算法·矩阵·深度优先·图论·宽度优先
咚咚王者16 小时前
人工智能之数据分析 numpy:第十五章 项目实践
人工智能·数据分析·numpy
平凡灵感码头16 小时前
经典按键扫描程序算法实现方式
单片机·矩阵·计算机外设
Q1808095119 小时前
FLOW 3D增材制造模拟:同轴送粉激光沉积与熔池温度场流场仿真
图像处理
p***h64319 小时前
JavaScript图像处理开发
开发语言·javascript·图像处理
Ka1Yan1 天前
LeetCode 59. 螺旋矩阵 II
算法·leetcode·矩阵
weixin_457760002 天前
OpenCV 图像处理基础算法详解(一)
图像处理·opencv·算法
西西弗Sisyphus2 天前
线性代数 - 初等变换与线性方程组联系(矩阵展示)
线性代数·矩阵
爱代码的小黄人2 天前
代数余子式矩阵和伴随矩阵的区别
线性代数·矩阵