主要内容

estimateGeometricTransform3D

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

描述

实例

tform= estimateGeometricTransform3D (matchedPoints1,matchedPoints2,transformType)通过从一组三维点映射匹配点中的内联线,估计两组三维点之间的三维几何变换matchedPoints1从另一组三维点到匹配点中的内联线matchedPoints2

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

[tform,inlierIndex,状态) = estimateGeometricTransform3D (___)另外,返回一个状态代码,指示函数是否可以估计转换,如果不能,为什么会失败。如果不指定状态输出时,该函数将返回一个错误,用于无法生成结果的条件。

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

例子

全部折叠

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

ptCloud1 = pcread (“茶壶,铺层”)
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];tform=rigid3d(rot,trans);

使用变换对象变换点云。

ptCloud2=pctransform(ptCloud1,tform);

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

noise1=重缩放(rand(1000,3),-2,2);ptCloud1=点云([ptCloud1.位置;noise1]);noise2=重缩放(rand(1000,3),-2,2);ptCloud2=点云([ptCloud2.位置;noise2]);

想象嘈杂的点云。

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

从点云中提取匹配点。

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

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

[tformEst,inlierIndex]=估计几何变换器3D(匹配点1,...matchedPoints2,“刚性”);

提取内部点。

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

可视化对齐点云的内层。

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

输入参数

全部折叠

第一组匹配的三维点,指定为M-by-3矩阵,其中每行是一组(x,Y,Z)坐标和M是匹配点的数目。

第二组匹配的三维点,指定为M-by-3矩阵,其中每行是一组(x,Y,Z)坐标和M是匹配点的数目。

转换类型,指定为“刚性”“相似”。每个变换类型需要最少数量的匹配点对来估计变换。通常,您可以通过使用更多数量的匹配点对来提高变换的准确性。此表显示了与每个变换类型关联的对象类型以及t转化需要时间。

transformType tform对象 匹配点对的最小数目
“刚性” 刚性三维 3.
“相似” 仿射3d 3.

数据类型:一串

名称值参数

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

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

随机试验的最大数量,指定为逗号分隔对,包括“MaxNumTrials”和一个正整数。此值指定函数随机尝试查找匹配点对的次数。指定更高的值会导致函数执行额外的计算,这会增加查找内联线的可能性。

数据类型:仅有一个的||int8|int16|int32|int64|uint8|uint16|uint32|uint64

查找最大内联线数的置信度,指定为逗号分隔对,由“信心”和范围(01100)内的正数值标量。增加此值会导致函数执行额外的计算,从而增加查找更多内联线的可能性。

数据类型:仅有一个的||int8|int16|int32|int64|uint8|uint16|uint32|uint64

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

该函数检查来自的转换matchedPoints1matchedPoints2,然后计算应用变换后的每对匹配点之间的距离。如果一对匹配点之间的距离大于“最大距离”值,则该对被视为该转换的异常值“最大距离”,则认为这一对是嵌套。

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

数据类型:仅有一个的||int8|int16|int32|int64|uint8|uint16|uint32|uint64

输出参数

全部折叠

几何变换,返回为仿射3d或者一个刚性三维对象。

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

transformType tform
“刚性” 刚性三维
“相似” 仿射3d

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

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

如果不指定状态代码输出时,如果函数无法生成结果,则返回错误。

数据类型:int32

Inliers,作为一个M逻辑向量M点对。每个元素包含一个逻辑true,1.,以指示点对是内联的,或是逻辑假的,0,以指示点对是异常值。

算法

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

参考文献

哈特利,理查德和安德鲁·齐瑟曼。计算机视觉中的多视图几何第二版,英国剑桥 ; 纽约:剑桥大学出版社,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