<center id="qkqgy"><optgroup id="qkqgy"></optgroup></center>
  • <menu id="qkqgy"></menu>
    <nav id="qkqgy"></nav>
    <xmp id="qkqgy"><nav id="qkqgy"></nav>
  • <xmp id="qkqgy"><menu id="qkqgy"></menu>
    <menu id="qkqgy"><menu id="qkqgy"></menu></menu>
    <tt id="qkqgy"><tt id="qkqgy"></tt></tt>

  • 推導

    三角形ABC仿射成為三角形DEF的變換矩陣M

    猜測矩陣M=

    [

    ? ? ? ? [a1,b1,c1],

    ? ? ? ? [a2,b2,c2]

    ]?

    仿射變換的數學聯系

    對于A點和D點

    AX*a1+AY*b1+c1=DX

    AX*a2+AY*b2+c1=DY

    對于B點和E點

    BX*a1+BY*b1+c1=EX

    BX*a2+BY*b2+c2=EY

    對于C點和F點

    CX*a1+CY*b1+c1=FX

    CX*a2+CY*b2+c2=FY

    求解

    對以上數學聯系式均取第一條

    AX*a1+AY*b1+c1=DX

    BX*a1+BY*b1+c1=EX

    CX*a1+CY*b1+c1=FX

    可以看出這是一個三元一次方程組,我們可以借助scipy庫linalg模塊的solve函數進行求解,它的用法大家可以參考一下其他資料,這里不多贅述

    對數學聯系式均取第二條

    AX*a2+AY*b2+c1=DY

    BX*a2+BY*b2+c2=EY

    CX*a2+CY*b2+c2=FY

    也是一個三元一次方程組,同樣可以借助scipy庫linalg模塊的solve函數進行求解

    驗證

    根據以上各個點的坐標,分別用opencv的函數,和我們猜想的計算過程,觀測對比兩個結果是否一致
    import numpy as np import cv2 as cv import math AX = 4 AY = 2 BX = 9 BY = 2 CX
    = 4 CY = 7 DX = 13 DY = 8 EX = 13 EY = 6 FX = 11 FY = 8 ps1 = np.float32([ [AX,
    AY], [BX, BY], [CX, CY] ]) ps2 = np.float32([ [DX, DY], [EX, EY], [FX, FY] ]) M
    = cv.getAffineTransform(ps1, ps2) print(f"opencv_M=\n{M}") print() A =
    np.array([ [AX, AY, 1], [BX, BY, 1], [CX, CY, 1] ]) b1 = np.array([ [DX], [EX],
    [FX] ]) b2 = np.array([ [DY], [EY], [FY] ]) from scipy import linalg r1 =
    linalg.solve(A, b1) r2 = linalg.solve(A, b2) r = np.array([ r1.T[0], r2.T[0] ])
    print(f"self_M=\n{r}")
    運行結果

    可以看出,結果是一致的,函數的底層實現原理就是如此?

    技術
    下載桌面版
    GitHub
    百度網盤(提取碼:draw)
    Gitee
    云服務器優惠
    阿里云優惠券
    騰訊云優惠券
    華為云優惠券
    站點信息
    問題反饋
    郵箱:ixiaoyang8@qq.com
    QQ群:766591547
    關注微信
    巨胸美乳无码人妻视频