天天看點

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