bundleAdjustment

优化相机姿态和3d点

描述

例子

(xyzRefinedPoints,refinedPoses) = bundleAdjustment (xyzPoints,pointTracks,cameraPoses,intrinsic)返回精确的3-D点和相机姿态,以减少重投影误差。改进过程是Levenberg-Marquardt算法的一种变体。3-D点和相机姿态被放置在同一个全局参考坐标系中。

(___,reprojectionErrors) = bundleAdjustment (___)此外返回一个N-元素向量,包含使用前面语法的参数对每个三维世界点的平均重投影误差。

(___) = bundleAdjustment (___,名称,值)使用由一个或多个指定的附加选项名称,值对参数。未指定的属性具有默认值。

例子

全部折叠

加载数据进行初始化。

data =负载(“sfmGlobe”);

完善相机的姿态和点。

[xyzRefinedPoints, refinedPoses] =bundleAdjustment (data.xyzPoints data.pointTracks、data.cameraPoses data.intrinsics);

显示精致的相机姿态和3d世界点。

pcshow (xyzRefinedPoints“VerticalAxis”,“y”,“VerticalAxisDir”,“下来”,“MarkerSize”, 45岁);持有plotCamera (refinedPoses“大小”, 0.1);持有网格

输入参数

全部折叠

未细化的3-D点,指定为的-乘3矩阵[x,y,z)的位置。

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

相机的姿势ViewId,取向,位置信息,指定为一个三列表。控件中的id与视图id相关pointTracks对象。方向被指定为3×3的旋转矩阵。位置被指定为一个三元素向量。

摄像机内在特性,指定为标量或元组cameraIntrinsics对象。是相机姿势的数量。当使用同一摄像机捕获图像时,使用标量值。当图像被不同的相机捕获时使用一个矢量。

名称-值对的观点

的可选逗号分隔对名称,值参数。的名字参数名称和价值为对应值。的名字必须出现在引号内。可以按任意顺序指定多个名称和值对参数Name1, Value1,…,的家

例子:“MaxIterations””,50

Levenberg-Marquardt算法停止前的最大迭代次数,指定为逗号分隔的对,由“MaxIterations'和一个正整数。

以像素为单位的均方重投影误差的绝对终止容差,指定为逗号分隔对,由AbsoluteTolerance和一个正标量。

减少迭代之间重投影误差的相对终止容忍度,指定为逗号分隔对,由RelativeTolerance和一个正标量。

表示透镜畸变的标记,指定为逗号分隔的对,由“PointsUndistorted”,要么真正的。当您设置PointsUndistorted,二维点在pointTracks必须从图像与镜头畸变。若要使用未扭曲的点,请使用undistortImage先函数,再设置PointsUndistorted真正的

固定相机姿态的视图id,指定为逗号分隔的对,包括'FixedViewIDs和一个非负整数的向量。的每个ID对应ViewId固定相机的姿势cameraPoses。的空值FixedViewIDs意味着所有的相机姿态是优化的。

显示进度信息,指定为逗号分隔的对,由'详细的”,要么真正的

输出参数

全部折叠

3-D位置的精制世界点,返回作为一个的-乘3矩阵[x,y,z)的位置。

数据类型:|

精致的相机姿势,返回作为一张桌子。表中包含三个列“ViewId”,“定位”,“位置”

重投影错误,作为1的向量。该功能将每个世界点投影回每个相机。然后在每幅图像中,函数计算重投影误差作为被检测点与重投影点之间的距离。的reprojectionErrors向量包含每个世界点的平均重投影误差。

参考文献

[1] Lourakis, m.i.a.和A.A. Argyros。SBA:用于一般稀疏束调整的软件包。关于数学软件的ACM交易。2009.

[2] Hartley, R.和A. Zisserman。计算机视觉中的多视图几何。剑桥大学出版社,2003年。

[3] Triggs, B., P. McLauchlan, R. Hartley, A. Fitzgibbon。“束调整:一个现代的综合。”视觉算法国际研讨会论文集。斯普林格出版社。1999年,页298 - 372。

介绍了R2016a