求解仿射变换矩阵

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

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)
相关推荐
AI科技星1 小时前
特征值与特征向量不是矩阵特殊解,是变换矩阵下不改变生长方向、仅缩放体量的固有主螺旋脉络 -《全域数学vs传统数学:人类文明进阶200讲》第73讲
人工智能·线性代数·矩阵·数据挖掘·回归·乖乖数学·全域数学
学究天人3 小时前
数学公理体系大全:Comprehensive Collection of Mathematical Axiom Systems(卷7)
线性代数·矩阵·动态规划·概率论·图论·抽象代数·拓扑学
风若飞4 小时前
图像直方图实验技术分享
图像处理·计算机视觉
学究天人5 小时前
数学公理体系大全:Comprehensive Collection of Mathematical Axiom Systems(卷8)
线性代数·算法·机器学习·数学建模·动态规划·图论·抽象代数
谙忆5 小时前
Python 常用图像处理库速查:Pillow、OpenCV、rembg、pillow-simd 各擅长什么、怎么选
图像处理·python·pillow
USB_ABC7 小时前
视频矩阵核心技术对比:模块化vs固定机箱、硬件帧同步vs软件同步怎么选
矩阵·音视频
workflower1 天前
室内外配送机器人-应用路径
人工智能·机器学习·设计模式·矩阵·自动化
hai3152475431 天前
九章编译法----空间几何统一编译法
网络·汇编·人工智能·线性代数
lin9902121 天前
内容矩阵批量分发实战
大数据·人工智能·矩阵
学究天人1 天前
数学公理体系大全:Comprehensive Collection of Mathematical Axiom Systems(卷3.2)
线性代数·算法·机器学习·数学建模·动态规划·抽象代数·拓扑学