В настоящее время я делаю калибровку камеры, используя изображение шахматной доски и используя следующие функции OpenCV:
cvFindChessboardCorners();
cvFindCornerSubPix();
cvCalibrateCamera2(...,intrinsic_matrix, distortion_coeffs,NULL,NULL,CV_CALIB_FIX_ASPECT_RATIO);
Затем полученные intrinsic_matrix и distortion_coeffs применяются к изображению с камеры:
initUndistortRectifyMap(intrinsic,distortion,cv::Mat(),
getOptimalNewCameraMatrix(intrinsic,distortion,...),...);
warpPerspective()
Это работает гладко здесь. Но теперь я хочу сделать более простую калибровку, где необходимо исправить только линейное трапецеидальное (означает пространственное) искажение и, возможно, вращение камеры. Нелинейные искажения, вызванные оптикой камеры, можно игнорировать.
Таким образом, в принципе, необходимо корректировать только значения поворота камеры вокруг X, Y и Z монтажного угла. Есть идеи, как это можно сделать? Нужно ли мне вычислять свои собственные intrinsic_matrix и distortion_coeffs, чтобы применить их к вышеприведенным функциям, или в OpenCV есть другие функции для исправления таких искажений?
Задача ещё не решена.
Других решений пока нет …