問題タブ [homography]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
computer-vision - アフィンホモグラフィ計算
2つの画像の間にホモグラフィHがあるとします。最初の画像は参照画像であり、平面オブジェクトが画像全体を覆っています(画像と平行です)。2番目の画像は、別のabritraryビューからの平面オブジェクトを示しています(実行時画像)。ここで、参照画像p =(x、y)内の点が与えられると、p(パッチと呼びます)の周りにサイズSxS(S <= 20ピクセル)のピクセルの長方形の領域があります。ランタイム画像のピクセルと逆ホモグラフィH^(-1)を使用して、このパッチのワープを解除できます。
ここで、私がやりたいのは、Hが与えられた場合に、点pの周りのパッチに適したアフィンホモグラフィH_affineを計算することです。私が使用している素朴な方法は、4つのポイントの対応を計算することです。パッチの4つのコーナーと、ランタイムイメージの対応するポイント(完全なホモグラフィHを使用して計算)です。この4つの点の対応(すべて点pの小さな近傍に属する)が与えられると、単純な線形システムを解くアフィンホモグラフィを計算できます(ゴールドスタンダードアルゴリズムを使用)。そのように計算されたアフィンホモグラフィは、pの小さな近傍にあるため、妥当な精度(0.5ピクセル未満)で完全な射影ホモグラフィを近似します(スケールがあまり好ましくない場合、つまりパッチSxSがランタイムイメージの大きなイメージ領域)。
Hが与えられたときにH_affineを計算するより速い方法はありますか(ポイントpとパッチSxSに関連しています)?
opencv - 任意の既知の幾何関係を使用したホモグラフィ行列の計算
光学測定システムに OpenCV を使用しています。デジタル カメラでキャプチャした 2 つの画像間で透視変換を実行する必要があります。カメラの視野内に一連のマーカー (共通の平面にある) を配置し、これを両方の画像で対応する点として使用します。マーカーの位置を使用して、ホモグラフィ行列を計算できます。問題は、実際に画像を変換したい測定オブジェクトが、マーカーからわずかな距離にあり、マーカーの平面と平行に配置されていることです。この距離なら測れます。
私の質問は、透視変換を実行するために必要なホモグラフィ行列を計算するときに、その距離をどのように考慮するかということです。
私のソリューションでは、ホモグラフィの計算に測定されたオブジェクト ポイントを使用しないことが強く要求されます (そのため、視野内に他のマーカーが必要です)。
説明が正確でない場合はお知らせください。
図に示されているのは、例示的なイメージです。
赤い四角が測定対象です。円形マーカーの後ろの少し離れたところに物理的に配置されます。
さまざまなカメラの位置からオブジェクトの画像をキャプチャします。測定対象は、各取得の間に変形する可能性があります。円形のマーカーを使用して、オブジェクトの画像を同じ座標に変換したいと考えています。オブジェクトとマーカーの間の距離を測定できますが、(マーカーではなく) 測定されたオブジェクトで作業するには、ホモグラフィ行列をどのように変更すればよいかわかりません。
c++ - OpenCV cv::findHomographyランタイムエラー
Features2D + Homographyからコードをコンパイルして実行し、既知のオブジェクトチュートリアルを見つけるために使用していますが、これを取得しています
ランタイムエラー。デバッグ後、findHomography関数でプログラムがクラッシュしていることがわかりました。
OpenCVの紹介では、「cv名前空間」の章に次のように書かれています。
現在または将来のOpenCV外部名の一部は、STLまたは他のライブラリと競合する可能性があります。この場合、明示的な名前空間指定子を使用して、名前の競合を解決します。
コードを変更し、どこでも明示的な名前空間指定子を使用しましたが、問題は解決しませんでした。可能であれば、この問題について私を助けてください。または、どの関数がfindHomographyと同じことを行い、プログラムをクラッシュさせないかを言ってください。
そしてこれは私のコードです
opencv - 4つの同一平面上の点に基づくホモグラフィマトリックスを使用したカメラポーズの計算
ビデオ(または画像)に四角形(必ずしも正方形または長方形である必要はありません)を表す4つの同一平面上の点があり、それらの上に仮想立方体を表示できるようにしたいのですが、立方体の角が正確に角に立っています。ビデオクワッドの。
ポイントは同一平面上にあるため、単位正方形のコーナー([0,0] [0,1] [1,0] [1,1])とクワッドのビデオ座標の間のホモグラフィを計算できます。
このホモグラフィから、正しいカメラポーズを計算できるはずです。つまり、[R | t]ここで、Rは3x3の回転行列、tは3x1の並進ベクトルであり、仮想立方体はビデオクワッド上にあります。
私は多くの解決策を読み(そのうちのいくつかはSOで)、それらを実装しようとしましたが、それらはいくつかの「単純な」場合(ビデオクワッドが正方形の場合など)でのみ機能するようですが、ほとんどの場合は機能しません。
これが私が試した方法です(それらのほとんどは同じ原理に基づいており、翻訳の計算のみがわずかに異なります)。Kをカメラからの固有行列、Hをホモグラフィとします。計算します:
a1、a2、a3をAの列ベクトル、r1、r2、r3を回転行列Rの列ベクトルとします。
問題は、これがほとんどの場合機能しないことです。結果を確認するために、RとtをOpenCVのsolvePnPメソッドで得られたものと比較しました(次の3Dポイント[0,0,0] [0,1,0] [1,0,0] [1,1 、0])。
同じように立方体を表示しているので、どの場合でもsolvePnPが正しい結果を提供しますが、ホモグラフィから得られたポーズはほとんど間違っていることに気付きました。
理論的には、私のポイントは同一平面上にあるため、ホモグラフィからポーズを計算することは可能ですが、Hからポーズを計算する正しい方法を見つけることができませんでした。
私が間違っていることについての洞察はありますか?
@Jav_Rockのメソッドを試した後に編集する
こんにちはJav_Rock、あなたの答えに感謝します、私はあなたのアプローチ(そして他の多くのものも同様に)を試しました、それは多かれ少なかれ大丈夫のようです。それでも、4つの同一平面上の点に基づいてポーズを計算するときに、まだいくつかの問題が発生します。結果を確認するために、solvePnPの結果と比較します(反復再射影エラー最小化アプローチにより、はるかに優れています)。
次に例を示します。
- 黄色い立方体:PNPを解く
- ブラックキューブ:Jav_Rockのテクニック
- シアン(およびパープル)キューブ:まったく同じ結果が得られた他のいくつかの手法
ご覧のとおり、黒い立方体は多かれ少なかれ問題ありませんが、ベクトルは正規直交しているように見えますが、バランスが取れていないようです。
EDIT2:(正規直交性を強制するために)計算後にv3を正規化しましたが、いくつかの問題も解決しているようです。
image-processing - OpenCV: ホモグラフィを見つけるための RANSAC 信頼パラメーター
OpenCV 関数findhomography()
は、2 つの画像の一致点間のホモグラフィック変換を見つけます。(定義を参照)
ポイントの一致するサブセットを見つけるために、RANSAC を使用できます。
ここに問題があります: RANSAC を使用する OpenCV の他の関数 (例: (定義findfundamentalMat
を参照)) とは対照的に、信頼のための RANSAC パラメータは変更できません。引数として渡すことができるのは、再投影のしきい値のみです。
私は OpenCV ソースを調べましたがfindhomography()
、信頼性のために 0.995 にハードコードされています。
私の目的のために、これを増やす必要があります。OpenCV ソース自体の値を変更せずにこれを行う方法はありますか?
これをハードコーディングする必要がある理由はありますか?
PS:次のサブバージョンのチケット 1557 の下に変更要求を追加しました。
computer-vision - ホモグラフィから回転行列と平行移動行列を計算するには?
emgucv(C#)でSURFを使用して、1つのカメラで異なる視野角(左右など)で撮影された同じシーンの2つの画像をすでに比較しています。そして、2D 変換用の 3x3 ホモグラフィ マトリックスが得られました。しかし今、これらの 2 つの画像を 3D 環境 (DirectX を使用) で作成したいと考えています。そのためには、2 番目の画像 (右) と 1 番目の画像 (左) の相対的な位置と向きを 3D 形式で計算する必要があります。2番目の画像の回転行列と平行移動行列を計算するにはどうすればよいですか?
2番目の画像のz値も必要です。
「ホモグラヒ分解」というものを読みました。それは方法ですか?
ホモグラフィ分解に精通している人はいますか?それを実装するアルゴリズムはありますか?
助けてくれてありがとう。
opencv - OpenCVホモグラフィ、ポイントを変換、このコードは何をしている?
私はOpenCVによって計算されたホモグラフィを扱っています。現在、このホモグラフィを使用して、以下の関数を使用してポイントを変換しています。この関数は私が必要とするタスクを実行しますが、実際にどのように機能するかはわかりません。
最後の3行のコードの背後にあるロジック/理論を1行ずつ正確に説明できますか?これが点x、yを変換することは理解していますが、なぜこれが機能するのかは不明です:
なぜ はZ
、このようpx
にpy
計算され、 の要素は何にh
対応するのでしょうか?
あなたのコメントは大歓迎です:)
opencv - 固有行列と変換行列を使用した点の射影
現在、C# と emgucv.net を使用して 3D 画像を視覚化するプロジェクトに取り組んでいます。そのプロジェクトでは、同じシーンの 2 つの画像 (回転と移動が少し異なります) で既に行われた次の手順で、
- 特徴検出(SURF)、マッチング、ホモグラフィの計算
- 基本行列を計算する
- 上記の基本行列とカメラ固有行列を使用して基本行列を計算する
- 最後に回転行列と並進行列を計算します
また、符号を変更することにより、R と T のさまざまな組み合わせを使用して、変換行列 (3X4 [R|T]) の 4 つの可能な答えを取得しました。ここで、これら 4 つの回答から正しい変換行列を選択したいと思います。その前に、答えのどちらかが正しいかどうかを確認したいと思います。そのため、「カメラ固有マトリックス」と「変換マトリックス」のそれぞれを使用して、2番目の画像のポイントを再投影する必要があります。その後、結果のポイントと2番目の画像ポイントを比較して、結果(変換マトリックス)を確認できます。
私の質問は、並進行列(回転[3X3]および並進[3X1]行列)とカメラ固有行列を再結合して、emgucv.netを使用してポイントを画像ポイントに投影する方法ですか?
または、取得した変換行列を確認する別の方法はありますか?
助けてくれてありがとう。
android - findHomography (OpenCV for Android) で RANSAC が使用する 5 ポイントを取得する
Android 用の OpenCV では、関数 org.opencv.Calib3d.findHomography(..) が同次変換行列を返します。たとえば、これはホモグラフィのみを返します。
RANSAC が実際に使用するポイントを Android OpenCV API から返す方法はありますか?
opencv - OpenCV を使用した画像のスティッチングに問題がある
現在、Visual Studio 2010 で OpenCV 2.3.1 を使用して画像のスティッチングに取り組んでいますが、問題が発生しています。
問題の説明 数台のカメラ (約 3 ~ 4 台) から取得した複数の画像をスティッチングするためのコードを作成しようとしています。
これまでに行ったことは次のとおりです: (簡単にするために、コードの一部をいくつかの単語に置き換えます)
ステップ 5. では、次のスレッドの回答に従い、いくつかのパラメーターを変更しました: Opencv で 2 つの画像をステッチする
しかし、結果はひどいものです。結果を youtube にアップロードしました。もちろん、リンクを知っている人だけが見ることができます。
私のコードを以下に示します:(重要な部分のみが表示されます)
縫製を良くするために他に何をすればよいですか?
また、ホモグラフィ行列を計算し続けるのではなく固定することは合理的ですか? つまり、2 台のカメラ間の角度と変位を自分で指定して、希望を満たすホモグラフィ行列を導き出すということです。
ありがとう。:)