Quantcast
Channel: OpenCV Q&A Forum - RSS feed
Viewing all articles
Browse latest Browse all 41027

stereoRectify makes strange images distortion

$
0
0
Hello. I am trying to compute point cloud from two cameras. 1. Find chessboard corners using **findChessboardCorners** 2. Calibrate cameras using **stereoCalibrate** 3. Calculate rectify matrix using **stereoRectify** 4. Calculate remap maps using **initUndistortRectifyMap** 5. Remap images And I got a very bad results: ![image description](http://i.imgur.com/hO0QgmD.jpg) It's not so bad like this: ![image description](http://i.imgur.com/mfRUZqL.jpg) Is the any way to fix it? This is my code (also available on [GitHub](https://github.com/Garrus007/Vision3D)): // left - vector of grayscale images from left camera // right - vector of grayscale images from right camera // patternSize - number of chessboard corners StereoCalibData StereoVision::Calibrate(const std::vector& left, const std::vector& right, cv::Size patternSize) { cv::Size imSize; // Images points std::vector imagePointsLeftSingle, imagePointsRightSingle; std::vector> imagePointsLeft, imagePointsRight; // Object points std::vector objectPointsSingle; std::vector> objectPoints; //stereoCalibrate output cv::Mat CM1(3, 3, CV_64FC1), CM2(3, 3, CV_64FC1); //Camera matrix cv::Mat D1, D2; //Distortion cv::Mat R, //Rotation matrix T, //Translation matrix E, //Существенная матрица F; //Фундаментальная матрица //stereoRectify output cv::Mat R1, R2, P1, P2; cv::Mat Q; //1. --------------------------- Find chessboard corners --------------------------------------------------------------- for (int i = 0; i < left.size(); i++) { //Finding chessboard corners bool isFoundLeft = cv::findChessboardCorners(left[i], patternSize, imagePointsLeftSingle, CV_CALIB_CB_ADAPTIVE_THRESH | CV_CALIB_CB_FILTER_QUADS); bool isFoundRight = cv::findChessboardCorners(right[i], patternSize, imagePointsRightSingle, CV_CALIB_CB_ADAPTIVE_THRESH | CV_CALIB_CB_FILTER_QUADS); imSize = left[i].size(); cornerSubPix(left[i], imagePointsLeftSingle, cv::Size(11, 11), cv::Size(-1, -1), cv::TermCriteria(CV_TERMCRIT_EPS + CV_TERMCRIT_ITER, 30, 0.1)); cornerSubPix(right[i], imagePointsRightSingle, cv::Size(11, 11), cv::Size(-1, -1), cv::TermCriteria(CV_TERMCRIT_EPS + CV_TERMCRIT_ITER, 30, 0.1)); //Sometimes chessboard corners are found in bad direction (vertically lines), so I "rotate" them _fixChessboardCorners(imagePointsLeftSingle, patternSize); _fixChessboardCorners(imagePointsRightSingle, patternSize); //Add to the corners vectors imagePointsLeft.push_back(imagePointsLeftSingle); imagePointsRight.push_back(imagePointsRightSingle); } //2. --------------------------- Compute object points ------------------------------------------------------------------ for (int j = 0; j

Viewing all articles
Browse latest Browse all 41027

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>