主要内容

estimateGeometricTransform3D

从匹配点对估计三维几何变换

描述

例子

tform= estimateGeometricTransform3D (matchedPoints1matchedPoints2transformType通过从一组三维点映射匹配点中的内嵌线来估计两组三维点之间的三维几何变换matchedPoints1从另一组3d点到匹配点的嵌线matchedPoints2

tforminlierIndex) = estimateGeometricTransform3D (___另外,返回一个向量,使用前面语法的输入参数将每个匹配点对指定为inlier或离群值。

tforminlierIndex状态) = estimateGeometricTransform3D (___另外,返回一个状态代码,指示函数是否可以估计转换,如果不能,为什么会失败。如果不指定状态如果条件不能产生结果,函数将返回一个错误。

___) = estimateGeometricTransform3D (___名称,值除了前面语法中的任何参数组合外,还使用一个或多个名称-值对参数指定其他选项。例如,“信心”,99年设置查找最大嵌套数的置信值为99

例子

全部折叠

将点云文件加载到工作区中。

ptCloud1 = pcread (“teapot.ply”
ptCloud1 = pointCloud with properties: Location: [41472×3 single] Count: 41472 XLimits: [-3 3.4340] YLimits: [-2 2] ZLimits: [0 3.1500] Color: [] Normal: []
ptCloud1 = pcdownsample (ptCloud1,“随机”, 0.25);

创建一个30度旋转的刚性三维转换对象。

θ= 30;%度Rot = [cosd(theta) sind(theta) 0;...信德(θ)cosd(θ)0;...0 0 1);Trans = [0 0 0];tform = rigid3d(腐烂,反式);

使用转换对象转换点云。

ptCloud2 = pctransform (ptCloud1 tform);

为了引入噪声,在两个点云中添加随机点。

noise1 =重新调节(rand (1000 3), 2, 2);ptCloud1 = pointCloud ([ptCloud1.Location; noise1]);noise2 =重新调节(rand (1000 3), 2, 2);ptCloud2 = pointCloud ([ptCloud2.Location; noise2]);

想象嘈杂的点云。

图pcshowpair (ptCloud1 ptCloud2)标题(“添加噪音的点云”

从点云中提取匹配点。

matchedPoints1 = ptCloud1.Location;matchedPoints2 = ptCloud2.Location;

估计点云之间的刚性变换。

[tformEst, inlierIndex] = estimateGeometricTransform3D (matchedPoints1,...matchedPoints2,“刚性”);

提取内嵌点。

inliersPtCloud1 = transformPointsForward (tformEst matchedPoints1 (inlierIndex:));inliersPtCloud2 = matchedPoints2 (inlierIndex:);

可视化对齐点云的内层。

图firstPtCloud = pointCloud(inliersPtCloud1);secondPtCloud = pointCloud (inliersPtCloud2);pcshowpair (firstPtCloud secondPtCloud)标题(“点云对齐”

输入参数

全部折叠

第一组匹配的三维点,指定为- × 3矩阵,其中每一行是(xyz)坐标和为匹配点的个数。

第二组匹配的三维点,指定为- × 3矩阵,其中每一行是(xyz)坐标和为匹配点的个数。

转换类型,指定为“刚性”“相似”.每个转换类型都需要最少数量的匹配点对来估计一个转换。通常可以通过使用更多匹配的点对来提高转换的准确性。该表显示了与每个转换类型相关联的对象类型,以及转换所需的匹配点对的最小数目。

transformType tform对象 匹配点对的最小数目
“刚性” rigid3d 3.
“相似” affine3d 3.

数据类型:字符串

名称-值参数

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

例子:“信心”99设置查找最大嵌套数的置信值为99

最大随机试验数,指定为逗号分隔对,由“MaxNumTrials”一个正整数。该值指定函数寻找匹配点对的随机尝试次数。指定较高的值会导致函数执行额外的计算,从而增加查找嵌套的可能性。

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

查找由逗号分隔的对组成的最大嵌套数的置信度“信心”以及在(0,100)范围内的正数值标量。增加这个值会导致函数执行额外的计算,这增加了找到更多嵌套的可能性。

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

从一个点到对应点的投影的最大距离,指定为由逗号分隔的对组成“MaxDistance”和一个正数标量。“MaxDistance”指定一个点与被视为嵌套点的相应点的投影位置之间的最大距离(以像素为单位)。相应的投影是基于估计变换的。

该函数检查从的转换matchedPoints1matchedPoints2,然后计算应用变换后的每对匹配点之间的距离。如果一对匹配点之间的距离大于“MaxDistance”值,则将该对视为该转换的离群值。如果距离小于“MaxDistance”,则认为这一对是嵌套。

匹配点显示在图像1和图像2中。图1显示了图2中的点投影到图1上。

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

输出参数

全部折叠

几何变换,返回为affine3d或者一个rigid3d对象。

返回的几何变换矩阵映射内嵌线matchedPoints1到内嵌matchedPoints2.方法指定的转换类型指定的对象transformType输入参数。

transformType tform
“刚性” rigid3d
“相似” affine3d

状态代码,返回为01,或2.状态代码指示函数是否可以估计转换,如果不能,为什么会失败。

价值 描述
0 没有错误
1 matchedPoints1matchedPoints2输入没有包含足够的点
2 没有找到足够的内层

如果不指定状态代码输出时,如果函数不能产生结果,则返回一个错误。

数据类型:int32

Inliers,作为一个逻辑向量点对。每个元素要么包含一个逻辑上的真,1,表示点对是嵌套或逻辑错误,0,表示点对是离群值。

算法

该函数使用m估计样本一致性(MSAC)算法排除异常值。MSAC算法是随机样本共识(RANSAC)算法的一种变体。由于MSAC算法的随机性质,每次运行的结果可能不相同。

参考文献

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

Torr, p.h.s.和A. Zisserman。“MLESAC:一种新的用于估计图像几何的鲁棒估计器”。计算机视觉与图像理解78年,没有。1(2000年4月):138-56。https://doi.org/10.1006/cviu.1999.0832。

扩展功能

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

介绍了R2020b