使用 MATLAB 处理和可视化 PCD 文件:点云过滤与保存的完整流程
1. 前言
点云数据通常以 .pcd
格式存储,包含三维空间中的点坐标。为了分析和处理这些数据,有时我们需要对点云进行裁剪或过滤。例如,删除某些特定范围内的点,以减少噪声或聚焦于感兴趣的区域。这篇文章将带你逐步实现以下任务:
- 读取 PCD 文件。
- 过滤
z
轴值小于-0.88
或大于1.5
的点。 - 可视化处理后的点云。
- 将处理后的点云保存为新的 PCD 文件。
2. MATLAB 点云处理概述
MATLAB 包含一个强大的点云处理工具箱,提供了诸如 pcread
、pcwrite
、pointCloud
等函数,可以方便地进行点云数据的读写和处理。本文的代码示例将展示如何使用这些函数进行点云数据的批量处理。
3. 代码实现
以下是该 MATLAB 脚本的完整代码,实现了从 PCD 文件中读取并过滤点云数据的功能。我们将删除 z
值小于 -0.88
和大于 1.5
的点,随后可视化并保存处理后的点云。
% MATLAB Script to load, process, visualize, and save PCD data
clc
close
clear
% 设定路径
inputFolder = 'C:\Users\Administrator\Desktop\标定用的数据\5\LiDAR_Cam\PCD'; % PCD 文件所在的文件夹
outputFolder = 'C:\Users\Administrator\Desktop\标定用的数据\5\LiDAR_Cam\PCD\pcdc'; % 保存处理后文件的文件夹% 如果输出文件夹不存在,创建它
if ~exist(outputFolder, 'dir')mkdir(outputFolder);
end% 获取文件夹下所有 .pcd 文件
pcdFiles = dir(fullfile(inputFolder, '*.pcd'));% 遍历所有的 PCD 文件
for i = 1:length(pcdFiles)% 获取当前文件的完整路径inputFilePath = fullfile(inputFolder, pcdFiles(i).name);% 读取 PCD 文件ptCloud = pcread(inputFilePath);% 获取点云数据xyzPoints = ptCloud.Location; % 大小为 1800x16x3 的三维矩阵% 将 1800x16x3 的矩阵展平成 28800x3 的矩阵xyzPoints = reshape(xyzPoints, [], 3);% 删除 z 值小于 -0.88 且 z 值大于 1.5 的点validIdx = (xyzPoints(:, 3) >= -0.88) & (xyzPoints(:, 3) <= 1.5);filteredPoints = xyzPoints(validIdx, :);% 可视化处理后的点云数据figure;scatter3(filteredPoints(:, 1), filteredPoints(:, 2), filteredPoints(:, 3), 5, filteredPoints(:, 3), 'filled');xlabel('X');ylabel('Y');zlabel('Z');title(['Filtered Point Cloud: ', pcdFiles(i).name]);colorbar;axis equal;view(3);% 创建新的点云对象filteredPointCloud = pointCloud(filteredPoints);% 保存到新的路径下outputFilePath = fullfile(outputFolder, pcdFiles(i).name);pcwrite(filteredPointCloud, outputFilePath);% 关闭当前图像close;
enddisp('PCD 文件处理完成!');