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