1

私はすでにキャリブレーション済みの魚眼カメラを持っています。チェッカーボードの単一の画像、固有パラメーター、およびチェッカーボードの正方形のサイズを使用するだけで、チェッカーボードのカメラポーズを計算する必要があります。残念ながら、多くのキャリブレーション ライブラリは、最初に一連の画像から外部パラメータを計算し、次に内部パラメータを計算します。これは本質的に、私が望むものの「逆」手順です。もちろん、キャリブレーションに使用した他の画像のセット内にチェッカーボードの画像を配置して、キャリブレーション手順を再度実行することもできますが、これは非常に面倒です。本質的なキャリブレーション。誰かが私を正しい方向に向けることができますか?

編集:フランチェスコの答えを読んだ後、カメラのキャリブレーションの意味を説明していないことに気付きました。私の問題は、私が古典的な固有パラメータ行列を持っていないという事実から始まります (そのため、フランチェスコが説明した方法を実際に使用することはできません) 。 .com/site/scarabotix/ocamcalib-toolbox )、これは基本的に、3d ワールド ポイントをピクセル座標にマップする多項式 (または、ピクセルを単位球に逆投影する多項式) を見つけます。さて、これらの情報は、チェス盤に関するカメラのポーズを見つけるのに十分だと思いますが、正確にどのように進めればよいかわかりません。

4

2 に答える 2

0

solvePnPプロシージャは、カメラ座標でチェス盤 (CB) の外部ポーズを計算します。openCV は、その 3D 再構築モジュールに fishEye ライブラリを追加して、広い視野を持つカメラの大きな歪みに対応しました。もちろん、組み込み行列または変換が古典的な組み込み行列でない場合は、PnP を変更する必要があります。

  1. 行った逆投影を元に戻す
  2. これで、固有のマトリックス効果が排除された、いわゆる正規化されたカメラができました。

    k*[u,v,1] T = R|T * [x, y, z, 1] T

これを解決する方法は、最初に k の式を書くことです:

k=R20*x+R21*y+R22*z+Tz

次に、上記の式を使用します

k*u = R00*x+R01*y+R02*z+Tx
k*v = R10*x+R11*y+R12*z+Tx

|x|=1 を条件として Ax=0 を得るために項を並べ替えることができます。

x=[R 00 , R 01 , R 02 , T x , R 10 , R 11 , R 12 , T y , R 20 , R2 1 , R 22 , T z ] T

A、b は、既知の u、v、x、y、z - ピクセルおよび CB コーナー座標で構成されます。

次に、x=V の最後の列 (A=ULV T ) について解き、xから回転行列と並進行列を組み立てます。次に、この種の処理に実際に非常に典型的な「厄介な」手順がいくつかあります。

A. 実際の回転行列が得られていることを確認してください - R2 = UV Tで直交 Procrustes を実行します。ここで、R=ULV Tです。

B. スケール係数 scl=sum(R2(i,j)/R(i,j))/9 を計算します。

C. 平行移動ベクトル T2=scl*T を更新し、Tz>0 をチェックします。負の場合は T を反転し、R を無効にします。

ここで、R2、T2 は、Levenberg Marquardt などの非線形アルゴリズム最適化の良い出発点を提供します。前の線形ステップではパラメーターの代数誤差のみが最適化されるのに対し、非線形ステップではピクセル距離の二乗誤差などの正しいメトリックが最適化されるため、これが必要です。ただし、これらのすべての手順を実行したくない場合は、openCVの魚眼ライブラリを利用できます。

于 2015-04-30T07:04:08.207 に答える