Rectify an Image with Matlab's “camerParams” (Computer Vision System Toolbox)

僤鯓⒐⒋嵵緔 提交于 2019-12-11 14:47:09

问题


I'm working on a PIV-Workflow and I'm currently pre-processing the images. I need to get rid of the perspective distortion in the images. I do have the "image processing toolbox" and the "camera calibrator". I already got rid of the lens distortion with "undistortImage();" and the cameraParams object, which is inferred through a chessboard pattern.

First Question: Is it possible to use the cameraParams object to distort the image perspectively, so that my chessboard is rectified in the image?

Second Question: Since I were not able to use the cameraParams object, I tried to use the transformation functions manually. I tried to use pairs of control-points (with cpselection tool, the original image and a generated chessboard-image) and the fitgeotrans(movingPoints, fixedPoints, 'projective'); function to get my tform-object. However I always get the error message:

Error using fitgeotrans>findProjectiveTransform (line 189)
At least 4 non-collinear points needed to infer projective transform.
Error in fitgeotrans (line 102)
        tform = findProjectiveTransform(movingPoints,fixedPoints);

I tried a lot of different pairs of control-points (4 pairs or more). But I'm still getting this error. I believe I must overlook something here.

Any help is appreciated, thank you.

Stephan


回答1:


If you are using one of the calibration images, then all the information you need is in the cameraParams object.

Let's say you are using calibration image 1, and let's call it I. First, undistort the image:

I = undistortImage(I, cameraParams);

Get the extrinsics (rotation and translation) for your image:

R = cameraParams.RotationMatrices(:,:,1);
t = cameraParams.TranslationVectors(1, :);

Then combine rotation and translation into one matrix:

R(3, :) = t;

Now compute the homography between the checkerboard and the image plane:

H = R * cameraParams.IntrinsicMatrix;

Transform the image using the inverse of the homography:

J = imwarp(I, projective2d(inv(H)));
imshow(J);

You should see a "bird's eye" view of the checkerboard. If you are not using one of the calibration images, then you can compute R and t using the extrinsics function.

Another way to do this is to use detectCheckerboardPoints and generateCheckerboardPoints, and then compute the homography using fitgeotform.



来源:https://stackoverflow.com/questions/27253431/rectify-an-image-with-matlabs-camerparams-computer-vision-system-toolbox

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!