問題タブ [disparity-mapping]
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.
c++ - AVX2 Winner-Take All Disparity Search
AVX2 を使用して、視差推定アルゴリズムの「勝者総取り」部分を最適化しています。私のスカラー ルーチンは正確ですが、QVGA 解像度と 48 視差では、私のラップトップでは実行時間が 14 ミリ秒と残念なほど遅くなります。LR 視差画像と RL 視差画像の両方を作成しますが、簡単にするために、ここでは RL 検索のコードのみを含めます。
私のスカラールーチン:
AVX2 を使用する私の試み:
Disparity Space Image (DSI) のサイズは HxWxD (320x240x48) で、各行のサイズが WxD になるように、メモリ アクセスを改善するために水平に配置します。
Disparity Space Image には、ピクセルごとのマッチング コストがあります。これを単純なボックス フィルターで集約して、まったく同じサイズの別の画像を作成しましたが、合計コストは、たとえば 3x3 または 5x5 ウィンドウでした。この平滑化により、結果がより「ロバスト」になります。asPtr でアクセスしているときは、この集計コスト イメージにインデックスを付けています。
また、不要な計算を節約するために、マスク半径によってオフセットされた行で開始および終了しています。このマスク半径は、私の国勢調査マスクの半径です。派手な境界反射を行うこともできますが、この境界の不一致を気にしない方が簡単で高速です。もちろん、これは最初と最後の列にも当てはまりますが、アルゴリズム全体を列が 16 の倍数 (例: QVGA: 320x240) である画像に対してのみ実行するように強制している場合、ここでインデックスをいじるのは良くありません。単純にインデックスを作成し、すべてを SIMD でヒットします (残差スカラー処理なし)。
また、私のコードがごちゃごちゃしていると思われる場合は、高度に最適化された OpenCV ステレオ アルゴリズムを確認することをお勧めします。私はそれらを不可能だと思っており、それらをほとんどまたはまったく使用することができませんでした.
コードはコンパイルされますが、実行時に失敗します。VS 2012 Express Update 4 を使用しています。デバッガーで実行すると、洞察を得ることができません。私は組み込み関数の使用に比較的慣れていないため、デバッグ時にどのような情報が表示されるか、レジスターの数、__m256i 変数を表示する必要があるかどうかなど、よくわかりません。
以下のコメントのアドバイスに注意して、よりスマートなインデックス作成を使用して、スカラー時間を ~14 から ~8 に改善しました。私の CPU は i7-4980HQ で、同じファイルの別の場所で AVX2 組み込み関数を正常に使用しています。
opencv - opencv結果の相関ベースの視差マップは十分に満足のいくものではありません
正規化された相互相関式を使用して、ツカバの 2 つの修正された画像間の視差を見つけました。
範囲 x=-15:1:15 で水平方向に検索し、範囲 y=-1:1:1 で垂直方向に 9x9 のサイズの長方形のウィンドウを使用して検索しました。
次に、(x,y)
その最大化された相関について、その視差は次のよう(i,j)
に計算されましdisparity(i,j)=sqrt( x^2 +y^2 )
た。
これは私が得る視差画像です:
これは、グラウンド トゥルースの視差マップほど満足のいくものではありません。
結果を向上させるために実行しなければならない後処理はありますか?
前もって感謝します。
opencv - 視差マップから構築された 2 つの点群を組み合わせる
回転して動かないステレオペア (2 つの遠近法カメラ) があります。従来のopencvメソッドを使用して、視差マップと透視投影行列Qを見つけました.
これからreprojectImageTo3D()
、2 つの異なるステレオペアの向きで 2 つの点群を作成しました。各雲のカメラの向きを表す角度 (視差マップ) は知っています。
私の質問は、これらの雲をどのように変換 (回転、平行移動) して一致させるかです。背後にある数学は何ですか?
2 つ目の雲の回転を逆回転角度で行えばよいのではないかと単純に考えたのですが、実用上も理論上もうまくいきません。何か案は?
c++ - C++ / OpenCV - 深度マップの問題: ポイント クラウド内のアイテムに歪みがある
写真上で選択した項目の 3D 位置を取得できるように、各ピクセルの 3D 位置を取得するために深度マップを作成したいと考えています。深度データが正しいかどうかを確認するために、MeshLab で視覚化します。
KITTI データセットのステレオ データを使用するので、画像が修正され、各カメラのキャリブレーションが提供されます。
プロセスは次のとおりです。
画像左 + 画像右 --> ステレオ セミグローバル マッチング (SGBM) を使用して視差を計算 --> cv::reprojectImageTo3D() を使用して深度マップを計算し、キャリブレーションのパラメーターとこの関数のおかげで初期化された Q を使用します。
私の問題は次のとおりです。
道路は大丈夫ですが、看板に歪みがあります。理解できず、パラメータを変更しようとしましたが、成功しませんでした。私はいつもこの歪みを持っています。看板の 3D 位置がうまく計算できなくて困っています。クラシックブロックマッチングも試してみましたが同じで、セミグローバルのものと比べるとあまり良い結果ではありません。
ただし、私の視差は次のようになります(これは私には良いようです):
視差計算のパラメーターは次のとおりです。
なぜそれが起こったのか分かりますか?どうすればそれを解決できますか? 看板の表面をよく平面にしたい。
python - この視差マップを改善するにはどうすればよいですか?
視差マップを作成するためのコードに取り組んでいます。
画像をグレースケールに変換してロード/保存する以上の目的でOpenCVを使用したくありません。
これまでのところ、このウェブサイトで説明されているアルゴリズムを実装することができました。絶対差の合計 (SAD) を使用するバージョンのアルゴリズムを使用しています。実装をテストするために、このデータセットのステレオ画像を使用しています。
これが私のコードです:
(SAD ステップで) いくつかのウィンドウ サイズを試しましたが、このような結果やすべて黒の画像が表示され続けます。
私が問題を理解するのに役立つ、または少なくとも正しい方向に私を向けるのに役立つ答えは非常に高く評価されます!
computer-vision - 視差空間画像の意味
Disparity Space Image とは何か説明してもらえますか? どのように構築できますか?