私はいくつかのマーカーが付いた剛体のイメージのセットを持っています。私はこれらのマーカーの1つに原点を持つ座標系を定義しました。この座標系とカメラの原点で定義された座標系の間の回転と平行移動を取得したいと思います。カメラキャリブレーション(OpenCV 2.3) - 歪みパラメータの使い方は?
最初にカメラを較正しなければならないと気づくまで、私はしばらくの間POSIT(thisに従ってください)を試みました。 thisに基づいて、校正体で取得したいくつかの画像を使用して、カメラの組み込み行列と歪みパラメータを取得しました。私はまた、悪い(?)再投影誤差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>
及びIは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
I新しい中心座標とのための1つの間の差を計算し私はPOSITと一緒に作業している画像の中心座標にその差を適用しました。
私は理論的には、モデルとカメラの座標系の間に0度(最初の)と10度(秒)の回転を得なければならない2つの異なる画像でPOSITを使用しています。各画像の回転行列を求めた後、私はカメラ座標系上に単位ベクトルを定義し、それをPOSITによって与えられた2つの回転行列の逆数で多重化することによってモデル座標系上でそれを計算し、モデル内に2つの新しいベクトル座標系。モデル座標系でこれらの2つのベクトルの間の角度を計算すると、出力は10度にならないようになります。
私はどこが間違っているのか考えている人はいますか?
私の校正体は、典型的なチェス盤ではなく、円のグリッドパターンです。 –