【第一期:MATLAB点云处理基础】LAS点云数据导入与可视化

在桥梁、道路、建筑物等三维点云处理中,.las 是非常常见的激光雷达点云格式。本文不展开复杂的格式标准,只以 Bridge.las 为例,演示如何在 MATLAB 中完成点云读取、信息查看、可视化和简单裁剪。

准备条件:建议安装 MATLAB Lidar Toolbox,并将 Bridge.las 放在当前 MATLAB 工作路径下。

1. Bridge.las 数据准备

假设当前已经有一个点云文件 Bridge.las。最简单的做法是把它和 MATLAB 脚本放在同一个文件夹中。

复制代码
fileName = "Bridge.las";

如果文件不在当前路径,也可以直接写完整路径:

复制代码
fileName = "D:\PointCloud\Bridge.las";

2. LAS 点云可以理解成什么?

对初学者来说,可以先把 LAS 文件理解为一种专门保存三维点云的文件。它最核心的信息就是每个点的 X、Y、Z 坐标。

有些 LAS 文件还会保存强度、分类、回波信息、颜色和 GPS 时间等属性。但本文先不展开这些内容,重点掌握最基础的读取和显示流程。

3. 读取 Bridge.las 点云

MATLAB 中读取 LAS 文件主要用两个函数:lasFileReader 用来创建读取器,readPointCloud 用来真正读取点云。

复制代码
clc; clear; close all;
%% 1. 设置 LAS 文件路径
fileName = "Bridge.las";
%% 2. 创建 LAS 文件读取器
lasReader = lasFileReader(fileName);
%% 3. 读取点云
ptCloud = readPointCloud(lasReader);
%% 4. 显示点云
figure;
pcshow(ptCloud.Location);
axis equal;
xlabel('X');
ylabel('Y');
zlabel('Z');
title('Bridge.las Point Cloud');

运行这段代码后,就可以在 MATLAB 图窗中看到 Bridge.las 的三维点云。

4. 查看点云基本信息

在正式处理点云之前,建议先查看一下文件的基本信息,例如点数量、坐标范围等。

复制代码
disp(lasReader);
fprintf('点云数量:%d\n', lasReader.Count);
fprintf('X范围:%.3f ~ %.3f\n', lasReader.XLimits(1), lasReader.XLimits(2));
fprintf('Y范围:%.3f ~ %.3f\n', lasReader.YLimits(1), lasReader.YLimits(2));
fprintf('Z范围:%.3f ~ %.3f\n', lasReader.ZLimits(1), lasReader.ZLimits(2));

其中 Count 表示点云总数量,XLimits、YLimits 和 ZLimits 分别表示点云在三个方向上的坐标范围。

5. 获取点云坐标

读取后的 ptCloud 是 MATLAB 的 pointCloud 对象。如果想得到普通的三列坐标矩阵,可以使用 Location 属性。

复制代码
XYZ = ptCloud.Location;
X = XYZ(:,1);
Y = XYZ(:,2);
Z = XYZ(:,3);
% 查看前 5 个点
XYZ(1:5,:)

这样就可以把点云坐标提取出来,用于后续的裁剪、滤波、配准、识别和重建等操作。

6. 按高度给点云着色

默认显示有时候不够直观。对于桥梁点云,可以按照高度 Z 值进行着色,这样结构起伏会更加清楚。

复制代码
XYZ = ptCloud.Location;
Z = XYZ(:,3);
figure;
pcshow(XYZ, Z, 'MarkerSize', 20);
axis equal;
colormap(jet);
colorbar;
xlabel('X');
ylabel('Y');
zlabel('Z');
title('Bridge Point Cloud Colored by Height');

这种显示方式适合快速观察桥面、桥墩、地面和周边结构之间的高度差异。

7. 常见问题

问题一:为什么提示找不到 Bridge.las?

一般是因为 MATLAB 当前工作路径下没有这个文件。可以使用 pwd 查看当前路径,或者把 fileName 改成完整文件路径。

问题二:为什么点云显示很小或者不清楚?

可以增加 axis equal、view(3),并适当调大 MarkerSize。

问题三:为什么文件很大,读取很慢?

可以先用 ROI 读取局部区域,后续再进行降采样、滤波或构件识别。

以 Bridge.las 为例,介绍了 MATLAB 读取 LAS 点云的基本流程:创建读取器、读取点云、查看信息、提取坐标、按高度着色显示,以及进行简单区域裁剪。

对于点云处理来说,读取和显示是第一步。后续可以继续进行点云裁剪、降采样、滤波、边界提取、构件识别和三维重建等操作。

8. 完整示例代码

下面给出点云数据和完整代码,下载点云数据并复制代码到 MATLAB 中即可运行。

复制代码
clc; clear; close all;
%% 1. 设置 LAS 文件路径
fileName = "Bridge.las";
%% 2. 创建 LAS 文件读取器
lasReader = lasFileReader(fileName);
%% 3. 读取点云
ptCloud = readPointCloud(lasReader);
%% 4. 显示点云
figure;
pcshow(ptCloud.Location);
axis equal;
xlabel('X');
ylabel('Y');
zlabel('Z');
title('Bridge.las Point Cloud');
disp(lasReader);
fprintf('点云数量:%d\n', lasReader.Count);
fprintf('X范围:%.3f ~ %.3f\n', lasReader.XLimits(1), lasReader.XLimits(2));
fprintf('Y范围:%.3f ~ %.3f\n', lasReader.YLimits(1), lasReader.YLimits(2));
fprintf('Z范围:%.3f ~ %.3f\n', lasReader.ZLimits(1), lasReader.ZLimits(2));
XYZ = ptCloud.Location;
X = XYZ(:,1);
Y = XYZ(:,2);
Z = XYZ(:,3);
% 查看前 5 个点
XYZ(1:5,:)
XYZ = ptCloud.Location;
Z = XYZ(:,3);
figure;
pcshow(XYZ, Z, 'MarkerSize', 20);
axis equal;
colormap(jet);
colorbar;
xlabel('X');
ylabel('Y');
zlabel('Z');
title('Bridge Point Cloud Colored by Height');
xmin = lasReader.XLimits(1);
xmax = lasReader.XLimits(1) + 0.5 * range(lasReader.XLimits);
ymin = lasReader.YLimits(1);
ymax = lasReader.YLimits(2);
zmin = lasReader.ZLimits(1);
zmax = lasReader.ZLimits(2);
roi = [xmin xmax ymin ymax zmin zmax];
ptCloud_roi = readPointCloud(lasReader, ROI=roi);
figure;
pcshow(ptCloud_roi.Location, 'MarkerSize', 20);
axis equal;
xlabel('X');
ylabel('Y');
zlabel('Z');
title('Cropped Bridge Point Cloud');
相关推荐
人道领域13 分钟前
【LeetCode刷题日记】669.修剪二叉搜索树
开发语言·python·算法
QiLinkOS1 小时前
【从实验室到商业战场:发明专利如何重塑科技与企业的共生生态】
大数据·c语言·数据结构·c++·人工智能·单片机·算法
小白兔奶糖ovo2 小时前
【Leetcode】231. 2的幂
linux·算法·leetcode
xiaoxiaoxiaolll2 小时前
《Light: Science & Applications》合并BIC实现80倍阈值单模运行:超紧凑光子晶体激光器新突破
人工智能·算法·机器学习
Peter·Pan爱编程2 小时前
14. Lambda 表达式:随手可写的函数对象
c++·算法·ai编程
-To be number.wan2 小时前
算法日记 | 暴力枚举
学习·算法
s_w.h2 小时前
【 linux 】动静态库的制作
linux·运维·服务器·算法·bash
过期动态3 小时前
【LeetCode 热题 100】接雨水
java·数据结构·算法·leetcode·职场和发展
春日见3 小时前
5分钟入门强化学习之动态规划算法与实现
大数据·人工智能·python·算法·机器学习·计算机视觉
scx_link3 小时前
线性回归的总结:
算法·机器学习·线性回归