0

これまでのところ、私のプロセスは次のとおりです。

マーカーは、既知のサイズの正方形のマーカーです。例を以下に示します。

ここに画像の説明を入力

  1. マーカーを検出する
  2. POSITを使用して、カメラに対するマーカーの移動 + 回転を取得します。結果は、カメラ座標空間での行列の変換行列です。

現在、2 つのマーカーの関連するコーナー間の距離を mm 単位で見つけようとしています。以下に例を示します。

ここに画像の説明を入力

距離とは、ユークリッド距離 (sqrt(x^2 + y^2 + z^2)) を意味します。

mm 距離の参照があるので可能であると考えています (任意のマーカーのエッジは既知の mm 距離です) が、私が持っている 2 つの変換行列だけからどのようにこれを取得するかについてはわかりません。

編集:

これまでのところ、2 番目の変換行列に最初の変換行列の逆数を掛けて、結果の変換を調べることで、マーカーの中心間の相対距離を取得することができました。

法線と点を取得することで、各マーカーの平面を取得できると考えました。そこから、2D ポイントがその平面とどのように交差するかを見ることで、コーナーの 3D 座標を取得できるはずであり、そこから残りは簡単になるはずです。マーカーの法線を取得する方法と、コーナーを表す 2D 座標が平面と交差するポイントを計算する方法が完全にはわかりません。

追加情報:

  • XNA と C# の使用
  • ビデオ入力とマーカー検出に AForge.net を使用します。
4

1 に答える 1

1

計算を簡単にするために、マーカーは XY 平面上にあると仮定します。そうしないと、カメラの位置をマーカーの平面に合わせるために、いくつかの投影を行う必要があります。

平行移動行列があれば、カメラの位置を定義できるはずです。それらの点の座標間の絶対差を見つけようとします

カメラの位置を pC(xc,yc)、最初のマーカーの位置を pA(xa,ya)、2 番目のマーカーの位置を pB(xb,yb) とします。

lAC A とカメラの間の既知の絶対距離

lBC B とカメラの間の既知の絶対距離

lAB B と A の間の絶対距離

dAC(dcax,dcay) カメラと A の間のマンハッタン距離、

dBC(dcbx,dcby) と dAB(dabx,daby) も同様です。

dcax = sqrt( lAC^2 - (xc-xa)^2)

dcay = sqrt( lAC^2 - (yc-ya)^2)

dcbx = sqrt( lBC^2 - (xc-xb)^2)

dcby = sqrt( lBC^2 - (yc-yb)^2)

dabx = abs(dcbx-dcax)

daby = abs(dcby-dcay)

lAB = sqrt(dabx^2 + daby^2)

画像

Ps: これを行うのは久しぶりです。再確認していただければ幸いです :)

于 2012-05-27T16:44:22.420 に答える