2

写真上で選択した項目の 3D 位置を取得できるように、各ピクセルの 3D 位置を取得するために深度マップを作成したいと考えています。深度データが正しいかどうかを確認するために、MeshLab で視覚化します。

KITTI データセットのステレオ データを使用するので、画像が修正され、各カメラのキャリブレーションが提供されます。

プロセスは次のとおりです。

画像左 + 画像右 --> ステレオ セミグローバル マッチング (SGBM) を使用して視差を計算 --> cv::reprojectImageTo3D() を使用して深度マップを計算し、キャリブレーションのパラメーターとこの関数のおかげで初期化された Q を使用します。

 cv::stereoRectify(cameraMatrix1, distCoeffs1, cameraMatrix2, distCoeffs2, imgSize, R, T, R1, R2, P1, P2, Q);

私の問題は次のとおりです。 ここに画像の説明を入力 ここに画像の説明を入力 ここに画像の説明を入力

道路は大丈夫ですが、看板に歪みがあります。理解できず、パラメータを変更しようとしましたが、成功しませんでした。私はいつもこの歪みを持っています。看板の 3D 位置がうまく計算できなくて困っています。クラシックブロックマッチングも試してみましたが同じで、セミグローバルのものと比べるとあまり良い結果ではありません。

ただし、私の視差は次のようになります(これは私には良いようです): ここに画像の説明を入力

視差計算のパラメーターは次のとおりです。

    StereoSGBM sgbm;
    sgbm.SADWindowSize = 3;
    sgbm.numberOfDisparities = 128;
    sgbm.preFilterCap = 10;
    sgbm.minDisparity = 0;
    sgbm.uniquenessRatio = 10.0;
    sgbm.speckleWindowSize = 100;
    sgbm.speckleRange = 32;
    sgbm.disp12MaxDiff = 1;
    sgbm.fullDP = 1;
    sgbm.P1 = sgbm.SADWindowSize*sgbm.SADWindowSize*4;
    sgbm.P2 = sgbm.SADWindowSize*sgbm.SADWindowSize*32;

    sgbm(gray1, gray2, disp);

なぜそれが起こったのか分かりますか?どうすればそれを解決できますか? 看板の表面をよく平面にしたい。

4

1 に答える 1

0

SGBM パラメーターをいじって少し改善することもできますが、実際にはステレオ データにはノイズが多く、点群で完全に平面のサインが得られるとは期待できません。

標識の 3D 位置を見つけることに関心がある場合は、RGB イメージから標識をセグメント化し、点群内の対応する点を平均化すると、妥当な結果が得られます。

于 2015-07-09T22:40:20.427 に答える