いくつかのマーカーが付いた剛体の画像のセットがあります。これらのマーカーの1つに原点を持つ座標系を定義しました。この座標系と、カメラの原点で定義された座標系との間の回転と平行移動を取得したいと思います。
最初にカメラをキャリブレーションする必要があることに気付くまで、しばらくの間POSIT(これに続いて)を試しましたが、許容できる結果は得られませんでした。これに基づいて、キャリブレーションボディで取得したいくつかの画像を使用して、カメラ固有のマトリックスと歪みパラメーターを取得しました。また、1.276という悪い(?)再投影エラーが発生しました。
- 再投影エラーが高すぎませんか?どうすれば改善できますか?(私はより多くの画像を使用し、値のわずかな減少を達成しました)。
- POSITで歪みパラメータを使用できますか?どのように?
ありがとう。
再投影エラー(〜1.3から〜0.7に変更)を減らす唯一の方法は、XML構成ファイルで次のパラメーターを「0」に設定することです。
<Calibrate_FixAspectRatio> 0 </Calibrate_FixAspectRatio>
<Calibrate_AssumeZeroTangentialDistortion> 0 </Calibrate_AssumeZeroTangentialDistortion>
<Calibrate_FixPrincipalPointAtTheCenter> 0 </Calibrate_FixPrincipalPointAtTheCenter>
より多くの画像を使用してもエラーは変わりません。この新しいエラーが許容できるかどうかはまだわかりません。
POSITでキャリブレーションによって出力として得られた値(つまり、焦点距離と光学中心)を使用しましたが、結果は、事前キャリブレーション値を使用したときに得られた結果と非常に似ていました。歪みパラメータをPOSITで処理する方法がわからないため、使用しませんでした(結果に違いが生じる可能性がありますか?)。
キャリブレーション後に取得したカメラマトリックス:
<Camera_Matrix type_id="opencv-matrix">
<rows>3</rows>
<cols>3</cols>
<dt>d</dt>
<data>
2.0613885351075501e+003 0. 2.2865517805186334e+002 0.
2.2546461307897816e+003 2.5261706201677623e+002 0. 0. 1.
</data>
</Camera_Matrix>
そして私がPOSITでそれを使用した方法:
#define FOCAL_LENGTH 2158.0175
#define FOCAL_LENGTH_X 2061.389
#define FOCAL_LENGTH_Y 2254.646
#define cX 203.655
#define cY 205.117
新しい中心座標とキャリブレーション画像の中心座標の差を計算し、その差をPOSITで作業している画像の中心座標に適用しました。
2つの異なる画像でPOSITを使用しています。理論的には、モデルとカメラの座標系の間で0度(最初の画像)と10度(2番目の画像)の回転が必要です。各画像の回転行列を取得した後、カメラ座標系で単位ベクトルを定義し、POSITで指定された2つの回転行列の逆行列で乗算して、モデル座標系で計算し、モデルに2つの新しいベクトルを取得しました。座標系。モデル座標系でこれら2つのベクトル間の角度を計算すると、出力は-10度になるはずです。
誰かが私がどこで間違っているのか考えていますか?