次の OpenCV 関数を使用して、カメラのペアの出力の歪みを解消しようとしています。
cv::stereoCalibrate(object_points, image_points_left, image_points_right,cameraMatrixLeft, distCoeffsLeft, cameraMatrixRight, distCoeffsRight,cv::Size(sensor_width, sensor_height),R, T, E, F);
cv::stereoRectify(cameraMatrixLeft, distCoeffsLeft, cameraMatrixRight, distCoeffsRight, cv::Size(sensor_width, sensor_height), R, T, R1, R2, P1, P2, Q);
cv::undistortPoints(src_left, dst_left, cameraMatrixLeft, distCoeffsLeft, R1, P1);
cv::undistortPoints(src_right, dst_right, cameraMatrixRight, distCoeffsRight, R2, P2);
私が理解しているように、この関数cv::undistortPoints
は行列R1
、R2
、P1
およびP2
ステレオ カメラの設定に従って出力を調整する必要があります。つまり、エピポーラ線を画像の y 軸に平行に設定し、画像をトリミングします。
これは正しいです?
ただし、src_left
およびのポイントで実行されるマッピングsrc_right
は「傾斜」しています。つまり、歪みのない出力画像が傾斜し、画像の境界 (特に角の半分) に空白が残ります。この傾きは、回転行列に起因すると考えられR1
、R2
z 軸を中心とした回転に対応しています。
ここに私の質問があります:
- (修正された) 出力画像が画像空間全体を埋めないのはなぜですか?