主要内容

triangulateMultiview

世界点的三维位置在多个图像上匹配

描述

例子

worldPoints= triangulateMultiview (pointTrackscameraPosesintrinsic返回3-D世界点的位置,对应于用校准相机拍摄的多个图像中匹配的点。pointTracks指定匹配点的数组。cameraPosesintrinsic分别指定相机的姿态信息和内在特征。该功能不考虑透镜畸变。

worldPointsreprojectionErrors) = triangulateMultiview (___使用前面语法中的所有输入参数返回每个3d世界点的平均重投影错误。

worldPointsreprojectionErrorsvalidIndex) = triangulateMultiview (___另外,返回有效和无效世界点的索引。有效的点位于摄像机前面。

例子

全部折叠

在工作区中加载图像。

imageDir = fullfile (toolboxdir (“愿景”),“visiondata”“structureFromMotion”);图像= imageSet (imageDir);

加载预计算的摄像机参数。

data =加载(fullfile (imageDir“cameraParams.mat”));

获取相机内部参数。

intrinsic = data.cameraParams.Intrinsics;

计算第一张图像的特征。

I = im2gray(读(图片1));我= undistortImage intrinsic);pointsPrev = detectSURFFeatures(我);[featuresPrev, pointsPrev] = extractFeatures(我pointsPrev);

载入相机位置和方向。

负载(fullfile (imageDir“cameraPoses.mat”));

创建一个imageviewset对象。

vSet = imageviewset;vSet = addView (vSet 1 rigid3d(方向(:,:1),地点(1:)),...“点”, pointsPrev);

计算特征和匹配的其余图像。

我= 2:图像。Count I = im2gray(read(images, I)));我= undistortImage intrinsic);点= detectSURFFeatures(我);(特性,分)= extractFeatures(我点);vSet = addView(vSet,i,rigid3d(orientations(:,:,i), locations(i,:)),...“点”分);pairsIdx = matchFeatures (featuresPrev、特性“MatchThreshold”5);vSet = addConnection (vSet,张,我“匹配”, pairsIdx);featuresPrev =功能;结束

找点痕迹。

跟踪= findTracks (vSet);

相机的姿势。

cameraPoses =姿势(vSet);

找到三维世界点。

[xyzPoints、错误]= triangulateMultiview(跟踪、cameraPoses intrinsic);z = xyzPoints (:, 3);Idx = errors < 5 & z > 0 & z < 20;pcshow (xyzPoints (idx:)“VerticalAxis”“y”“VerticalAxisDir”“下来”“MarkerSize”, 30);持有plotCamera (cameraPoses“大小”, 0.2);持有

图中包含一个坐标轴。轴包含51个对象的类型线,文本,补丁,散点。

输入参数

全部折叠

多个图像的匹配点,指定为N元组pointTrack对象。每个元素包含两个或更多的点,匹配多个图像。

摄像机姿态信息,指定为两列或三列表。你可以获得cameraPoses从一个imageviewset对象的提出了对象的功能。

两列的表

描述
ViewID 视图标识符中的pointTrack对象,指定为整数。
AbsolutePose 视图的绝对姿态,指定为rigid3d对象。你可以获得AbsolutePoseimageviewset对象的提出了对象的功能。

三列的表

描述
ViewID 视图标识符中的pointTrack对象,指定为整数。
取向 相机方向,指定为3 × 3旋转矩阵。
位置 摄像机位置坐标,指定为形式为[xyz],并以父轴的数据单位表示。

相机内部,指定为cameraIntrinsics对象或一个元向量的cameraIntrinsics对象。是相机姿态的数量。当所有图像都被同一台相机捕获时,指定一个cameraIntrinsics对象。当图像被不同的相机捕获时,指定一个向量。

输出参数

全部折叠

三维世界点,返回为N3矩阵。每一行代表一个三维世界点,其形式为[xyz].N是三维世界点的数量。

数据类型:|

重投影错误,返回为N元向量。为了计算重投影误差,该函数首先将每个世界点投影回每张图像中。然后,在每个图像中,该函数计算被检测点和重投影点之间的距离。每个元素reprojectionErrors中对应世界点的平均重投影误差worldPoints输出。棋盘格的一个部分,显示在图像中检测到的点与重投影到图像中的三维点的一小段距离。它们之间的距离被标记为重投影误差。

世界点数的有效性,返回为1逻辑向量。有效的点,表示为逻辑的1真正的),位于摄像机前面。无效点,表示为逻辑点0),位于摄像头后面。

世界点相对于相机位置的有效性是通过使用相机矩阵和齐次坐标将世界点投影到图像上来确定的。如果得到的比例因子是正的,世界点是有效的。

提示

在检测这些点之前,先利用利用该方法对图像进行透镜畸变校正undistortImage函数。或者,您可以直接使用undistortPoints函数。

参考文献

哈特利,理查德和安德鲁·齐瑟曼。计算机视觉中的多视图几何。剑桥,英国;纽约;剑桥大学出版社,2003。

介绍了R2016a