主要内容

本页采用了机器翻译。点击此处可查看英文原文。

undistortPoints

校正镜头畸变的点坐标

说明

undistortedPoints = undistortPoints(points,cameraParams) 返回经过镜头畸变校正后的点坐标。该函数采用数值非线性最小二乘优化方法。

[undistortedPoints,reprojectionErrors] = undistortPoints(points,cameraParams) 还会返回用于评估未去畸变点精度的误差值。

示例

示例

全部折叠

创建一个包含标定图像的 imageDatastore 对象。

images = imageDatastore(fullfile(toolboxdir("vision"),"visiondata", ...
   "calibration","mono"));
imageFileNames = images.Files;

检测标定图案。

[imagePoints,patternDims] = detectCheckerboardPoints(imageFileNames);

生成正方形各角点的世界坐标。正方形的尺寸以毫米为单位。

squareSize = 29; % millimeters
worldPoints = patternWorldPoints("checkerboard",patternDims,squareSize);

标定相机。

I = readimage(images,10); 
imageSize = [size(I, 1), size(I, 2)];
params = estimateCameraParameters(imagePoints,worldPoints,ImageSize=imageSize);
intrinsics = params.Intrinsics;

加载一个图像并检测棋盘格上的点。

points = detectCheckerboardPoints(I);

对点进行去畸变

undistortedPoints = undistortPoints(points,intrinsics);

去畸变图像。

[J, newIntrinsics] = undistortImage(I,intrinsics,OutputView="full");

平移去畸变的点

newOrigin = intrinsics.PrincipalPoint - newIntrinsics.PrincipalPoint;
undistortedPoints = [undistortedPoints(:,1) - newOrigin(1), ...
                     undistortedPoints(:,2) - newOrigin(2)];

显示结果

figure; 
imshow(I); 
hold on;
plot(points(:,1),points(:,2),"r*-");
title("Detected Points"); 
hold off;

Figure contains an axes object. The hidden axes object with title Detected Points contains 2 objects of type image, line.

figure; 
imshow(J); 
hold on;
plot(undistortedPoints(:,1),undistortedPoints(:,2),"g*-");
title("Undistorted Points"); 
hold off;

Figure contains an axes object. The hidden axes object with title Undistorted Points contains 2 objects of type image, line.

输入参数

全部折叠

输入点,指定一个 M 行 2 列的矩阵,其中包含 M 个 [x y] 坐标。

相机参数,指定为 cameraParameterscameraIntrinsicscameraIntrinsicsKB 对象。您可以使用 estimateCameraParameters 函数返回 cameraParameters 对象。cameraParameters 对象包含相机的内参、外在和镜头畸变参数。

输出参量

全部折叠

未去畸变的点,以 M×2 矩阵的形式返回。undistortedPoints 的输出包含经过镜头畸变校正的 M [x,y] 点坐标。当您输入点 double 时,函数会将 undistortedPoints 输出为 double。否则,它会将 undistortedPoints 作为单词输出。

数据类型: single | double

重投影误差,以 M×1 向量的形式返回。您可以利用这些误差来评估未去畸变点的精度。该函数通过对未去畸变的点施加畸变,然后计算结果与相应输入点之间的距离,从而计算出误差。reprojectionErrors 的输出单位是像素。

扩展功能

全部展开

C/C++ 代码生成
使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。

GPU 代码生成
使用 GPU Coder™ 为 NVIDIA® GPU 生成 CUDA® 代码。

版本历史记录

在 R2014b 中推出

全部展开