写真上で選択した項目の 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);
なぜそれが起こったのか分かりますか?どうすればそれを解決できますか? 看板の表面をよく平面にしたい。