# Undistort image before estimating pose using solvePnP

I have to estimate the pose of the camera using a known marker. The camera is calibrated and I have all the calibration coefficients.

The current version of the algorithm extracts 4 co-planar points from the frame and uses them to estimate the pose using the solvePnP function.

The algorithms seems to work fine but I have a doubt. Since the solvePnP takes as input also the calibration coefficients, do I need to undistort the image before looking the 4 points?

In the following code, are the initUndistortRectifyMap/remap functions necessary?

while(1) {

frame = camera->getFrame();

imshow("frame", frame);

// Estimation of Map1 and Map2 for image rectification (to be done only on the first iteration)
if (initRectifyMap_flag)
{
// Rectify the image
// The initialization of the Rectification Parameters will be carried out only at the first frame.
initUndistortRectifyMap(cameraMatrix, distCoeffs, Mat(), getOptimalNewCameraMatrix(cameraMatrix, distCoeffs, frame.size(), 1, frame.size(), 0), frame.size(), CV_16SC2, map1, map2);
initRectifyMap_flag = false;
}

// Remapping of the current frame
remap(frame, src, map1, map2, INTER_LINEAR, BORDER_TRANSPARENT, Scalar::all(255));

// Here is the code for the extraction of the 4 points based on the content of the variable src
...
...

// Pose estimation
solvePnP(Mat(refMarkerPoint), Mat(markerPoints), cameraMatrix, distCoeffs, rvec, tvec,false);

edit retag close merge delete

Sort by ยป oldest newest most voted

Since the solvePnP takes as input also the calibration coefficients, do I need to undistort the image before looking the 4 points?

If you extract your feature points from the unrectified image, you have to pass the distortion coefficients. Otherwise (features from rectified image) you can just pass an empty matrix for the coefficients [this should be your case]

more

Thanks. I got it.

( 2016-07-18 17:48:33 -0600 )edit

Official site

GitHub

Wiki

Documentation