使用 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;
end
disp('PCD 文件处理完成!');
原文地址:https://blog.csdn.net/u014374826/article/details/142499627
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!