用Matlab整理图像" camerParams" (计算机视觉系统工具箱)

时间:2014-12-02 15:47:28

标签: image matlab camera-calibration matlab-cvst distortion

我正在研究PIV-Workflow,我正在预处理图像。我需要摆脱图像中的透视失真。我有“图像处理工具箱”和“相机校准器”。我已经用“undistortImage()”摆脱了镜头失真;和cameraParams对象,通过棋盘图案推断出来。

第一个问题:是否可以使用cameraParams对象透视地扭​​曲图像,以便我的棋盘在图像中得到纠正?

第二个问题:由于我无法使用cameraParams对象,我尝试手动使用转换功能。我尝试使用成对的控制点(使用cpselection工具,原始图像和生成的棋盘图像)和fitgeotrans(movingPoints,fixedPoints,'projective');函数来获取我的tform-object。但是我总是收到错误消息:

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

我尝试了很多不同的控制点对(4对或更多)。但我仍然遇到这个错误。我相信我必须忽视这里的一些事情。

感谢任何帮助,谢谢。

斯蒂芬

1 个答案:

答案 0 :(得分:2)

如果您使用其中一个校准图像,那么您需要的所有信息都在cameraParams对象中。

我们假设您正在使用校准图像1,并让它称之为I。 首先,不要失真图像:

I = undistortImage(I, cameraParams);

获取图像的外在(旋转和平移):

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

然后将旋转和平移组合成一个矩阵:

R(3, :) = t;

现在计算棋盘和图像平面之间的单应性:

H = R * cameraParams.IntrinsicMatrix;

使用单应性的逆转换图像:

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

你应该看到一只鸟的眼睛"棋盘的视图。如果您没有使用其中一个校准图像,则可以使用R函数计算textrinsics

另一种方法是使用detectCheckerboardPointsgenerateCheckerboardPoints,然后使用fitgeotform计算单应性。