2

あなたの助けを借りて、私はCvPositを使用してカメラのポーズを推定することができました(このリンクhttp://www.aforgenet.com/articles/posit/を使用)。私はMATLABコードを使用しています。

今、私は画像座標に3Dポイントを投影することによって、そのポーズを確認しようとしています。詳細は以下のとおりです。

  1. キューブのイメージポイントとワールドポイントは次のとおりです。

    World Points=[28 28 -28;-28 28 -28;28 -28 -28, 28 28 28]
    Image_Points=[-4 29;-180 86;-5 -102;76 137];
    
  2. 得られたポーズは次のとおりです。

    Pose =[0.896 0.0101 0.4439 -13.9708;-0.3031 0.7127 0.6326 13.7039;-0.3100 -0.701 0.6416 164.5663;0 0 0 1];
    

    私の例では、焦点距離として640を使用しました。このポーズから、3Dポイントを使用して投影し直して、2Dイメージポイントを取得します。理想的には、私は同じ点を取得する必要があります。しかし、私はそれを得ることができません。私はMATLABで次の方法を使用しています。

  3. まあ言ってみればP = [28;28;28;28;1] % 4 X 1 matrix for a 3D point

    P_Camera= Pose *  P;  
    
    Calibration Matrix (K)=[640 0 0 0;0 640 0 0;0 0 1 0;0 0 0 1];
    
    Image Points= P_Camera*K;           
    

    取得x = 15251y = 27447ます。ここで何が間違っているのかわかりません。私を助けてください!!

4

1 に答える 1

1

カメラ ポーズまたはカメラの外部パラメータは、回転 R と並進 t で構成されます。あなたの Pose マトリックスは実際には[R t; [0 0 0 1]]. 3D 同次点 (4x1) をカメラ座標に変換するには、次のことを行う必要があります。

Xcam = K*[R t]*Xworld

ここで、K はカメラ固有 (内部) パラメーターを含む3x3カメラ行列です。K を次のように設定する場合は、数字を少しいじってみてください。

K =

3.3202         0   -0.0229
     0    3.3202    0.0153
     0         0    1.0000

近い答えが得られます (この K は F=640 のデータには適合しませんが、入力ポイントとポーズを使用した LS ソリューションです)。それでも多少の誤差はあります。カメラのキャリブレーションを行い、光学歪みを考慮してみてください (Matlab 用の優れたカメラ キャリブレーション ツールボックスが ここにあります

于 2012-07-22T07:03:57.473 に答える