10

Hartley/Zisserman の Multiview Geometry, Algorithm 12: The Optimization Triangulation method (p318) に従って、対応するイメージ ポイント xhat1 と xhat2 を取得しました (ステップ 10)。ステップ 11 では、3D ポイント Xhat を計算する必要があります。そのような方法の 1 つは、12.2 (p312) および 4.1 (p88) で言及されている Direct Linear Transform (DLT) です。

同種法 (DLT) の p312-313 では、A の最小特異値に対応する単位特異ベクトルとして解を見つけると述べられているため、

A = [xhat1(1) * P1(3,:)' - P1(1,:)' ;
      xhat1(2) * P1(3,:)' - P1(2,:)' ;
      xhat2(1) * P2(3,:)' - P2(1,:)' ;
      xhat2(2) * P2(3,:)' - P2(2,:)' ];

[Ua Ea Va] = svd(A);
Xhat = Va(:,end);

plot3(Xhat(1),Xhat(2),Xhat(3), 'r.');

ただし、A は 16x1 行列であるため、Va は 1x1 になります。

3Dポイントを取得する際に何が間違っていますか(および修正しますか?)

サンプルデータの価値は次のとおりです。

xhat1 =

  1.0e+009 *

    4.9973
   -0.2024
    0.0027


xhat2 =

  1.0e+011 *

    2.0729
    2.6624
    0.0098


P1 =

  699.6674         0  392.1170         0
         0  701.6136  304.0275         0
         0         0    1.0000         0


P2 =

  1.0e+003 *

   -0.7845    0.0508   -0.1592    1.8619
   -0.1379    0.7338    0.1649    0.6825
   -0.0006    0.0001    0.0008    0.0010


A =    <- my computation

  1.0e+011 *

   -0.0000
         0
    0.0500
         0
         0
   -0.0000
   -0.0020
         0
   -1.3369
    0.2563
    1.5634
    2.0729
   -1.7170
    0.3292
    2.0079
    2.6624

アルゴリズムのセクション xi の作業コードを更新

% xi
A = [xhat1(1) * P1(3,:) - P1(1,:) ;
     xhat1(2) * P1(3,:) - P1(2,:) ;
     xhat2(1) * P2(3,:) - P2(1,:) ;
     xhat2(2) * P2(3,:) - P2(2,:) ];

A(1,:) = A(1,:)/norm(A(1,:));
A(2,:) = A(2,:)/norm(A(2,:));
A(3,:) = A(3,:)/norm(A(3,:));
A(4,:) = A(4,:)/norm(A(4,:));

[Ua Ea Va] = svd(A);
X = Va(:,end);
X = X / X(4);   % 3D Point
4

2 に答える 2

14

本 (12.2 節) で述べられているように、p i TPのです。したがって、転置する必要はありません(つまり、正しい定式化は です)。P1(k,:)A = [xhat1(1) * P1(3,:) - P1(1,:) ; ...

それが単なるタイプミスだったことを願っています。

さらに、 の各行Aをその L2 ノルムで正規化することをお勧めします。i

A(i,:) = A(i,:)/norm(A(i,:));

また、三角形分割された 3D ポイントをプロットする場合は、プロットするXhat前に正規化する必要があります (それ以外の場合は意味がありません)。

Xhat = Xhat/Xhat(4);

于 2010-02-17T04:28:04.220 に答える
0
A(1,:) = A(1,:)/norm(A(1,:));
A(2,:) = A(2,:)/norm(A(2,:));
A(3,:) = A(3,:)/norm(A(3,:));
A(4,:) = A(4,:)/norm(A(4,:));

のように簡略化できますA = normr(A)

于 2019-11-19T19:36:05.923 に答える