求解仿射变换矩阵

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

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)
相关推荐
Godspeed Zhao11 小时前
现代智能雷达技术14——算法(0)
线性代数·算法·雷达
Latchh14 小时前
前端导出的JPEG红字发糊,质量要拉到100才清楚
前端·图像处理·人工智能·计算机视觉
lank_M17 小时前
抠图换深色背景有白边?先分清直通和预乘alpha
图像处理·人工智能·计算机视觉·状态模式
蝶依斓(湖南)全案整装20 小时前
整装行业长尾需求内容矩阵搭建方法:从五个维度拆解用户需求
大数据·人工智能·矩阵
梦帮科技20 小时前
推测解码(Speculative Decoding)与 Draft-Target 双核协同:接受率判据、树状验证与两倍吞吐无损加速
网络·人工智能·深度学习·神经网络·线性代数·矩阵·架构
JAI科研1 天前
CT重建(二) | 3D高斯泼溅:实时渲染的革命
图像处理·人工智能·计算机视觉·3d·视觉检测·ct重建
lank_M2 天前
浏览器端为什么导不出渐进式JPEG
图像处理·人工智能·计算机视觉
指针向南2 天前
Chrome读不了HEIC怎么办:原生解码和WASM两条路
前端·图像处理·人工智能·chrome·计算机视觉·wasm
xqqxqxxq2 天前
LeetCode Hot100 矩阵专题题解笔记
笔记·leetcode·矩阵
Dylan的码园2 天前
求平均成绩 矩阵数据处理 【循环处理 二维数组】
c++·线性代数·矩阵