web-dev-qa-db-ja.com

イメージポイントの実世界の座標を見つける

私は何日もインターネットでたくさんのリソースを検索していますが、問題を解決できませんでした。

平面上の円形オブジェクトの位置を検出することになっているプロジェクトがあります。平面上にあるので、必要なのはxとyの位置(zではない)だけです。この目的のために、画像処理を選択しました。カメラ(ステレオではなくシングルビュー)の位置と方向は、平面上の参照座標系に対して固定されており、既知です。

Opencvを使用して、円の中心の画像のピクセル座標を検出しました。必要なのは、座標を変換することだけです。現実の世界へ。

http://www.packtpub.com/article/opencv-estimating-projective-relations-images このサイトおよび他のサイトでも、ホモグラフィック変換の名前は次のとおりです。

p = C [R | T] P;ここで、Pは実世界の座標であり、pはピクセル座標(同形異義語の座標)です。 Cは固有パラメーターを表すカメラ行列、Rは回転行列、Tは並進行列です。 opencv(cameraCalibrationソースファイルを適用)でカメラをキャリブレーションするチュートリアルに従いました。9つの細かいchessbordimagesがあり、出力として、固有のカメラマトリックス、および各画像の並進および回転パラメーターがあります。

3x3の固有カメラマトリックス(焦点距離と中央のピクセル)と、3x4の外部マトリックス[R | T]があります。ここで、Rは左側の3x3、Tは右側の3x1です。 p = C [R | T] Pの式によると、これらのパラメーター行列をP(world)に乗算すると、p(pixel)が得られると思います。しかし、必要なのは投影することです。 p(pixel)地面のP(世界座標)への座標。

私は電気電子工学を勉強しています。私は画像処理や高度な線形代数のクラスを受講しませんでした。線形代数のコースで覚えているように、変換をP = [R | T] -1 * C-1 * pとして操作できます。ただし、これはユークリッド座標系にあります。そんなことがホンポグラフィックで可能かどうかはわかりません。さらに、3x4 [R | T]ベクトルは可逆ではありません。さらに、私はそれが正しい道だとは知りません。

内因性および外因性のパラメーターはわかっています。必要なのは、グランドプレーン上の実際のプロジェクト座標だけです。ポイントは平面上にあるため、座標は2次元になります(単一ビュージオメトリとは反対の引数として、深さは重要ではありません)。カメラは固定されています(位置、方向)。キャプチャされた画像上のポイントの実際の座標を見つけるにはどうすればよいですか。カメラで(シングルビュー)?

[〜#〜] edit [〜#〜]GaryBradskiとAdrianKaehlerの「learningopencv」を読んでいます。 386ページの[キャリブレーション]-> [ホモグラフィ]セクションに次のように記述されています。q= sMWQここで、Mはカメラ固有のマトリックス、Wは3x4 [R | T]、Sはホモグラフィの概念に関連すると想定する「最大」スケールファクターです。はっきりと知っています。qはピクセル座標で、Qは実際の座標です。画像平面上で検出された物体の座標の(チェス盤平面上の)実世界の座標を取得するためと言われています。 Z = 0、次にW = 0の3番目の列(軸の回転を想定)、これらの不要な部分をトリミングします。 Wは3x3行列です。 H = MWは3x3ホモグラフィ行列です。これで、ホモグラフィ行列を反転し、qを残して、Q = [X Y 1]を取得できます。ここで、Z座標はトリミングされています。

上記のアルゴリズムを適用しました。そして、画像の角の間に置くことができないいくつかの結果が得られました(画像平面はカメラの約30cmの直前のカメラ平面と平行であり、3000のような結果が得られました)(チェス盤の正方形のサイズはミリメートルで入力されました、したがって、出力された実世界の座標は再びセンチメートルであると仮定します)。とにかく私はまだ何かを試しています。ちなみに、結果は以前は非常に大きいものでしたが、Qのすべての値をQの3番目のコンポーネントで割って(X、Y、1)を取得します。

最終編集

カメラのキャリブレーション方法を実行できませんでした。とにかく、私は遠近法の投影と変換から始めるべきでした。このようにして、画像平面と物理平面の間の透視変換を使用して非常によく推定しました(両方の平面上の対応する同一平面上の点の4つのペアによって変換を生成しました)。次に、画像のピクセルポイントに変換を適用するだけです。

14
user3417020

「私は固有のカメラマトリックスと、各画像の並進および回転パラメータを持っています」とあなたは言いました。ただし、これらはカメラからチェス盤への平行移動と回転です。これらは円とは関係ありません。ただし、平行移動と回転行列が実際にある場合は、3Dポイントを取得するのは非常に簡単です。

逆固有行列を同種表記で画面ポイントに適用します:C-1* [u、v、1]、ここでu = col-w/2およびv = h/2-row、ここでcol、rowは画像の列と行、w、hは画像の幅と高さです。その結果、いわゆるカメラ正規化座標p = [x、y、z]で3Dポイントを取得します。T。ここで行う必要があるのは、平行移動を減算し、転置された回転を適用することだけです。P= RT(p-T)。操作の順序は、回転してから移動した元の操作と逆です。転置回転は元の回転と逆の操作を行いますが、Rよりも計算がはるかに高速であることに注意してください。-1

8
Vlad