利用matlab點雲工具處理點雲


利用matlab處理點雲

本文主要分享利用matlab點雲工具的相關模塊來處理點雲,並通過點雲輪廓對點雲體積進行簡單的估計測量。

目錄


1.主要的操作流程圖

Created with Raphaël 2.1.0 .ply點雲文件 讀入點雲數據 顯示點雲數據 獲取點雲輪廓 求得點雲所占體積 結束處理

2、具體流程

2.1 點雲的讀入和顯示

假設有一個名為pointcloud.ply的點雲文件。——ply格式簡介

pc = pcread('path\pointcloud.ply'); %讀入點雲文件
pcshow(pc)                      %顯示點雲

這里需要注意.ply文件中頭文件類似這樣的格式:

element vertex 12
property float x
property float y
property float z
property uchar blue
property uchar green
property uchar red

其中x,y,x是三維點雲的空間坐標,后面的b,g,r代表每個點的顏色,后一項目對於紋理映射和顯示很重要,可以分別提取出來,隨后用pcshow來顯示;

pcread讀入的文件后生成

   Location: [850554×3 single]
       Color: [850554×3 uint8]
      Normal: [850554×3 single]
       Count: 850554
     XLimits: [6.5701 15.5542]
     YLimits: [-1.5363 4.2114]
     ZLimits: [-15.7035 0.2691]

我們可以提取出其中的位置和顏色來進行紋理映射並畫圖

figure(1) 
pc_tmp(:,1) = pc.Location(:,3);     %調整點雲的方位的和xyz軸
pc_tmp(:,2) = pc.Location(:,1);
pc_tmp(:,3) = pc.Location(:,2);
pc_col = pc.Color
pcshow(pc_tmp,pc.Color)

這里利用CMVS/PMVS方法生成的點雲數據作為例子:
matlab中點雲的讀入與顯示


2.2 點雲的處理

為了求得這一建築物的體積,通過獲得這一建築物的輪廓包絡來得到其體積。主要利用matlab中的alphaShape函數和volum

alphaShape
此函數主要用於從離散的三維空間點雲中提取邊緣並建立對應的包絡:
shp = alphaShape(x,y,z)

主要控制參數有alpha值,用於控制生產輪廓的精細程度(越小越細膩)
‘RegionThreshold’ 忽略生成包絡中的小物體,壓制小物體的閾值體積
‘HoleThreshold’ 填充包絡中的空洞,生成完整的體積形態
- *alphaShape(x,y,z,alpha,’HoleThreshold ‘,xx,’RegionThreshold’,xx)

需要注意的是需要將點雲的位置坐標轉換為雙精度的類型。

x=pc.Location(:,3);y=pc.Location(:,1);z=pc.Location(:,2);%get point out
x = double(x); y=double(y); z= double(z);
    %獲取點雲坐標
alp = 5;region = 0.75;%hole = 1; region = 0.75;
shp = alphaShape(x,y,z,alp);
    %生產點雲的包絡數據
%ref:http://cn.mathworks.com/help/matlab/ref/alphashape.html
plot(shp)
        %顯示點雲包絡
v= volume(shp);
title(['v= 'num2str(v) ,'m3']%計算體積並顯示

這里寫圖片描述 

上圖為生成的點雲包絡(需要仔細條件參數以生成符合需求精度的包絡),通過volum可計算此包絡所占粗略的體積。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM