2021-7-19-点云、点云密度、在matlab中的显示与保存

文章的内容

这个文章主要包含对点云的解释,什么是点云密度?以及点云在matlab2019b中如何加载、显示和保存、计算点云密度。


什么是点云

1 什么是逆向工程?

逆向工程,又称为逆向技术,是产品设计技术再现过程,即对目标产物进行逆向分析及研究,得出目标产物的组织结构、功能特性及技术规格等。逆向工程的主要目的是目标成品进行分析,逆向推导产品设计、制作流程。

2 什么是点云?

点云(Point Cloud),在逆向工程中由测量仪器获取物体表面的点的集合。

每个点云的属性主要包含:三维坐标(xyz)、强度信息(intensity)、颜色(RGB)等信息。

点云的格式包含:las、txt、pcd、ply、pts、xyz等多种格式。

3 点云数据的特点

①数据量大:采样频率高,可以在几秒内获取成千上万的点。

②数据分布不均匀:数据点密度随着离扫描仪器的距离增加而下降,且分布离散。

4 如何获取点云?

激光雷达(Light Detection and Ranging,LiDAR),全称激光探测与测距系统,是主动遥感的一种,由传感器向外发射激光,得到传感器与目标物体之间的传播距离,可分析目标地物表面的反射能量大小与反射波普幅度、频率、相位等信息,对目标定位信息进行精确解算,从而得到目标地物的三维结构信息。常见的商用仪器包含:莱卡(Leica)、瑞格(RIEGL)等。———————《激光雷达森林生态应用——理论、方法及实例》

5 可以在什么软件上加载点云?

免费软件:

CloudCompare,又称为CC,下载地址:CloudCompare - Downloads

点云魔方(PCM),微信公众号:PCM与点云处理,可以下载。

可以实现点云加载、显示、保存、栅格化、以及林业、电力线相关方面的技术实现。

商业软件:

Lidar360,Global Mapper等。

6 点云可以用来干什么?

①可以在农林业上做参数提取、生态分析、建模等。

②在建筑建模、片面分割与分析。

③文物、古建筑的建模、修复与保存。

④数字高程模型的建立与地形分析。

⑤公路与道路的测量与扩建。

⑥电力线的巡检。


点云密度

1 什么是点云密度?

点云密度(Point Cloud Density),是点云的重要属性特征,反应激光点云的空间分布及密集程度,即可以直接反应目标地物的空间分布特点。和遥感影像一样,更多的点(密度高)意味着更高的分辨率,具有更多的信息,较少的点(密度低)意味着信息较少,将会影响信息的提取与处理。

2 点云密度有什么用?

点云密度越大,越可以反应设备的先进性,可以保留更多的地物细节,可以更精确的描述地物的空间特征,这对于地物信息提取、分析具有较大的优势。较少的密度则相反,提取的地物信息可能受损。除此之外,密度过大也意味着数据量很大,也在一定程度上会造成数据冗余,信息冗余,造成数据处理困难等麻烦。

3 计算点云密度

GB/T 36100—2018 机载激光雷达点云数据质量评价指标及计算方法-规范中解读,点云密度为单位面积所具有点的数量,其计算方式如下:

                                                             

 其中ρ 表示点云密度,单位:个/m2;

n为点云总个数;

为第i个水域内点云的个数,单位:个;

A为样地面积,单位:m2;

m为水域个数,单位:个;

为第i个水域面积,单位:m2。

在已知的文献中表明,当点云的密度>3个/平方米,称为高密度,反之则为低密度,<3个/平方米,又称为稀疏型点云数据。————魏金龙,李明阳,赵邑晨,李超,李盈昌.基于稀疏型机载激光雷达数据的风景林参数估测[J].西北林学院学报,2021,36(02):164-171.


点云数据在matlab中的加载、显示、保存

matlab自身携带的function库可以打开pcd、ply、txt、csv格式。

1 加载点云与显示点云

clear all
clc
% 清除所有变量
% 清除命令栏所有信息

%% pcd与ply格式数据加载
% 使用函数pcread,这个函数需要matlab较高的版本才有

% 同样可以加载pcd格式
ptCloud = pcread('teapot.ply');
% 加载出来为matlab的pointCloud格式(结构体struct)
% pcshow可以直接显示
pcshow(ptCloud)
% pcshow还有很多显示的用法,可以不断的尝试

% 可以通过.的形式获取到pointCloud的数据
xyz = ptCloud.Location;
% 此时的xyz为n*3格式的数组
% 同样可以采用pcshow显示
pcshow(xyz)

%% txt与csv格式的加载
% txt格式的加载则采用importdata
% 数据的格式可能是n*m,直接使用pcshow会报错
% point = improtdata('点云.txt');
% pcshow(point(:,1:3))


% csv格式采用readtable
% 可能是n*m的形式
% point = readtable('点云');
% 转换数据的格式,由表格的形式转换为数组
% point = table2array(point);
% pcshow(point(:,1:3))

2021-7-19-点云、点云密度、在matlab中的显示与保存_第1张图片

上图即为加载显示的茶壶点云,为matlab的自带数据。

2 其他显示方式

clear all
clc

% scatter3 显示,需要分别读取xyz
ptCloud = pcread('teapot.ply');
% 读取pointCloud结构中的xyz值
xyz =  ptCloud.Location;
% 使用scatter3显示
scatter3(xyz(:,1),xyz(:,2),xyz(:,3),'.')
% 锁定坐标轴
axis equal

% plot3也可以做到同样的事情
plot3(xyz(:,1),xyz(:,2),xyz(:,3),'.')
axis equal

2021-7-19-点云、点云密度、在matlab中的显示与保存_第2张图片

 3 点云的保存

clear all
clc

% 可以用pcwrite进行保存pcd、ply格式
% save保存txt格式,如果是双精型,则需要添加'-double',详细见帮助文档
% csv格式用writetable
% 这里不在做更多的演示

 4 点云密度的计算

通过GB/T 36100—2018 机载激光雷达点云数据质量评价指标及计算方法-规范计算。

clear all
clc

% 读取matlab自带的点云文件
ptCloud = pcread('teapot.ply');
% 读取点云xyz值
xyz = ptCloud.Location;
% 凸包计算茶壶的二维占地面积
% 凸包需要双精型,读取的xyz为单精
xyz = double(xyz);
% K返回边界索引,V返回面积
[K,V] = convhull(xyz(:,1),xyz(:,2));
% size和length都可查看点云的数量,这里以size为例
% n和m返回点云的行和列
[n,m] = size(xyz);
% n行就是点云的数量
% 由于无水域区域,所以点云的密度为总数量/面积
p =  n/V;

此外还有距离密度,这个即为每个离它最邻近点的距离的平均值

clear all
clc

% 读取matlab自带的点云文件
ptCloud = pcread('teapot.ply');
% 读取点云xyz值
xyz = ptCloud.Location;
% 通过knnsearch即‘k'临近计算xyz集合里面每个点离xyz集合里面的最近点
% 由于第一个搜索的点是他本身,所以k临近个数选择了2
[idx,d] = knnsearch(xyz,xyz,'k',2);
% idx是最邻近点的索引项,用不到;d是每个点离它最邻近点的距离值
% 计算平均距离,即距离密度,单位:m
p = mean(d(:,2));

5 其他备注

las格式matlab也可以加载,但是matlab本身不具有加载的function,需要在github上下载,LASreadAll等。

后续博主将不定时间持续更新,包含点云文献阅读、林业点云数据处理、点云相关知识介绍等。

你可能感兴趣的:(#,点云处理-matlab,matlab)