OpenCV stereoRectify distorsiona la imagen

Tenemos una cámara ELP de 1.0 megapíxeles con doble lente estéreo USB y estamos tratando de calibrarla usando OpenCV 3.1 en C ++. Sin embargo, el resultado de la calibración es totalmente inutilizable, porque llamar a stereoRectify tuerce totalmente la imagen. Esto es lo que hacemos:

Al encontrar el patrón de calibración (tablero de ajedrez) en ambas cámaras, el tamaño del tablero de ajedrez es 5x7 y el resultado es casi el mismo independientemente de la cantidad de imágenes tomadas

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));

Todos los tableros de ajedrez se detectan correctamente y se verifican con

drawChessboardCorners(img[k], boardSize, corners, bFound);

Luego calibramos cada cámara por separado (pero este paso parece no ser importante para la calibración estéreo), pero podemos usarlo para verificar cada cámara por separado

calibrateCamera(objectPoints, imagePoints[k], Size(320, 240), cameraMatrix[k], distCoeffs[k], rvecs, tvecs, 0)

Luego hacemos calibración estéreo

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);

Calcule la transformación de rectificación

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]);

Inicializar mapas para reasignar

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);

El resultado es una imagen totalmente distorsionada. Como dije al principio, todos los patrones de calibración / tablero de ajedrez se detectan correctamente y si no llamamos a la función stereoRectify, las imágenes no distorsionadas (después de la reasignación) se ven perfectas. El problema surge si llamamos a la función stereoRectify.

¿Hay algo que nos perdimos? El número de imágenes de calibración no parece tener ningún efecto (a veces, tomar 2 imágenes proporciona un mejor resultado (pero aún no se puede usar) que 10 imágenes)

Este es el ejemplo del patrón de calibración. Tomamos varias orientaciones diferentes:

Este es el resultado de la calibración si no llamamos stereoRectify:

Este es el resultado incorrecto si llamamos stereoRectify (pero sobre todo empeora):

Gracias de antemano por cualquier ayuda que pueda estar mal.

Respuestas a la pregunta(2)

Su respuesta a la pregunta