OpenCV StereoRectify искажает изображение

У нас есть мегапиксельная стереофоническая USB-камера с двумя объективами ELP 1.0 и мы пытаемся откалибровать ее, используя OpenCV 3.1 в C ++. Тем не менее, результат калибровки совершенно непригоден для использования, потому что при вызове StereoRectify изображение полностью искажается. Это то, что мы делаем:

Нахождение калибровочного (шахматного) рисунка в обеих камерах, размер шахматной доски 5х7, и результат практически одинаков, независимо от количества сделанных снимков

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:

Это неправильный результат, если мы вызываем StereoRectify (но в основном это намного хуже):

Заранее спасибо за любую помощь, что может быть не так.

Ответы на вопрос(2)

Ваш ответ на вопрос