主要内容

findnearestneighbors.

查找点云中的最近邻居

描述

例子

(指数,经销) = findNearestNeighbors (ptCloud,,K)返回指数对于输入点云中的查询点的k最近邻居。ptCloud可以是一个无组织或有组织的点云。使用基于Kd-tree的搜索算法计算查询点的k近邻。

例子

(指数,经销) = findNearestNeighbors (ptCloud,,K,Cammatrix.)返回输入点云中查询点的k近邻。输入点云是由深度相机生成的有组织的点云。利用快速近似k近邻搜索算法确定查询点的k近邻。

该函数使用了摄像机投影矩阵Cammatrix.要了解相邻点之间的关系,因此加速最近的邻居搜索。然而,与基于KD树的方法相比,结果具有较低的精度。

请注意

  • 此语法仅支持由RGB-D传感器产生万博1manbetx的有组织的点云数据。

  • 您可以使用estimateCameraMatrix对给定点云数据进行相机投影矩阵的估计。

(指数,经销) = findNearestNeighbors (___,名称,值)除了前面语法中的输入参数外,还使用一个或多个名称-值参数指定选项。

例子

全部收缩

将一组3-D坐标点加载到工作区中。

负载('xyzpoints.mat');

创建点云对象。

ptCloud = pointCloud (xyzPoints);

指定一个查询点和要标识的最近邻居的数目。

点= [0,0,0];k = 220;

得到指标和K个最近邻点的距离。

[指标,经销]= findNearestNeighbors (ptCloud点K);

显示点云。绘制查询点及其最近的邻居。

图pcshow (ptCloud)plot3(点(1),(2),(3),“* r”) plot3 (ptCloud.Location(指标,1),ptCloud.Location(指标,2),ptCloud.Location(指标,3),'*')传说(“点云”,“查询点”,'最近的邻居','地点',“southoutside”,'颜色',[1 1 1])保持关闭

利用相机投影矩阵,在有组织的点云数据中找到查询点的k近邻。从采样点云数据点及其对应的图像点坐标计算摄像机投影矩阵。

将组织好的点云数据加载到工作区中。点云是使用Kinect深度传感器生成的。

ld =负载(“object3d.mat”);ptCloud = ld.ptCloud;

指定采样点云数据的步长。

stepsize = 100;

对输入点云进行采样,并将采样后的三维点坐标存储为点云对象。

指数= 1:stepSize: ptCloud.Count;tempPtCloud =选择(ptCloud、指标);

从采样点云中移除无效点。

[tempptcloud,validindices] = removeInvalidPoints(tempptcloud);

定义输入点云的三维世界点坐标。

worldPoints = tempPtCloud.Location;

找到与输入点云的3-D点坐标对应的2-D图像坐标。

[y,x] = IND2SUB([大小(PTCloud.Location,1),大小(PTCloud.Location,2)],指数);imagePoints = [x(validindices)'y(validindices)'];

从图像和世界点坐标估计相机投影矩阵。

camMatrix = estimateCameraMatrix (imagePoints worldPoints);

指定一个查询点和要标识的最近邻居的数目。

点= [0.4 0.3 0.2];k = 20;

使用相机投影矩阵找到k最近相邻点的索引和距离。使用点云方法选择获取最近邻居的点云数据。

[指标,经销]= findNearestNeighbors (ptCloud,点K camMatrix);ptCloudB =选择(ptCloud、指标);

显示点云和查询点的最近邻居。

图pcshow (ptCloud)pcshow(ptcloudb.location,'ob')传说(“点云”,'最近的邻居','地点',“southoutside”,'颜色',[1 1 1])保持关闭

输入参数

全部收缩

点云,指定为apointcloud.目的。

请注意

该函数支持仅从RGB-D传万博1manbetx感器生成的组织点云数据。

查询点,指定为一个三个元素的形式向量(x,y,z]

最近邻居的数目,指定为正整数。

摄像机投影矩阵,指定为4×3矩阵,将3-D世界指向2-D图像点。你可以计算Cammatrix.通过使用estimateCameraMatrix函数。

名称值对参数

指定可选的,以逗号分隔的对名称,值论点。的名字参数name和是相应的价值。的名字必须出现在引号内。您可以以任何顺序指定多个名称和值对参数name1,value1,...,namen,valuen

例:findnearestneighbors(ptcloud,point,k,'sort',true)

排序指数,指定为逗号分隔的对'分类'和一个逻辑标量。当你设置时分类真正,返回的指数根据查询点的距离以升序排序。关闭排序,设置分类

要检查的叶节点数量,指定为逗号分隔对“MaxLeafChecks”和一个整数。将此值设置为时INF.,搜索整个树。搜索整个树后,它会产生精确的搜索结果。增加叶节点的数量来检查精度,但降低了效率。

请注意

名称值参数“MaxLeafChecks”仅使用基于KD-Tree的搜索方法有效。

输出参数

全部收缩

存储点的指数,作为列向量返回。矢量包含存储在点云中的最近邻居的K线性指标。

查询点的距离,作为列向量返回。矢量包含查询点与其最近邻居之间的欧几里德距离。

参考资料

Muja M.和David G. Lowe。“快速近似最近邻与自动算法配置”。在Visapp国际计算机视觉理论和应用中的国际会议中。2009.331 - 340页。

扩展功能

在R2015A介绍