【问题标题】:Get 2d Affine transformation from 2 pair of points Matlab从 2 对点 Matlab 获得 2d 仿射变换
【发布时间】:2014-05-27 17:30:29
【问题描述】:

我在齐次坐标 x1(x1;y1;z1)..x4(x4;y4;z4) 中有 5 个点的矩阵。我知道在对这个矩阵应用仿射变换后,x1 移动到 x1_prime,x2 - 到 x2_prime。如何找到转换矩阵?

我试过了

X = [x1 x2];
X_prime = [x1_prime x2_prime];
T = X_prime/X;

但这不起作用。在我的 4 分上应用 T 后,我得到 1 段。

我在 Matlab 中尝试了 fitgeotrans(),但我想我用错了。 你能帮我在Matlab中找到仿射变换矩阵吗?

谢谢

【问题讨论】:

    标签: matlab transformation matrix-multiplication affinetransform


    【解决方案1】:

    您要求解的矩阵是一个 3x3 矩阵。但是您已将数据打包到 1x15 矩阵中,而不是 3x5 矩阵,这样您就可以轻松地进行反解。 试试这个:

    X = [x1;x2;x3;x4;x5];
    X_prime = [x1_prime;x2_prime;...];
    T = X_prime/X;
    

    【讨论】:

    • 对不起,我写的不正确。我使用 x1(x1; y1; z1),所以我的点是列。所以x1 = [1; 0; 1]; x2 = [0; 1; 1]; x1_new = [2; 0; 1]; x2_new = [-1; 1; 1]; X = [x1 x2]; X_new = [x1_new x2_new]; T = X_new/X; 在这之后我的 T 矩阵在第二列中包含零,看起来根本不像仿射变换
    【解决方案2】:

    用2个点不可能找到仿射变换矩阵

     [a b c;
      d e f; 
      g h i].
    

    我们需要 3 分。只有这样,对于矩阵的每一行,我们才会有 3 个未知数和 3 个方程。 2分我们可以找到

    [a b;
     d e]
    

    矩阵的一部分,然后添加0 0 1,我们将得到仿射变换

       [a b 0;
        d e 0;
        0 0 1]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-07
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 2017-05-10
      • 2020-02-11
      • 2010-12-17
      相关资源
      最近更新 更多