在桥梁、道路、建筑物等三维点云处理中,.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');
转载自CSDN-专业IT技术社区
原文链接:https://blog.csdn.net/yuchunyu12/article/details/160928996



