3

私はプロジェクトに取り組んでいます。静的カメラは1つだけ(移動していません)、オブジェクト平面には3つのポイントがあります(平面であるため、z方向のポイントの差はゼロです)。カメラは常に同じ位置にあり、平面は空間内を移動および回転します。25枚のチェス盤の画像と機能を使用してカメラを調整しました。

calibrateCamera(object_points, image_points, image.size(), intrinsic, distCoeffs, rvecs,      tvecs);

歪みがなくても問題なく動作します。ここで、opencv(c ++)を作成して、組み込み関数とdistCoeffsをxmlファイルに書き込みました。

新しいプログラムでこれらのパラメータを使用して、三角形(赤外線LEDで作成)を形成する3つのポイントを見つけ、この三角形の回転と平行移動を返すにはどうすればよいですか?

4

1 に答える 1

1

2Dケース

回答のこの部分では、平面内の剛体運動についてのみ説明しているため、質問と完全には一致しません。

あなたがあなたのコメントに従ってうまくいくように見えるあなたのポイントを特定したとしましょう。これで、これらのポイント間の距離を計算して並べ替えることができます。検出された2つのポイント間の最短距離は、元の三角形の最短エッジに対応する必要があります。この情報を使用して、ポイントにABCのラベルを付けることができます。

次に、すべてのポイントを移動(移動)して、後で1つのポイントが原点にくるようにします。これは、元の三角形の原点に1つのコーナーがあることを前提としています。元の三角形と移動した点のセットの両方で、 Aが原点にあると仮定します。このベクトルの否定バージョンは、三角形の変換を示します。

今度は回転します。今のところ、元の三角形の場合、Bは正のx軸にある、つまりy =0およびx >0であると想定します。これで、カメラから点Batan2の(移動した)位置を取得し、座標では、線ABx軸の間の角度を決定できます。これが三角形の回転角です。

これらの両方を組み合わせて、アフィン変換を形成できます。元の三角形が原点にA 、 x軸の正の部分にBが配置されていない場合は、同様の手法を使用して、元の三角形が記述されたプロパティを持つ三角形とどのように関連しているかを判断できます。

3Dケース

宇宙での硬直した動きについては、すぐに使える解決策はありません。ただのアイデア。カメラが原点にあり、分析する画像がz = 1に埋め込まれているとします。次に、画像内の点( xy )は、その埋め込まれた位置の点(xy、1)に対応し、その点を通過する光線は、その座標の倍数、つまり(λxλyλ)によって与えられます。したがって、画像内のポイントABCの位置から始めて、ポイントごと1つの変数に基づいて、空間内の対応するポイントを計算できます。c

ここでのタスクは、空間内のポイント間の距離が三角形のエッジの長さと一致するように、これら3つの変数を選択することです。これにより、3つの変数で3つの方程式のシステムが作成されます。

(a - b)^2 + (Ay*a - By*b)^2 + (Ax*a - Bx*b)^2 == AB^2
(a - c)^2 + (Ay*a - Cy*c)^2 + (Ax*a - Cx*c)^2 == AC^2
(b - c)^2 + (By*b - Cy*c)^2 + (Bx*b - Cx*c)^2 == BC^2

残念ながら、これらの方程式は線形ではありません。いたるところに変数の四角があります。それらを数式処理システムに単純にフィードするだけでは、まだ明確な解決策は得られていません。いくつかの反復プロセスを使用して近似を見つけるための数値的な方法があるかもしれないと思いますが、それについていくつかの調査を行う必要があります。

3D座標を取得したら、これらからの変換の計算は比較すると簡単です。それはすべて、回転の説明に必要な形式によって異なります。

于 2012-10-17T09:27:39.683 に答える