主要内容

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

estimateExtrinsics

计算已标定相机的位置

自 R2022b 起

说明

camExtrinsics = estimateExtrinsics(imagePoints,worldPoints,intrinsics) 返回相机的外在变换,这是一种三维刚体变换,可用于将世界坐标系中的点转换到相机坐标系中。

示例

示例

全部折叠

创建一组标定图像。

images = imageDatastore(fullfile(toolboxdir("vision"),"visiondata", ...
      "calibration","slr"));

检测图像中的棋盘格角点。

[imagePoints,patternDims] = detectCheckerboardPoints(images.Files);

生成棋盘格图案各角在以图案为中心的坐标系中的世界坐标,该坐标系的左上角位于 (0,0)。正方形的尺寸以毫米为单位。

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

标定相机。

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

将图像加载到新位置。

imOrig = readimage(images,9); 
figure 
imshow(imOrig)
title("Input Image")

Figure contains an axes object. The hidden axes object with title Input Image contains an object of type image.

去畸变图像。

[im,newIntrinsics] = undistortImage(imOrig,intrinsics,OutputView="full");

在新图像中找到参考目标。

[imagePoints,patternDims] = detectCheckerboardPoints(im);

计算新的外参。

camExtrinsics = estimateExtrinsics(imagePoints,worldPoints,newIntrinsics);

计算相机位姿。

camPose = extr2pose(camExtrinsics);
figure
plotCamera(AbsolutePose=camPose,Size=20);
hold on
pcshow([worldPoints,zeros(size(worldPoints,1),1)], ...
  VerticalAxisDir="down",MarkerSize=40);

Figure contains an axes object. The axes object contains 11 objects of type line, text, patch, scatter.

输入参数

全部折叠

点的图像坐标,指定为一个 M×2 数组。该数组包含 M 个 [x, y] 坐标。imagePointsworldPoints 这两个输入必须都为 double,或者都为 single

数据类型: single | double

与图像坐标相对应的世界坐标,指定为一个 M×2 矩阵。imagePointsworldPoints 这两个输入必须都为 double,或者都为 single。该函数假设各点共面,且 z = 0,点数 M 必须至少为 4。

数据类型: single | double

相机内参,指定为 cameraIntrinsicsfisheyeIntrinsicscameraIntrinsicsKB 对象。该对象存储了有关相机内参标定参数的信息,包括镜头畸变参数。

输出参量

全部折叠

相机外参,以 rigidtform3d 对象的形式返回。该对象的 "R""Translation" 属性分别表示相机的方向和位置。

提示

算法

estimateExtrinsics 函数根据 worldPoints 是否被指定为一个 M×2 矩阵,采用两种不同的算法来计算外参。对于共面点,其中 z= 0,使用 M×2 矩阵。

estimateExtrinsics 函数以闭式形式计算单个图像的旋转矩阵和平移向量。在标定过程中,会通过数值方法估计外参,以最大限度地减少所有标定图像的重新投影误差。因此,对其中一张标定图像应用 estimateExtrinsics 函数后,得到的旋转矩阵和平移向量会与标定过程中获得的略有不同。

扩展功能

全部展开

版本历史记录

在 R2022b 中推出

全部展开