主要内容

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

pcfitplane

将平面拟合到三维点云

说明

model = pcfitplane(ptCloudIn,maxDistance) 会根据点云数据拟合一个平面,该平面对每个内点到平面的距离均设有最大允许值。该函数返回一个描述该平面的几何模型。

该函数使用 M-估计量样本共识 (MSAC) 算法来求解该平面。MSAC 算法是 RANdom SAmple Consensus (RANSAC) 算法的一种变体。

model = pcfitplane(ptCloudIn,maxDistance,referenceVector) 根据点云拟合一个平面,该点云具有由 1×3 格式的 referenceVector 输入指定的附加方向约束。

model = pcfitplane(ptCloudIn,maxDistance,referenceVector,maxAngularDistance) 会根据指定的最大角距离,将一个平面拟合到点云上。

示例

[model,inlierIndices,outlierIndices] = pcfitplane(___) 还会返回输入点云中内点和外点的线性索引。

[model,inlierIndices,outlierIndices,meanError] = pcfitplane(___) 还会返回内点到模型的距离的均方误差,使用上述任何一种语法均可。

[___] = pcfitplane(___,Name=Value) 支持上述语法中的任何参量组合,且可使用一个或多个名称-值参量指定选项。例如,pcfitplane(ptCloud,maxDistance,referenceVector,maxAngularDistance,Confidence=95) 将找到最大内点数时的置信百分比设置为 95

示例

示例

全部折叠

加载点云。

load("object3d.mat")

显示点云并为图窗标注说明。

figure
pcshow(ptCloud)
xlabel("X(m)")
ylabel("Y(m)")
zlabel("Z(m)")
title("Original Point Cloud")

设置平面拟合的最大点到平面距离(2 厘米)。

maxDistance = 0.02;

设置该平面的法向量。

referenceVector = [0,0,1];

将最大角距离设置为 5 度。

maxAngularDistance = 5;

检测出第一个平面(即桌子),并将其从点云中提取出来。

[model1,inlierIndices,outlierIndices] = pcfitplane(ptCloud,...
            maxDistance,referenceVector,maxAngularDistance);
plane1 = select(ptCloud,inlierIndices);
remainPtCloud = select(ptCloud,outlierIndices);

设置感兴趣区域,以限定对第二平面(左侧壁)的搜索范围。

roi = [-inf,inf;0.4,inf;-inf,inf];
sampleIndices = findPointsInROI(remainPtCloud,roi);

检测左侧墙体,并将其从剩余的点云中提取出来。

[model2,inlierIndices,outlierIndices] = pcfitplane(remainPtCloud,...
            maxDistance,SampleIndices=sampleIndices);
plane2 = select(remainPtCloud,inlierIndices);
remainPtCloud = select(remainPtCloud,outlierIndices);

将这两个平面和其余点绘制出来。

figure
pcshow(plane1)
title("First Plane")

figure
pcshow(plane2)
title("Second Plane")

figure
pcshow(remainPtCloud)
title("Remaining Point Cloud")

输入参数

全部折叠

点云,指定为 pointCloud 对象。

从内点到该平面的最大距离,以标量值指定。请使用与点云所用单位一致的单位来指定距离。

数据类型: single | double

参考方向约束,指定为一个 1×3 的向量。必须指定此参量,才能使该函数应用方向约束,从而将平面拟合到输入点云上。如果未指定参考向量,该函数将使用平面方程 ax + by + cz + d = 0 来拟合模型。

数据类型: single | double

拟合平面的法向量与参考方向之间的最大绝对角距离,以度为单位的标量值表示。

数据类型: single | double

名称-值参数

全部折叠

将可选参量对组指定为 Name1=Value1,...,NameN=ValueN,其中 Name 是参量名称,Value 是对应的值。名称-值参量必须出现在其他参量之后,但对各个参量对组的顺序没有要求。

示例: pcfitplane(ptCloud,maxDistance,referenceVector,maxAngularDistance,Confidence=95) 将用于确定最大内点数目的置信度百分比设置为 95

输入点云中待采样点的线性索引,指定为一个列向量。空向量意味着在 RANSAC 迭代中,所有点都是用于拟合平面的采样候选项。当您指定一个子集时,仅对该子集中的点进行采样以拟合模型。

提供一组子集点可以显著加快处理速度并减少尝试次数。您可以使用 pointCloud 对象的 findPointsInROI 对象函数来生成索引向量。

用于查找内点的随机尝试的最大次数,指定为一个正整数。增加该值可提高输出的稳健性,但会增加额外的计算量。

找到最大内点数的置信百分比,指定为范围在 (0 100) 内的数值标量。增加该值可提高输出的稳健性,但会增加额外的计算量。

输出参量

全部折叠

平面的几何模型,以 planeModel 对象的形式返回。

当输入点云中包含的有效点不足,或者函数无法找到足够多的内点时,输出模型的系数将被设为零。

输入点云中内点的位置的线性坐标,以列向量形式返回。

输入点云中离群点的线性坐标,以列向量形式返回。

内点到模型的距离的均方误差,以标量值形式返回。

参考

[1] Torr, P. H. S., and A. Zisserman. “MLESAC: A New Robust Estimator with Application to Estimating Image Geometry.” Computer Vision and Image Understanding. 2000.

扩展功能

全部展开

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

版本历史记录

在 R2015b 中推出