我们有一款ELP 1.0 Megapixel双镜头USB立体相机,正在尝试使用OpenCV 3.1在C++中进行校准。然而,校准的结果完全无法使用,因为调用stereoRectify会完全扭曲图像。我们的操作如下:在两个相机中找到校准(棋盘)模式,棋盘大小为5x7,无论拍摄的图像数量如何,结果几乎相同。
所有的棋盘都被正确地检测到,这已经得到验证。
然后我们分别对每个摄像头进行校准(但这一步似乎对立体校准不重要),但我们可以用它来验证每个摄像头的效果。
结果是完全失真的图像。正如我在开始时所说,所有的校准/棋盘格模式都被正确地检测到了,如果我们不调用stereoRectify函数,畸变校正后的图像(经过重新映射)看起来完美无缺。问题出现在我们调用stereoRectify函数时。
我们有什么遗漏的吗?校准图像的数量似乎没有任何影响(有时候拍摄2张图像比拍摄10张图像提供更好的结果(但仍然无法使用))。
这是校准图案的示例。我们采取了几种不同的方向: 如果我们不调用stereoRectify,这是校准的结果:
如果我们调用stereoRectify,这是错误的结果(但大多数情况下它会变得更糟):
提前感谢任何帮助找到问题所在。
findChessboardCorners(img[k], boardSize, corners, CALIB_CB_ADAPTIVE_THRESH | CALIB_CB_NORMALIZE_IMAGE)
cornerSubPix(img[k], corners, Size(11, 11), Size(-1, -1), TermCriteria(TermCriteria::COUNT+TermCriteria::EPS, 30, 0.01));
所有的棋盘都被正确地检测到,这已经得到验证。
drawChessboardCorners(img[k], boardSize, corners, bFound);
然后我们分别对每个摄像头进行校准(但这一步似乎对立体校准不重要),但我们可以用它来验证每个摄像头的效果。
calibrateCamera(objectPoints, imagePoints[k], Size(320, 240), cameraMatrix[k], distCoeffs[k], rvecs, tvecs, 0)
然后我们进行立体校准
stereoCalibrate(objectPoints, imagePoints[0], imagePoints[1], cameraMatrix[0], distCoeffs[0], cameraMatrix[1], distCoeffs[1],
Size(320, 240), R, T, E, F, CALIB_USE_INTRINSIC_GUESS);
计算矫正变换
stereoRectify(cameraMatrix[0], distCoeffs[0], cameraMatrix[1], distCoeffs[1], Size(320, 240), R, T, R1, R2, P1, P2, Q,
CALIB_ZERO_DISPARITY, 1, Size(320, 240), &validRoI[0], &validRoI[1]);
初始化重映射地图
Mat rmap[2][2];
initUndistortRectifyMap(cameraMatrix[0], distCoeffs[0], R1, P1, Size(FRAME_WIDTH, FRAME_HEIGHT), CV_16SC2, rmap[0][0], rmap[0][1]);
initUndistortRectifyMap(cameraMatrix[1], distCoeffs[1], R2, P2, Size(FRAME_WIDTH, FRAME_HEIGHT), CV_16SC2, rmap[1][0], rmap[1][1]);
...
remap(img, rimg, rmap[k][0], rmap[k][1], INTER_LINEAR);
imshow("Canvas", rimg);
结果是完全失真的图像。正如我在开始时所说,所有的校准/棋盘格模式都被正确地检测到了,如果我们不调用stereoRectify函数,畸变校正后的图像(经过重新映射)看起来完美无缺。问题出现在我们调用stereoRectify函数时。
我们有什么遗漏的吗?校准图像的数量似乎没有任何影响(有时候拍摄2张图像比拍摄10张图像提供更好的结果(但仍然无法使用))。
这是校准图案的示例。我们采取了几种不同的方向: 如果我们不调用stereoRectify,这是校准的结果:
![输入图像描述](https://istack.dev59.com/Ctv6M.webp)
![输入图像描述](https://istack.dev59.com/QzupO.webp)