天天看点

Matlab 2015a 中 pointCloud类相关知识

pointCloud类是Matlab2015a种新引入的一个类,主要用于3D点​​云数据​​的存储与操作,其具有如下属性:

  • Location——3D点坐标,数据格式为M*3矩阵或者M*N*3矩阵
  • Color——3D点的RGB颜色 信息,数据格式同上
  • Normal——3D点的法向量信息,数据格式同上
  • Count——3D点的数量
  • Xlimits——X坐标大小范围
  • Ylimits——Y坐标大小范围
  • Zlimits——Z坐标大小范围

针对Location、Color、Normal中数据格式为M*3或者M*N*3矩阵,在这里做一些解释。

直观而言,三维坐标具有XYZ属性,RGB颜色信息具有RGB值三种属性,法向量则具有XYZ三个方向的向量大小三种属性。

按理说,M*3矩阵就足以用于表达这些信息。事实上,3D点云中M*3矩阵的表达方式在被称为“无序点云”, 而M*N*3矩阵的表达方式被称为“有序点云”。

上图为RGB颜色信息以M*3格式存储时的直观体现。

上图则为RGB颜色信息以M*N*3格式存储时的直观体现。

可以看到,相同的是“3”都是代表R\G\B三个属性,而无序点云以“列向量中上下之间的相对顺序对应点的顺序”,而有序点云则以“矩阵中元素的位置关系表示对应点的顺序”。

pointCloud类的一些基本方法如下:

  • findNearestNeighbors:用于寻找一个点的最近邻的点
  • findNeighborsInRadius:寻找某个距离Radius内的所有近邻点
  • findPointsInROI:寻找ROI中的点,ROI代表region of interest(兴趣区域),ROI格式为3*2矩阵[xmin, xmax; ymin, ymax; zmin, zmax]
  • removeInvalidPoints:去除点云中NaN属性的点,注:调用该函数后有序点会转化为无序点
  • select:按序号选择特定的店,根据有序/无序点云格式输入也不相同
//创建两片点云
  ptCloud1 = pointCloud(rand(100,3,'single'));
  ptCloud2 = pointCloud(1+rand(100,3,'single'));

  minDist = inf;      
//对于ptCloud1中的每一个点,寻找其在ptCloud2中的最近点
for i = 1 : ptCloud1.Count
    point = ptCloud1.Location(i,:);
    [~,dist] = findNearestNeighbors(ptCloud2,point,1);
    if dist < minDist
        minDist = dist;
    end
end