当前位置: 首页 > news >正文

使用 MATLAB 处理和可视化 PCD 文件:点云过滤与保存的完整流程

1. 前言

点云数据通常以 .pcd 格式存储,包含三维空间中的点坐标。为了分析和处理这些数据,有时我们需要对点云进行裁剪或过滤。例如,删除某些特定范围内的点,以减少噪声或聚焦于感兴趣的区域。这篇文章将带你逐步实现以下任务:

  • 读取 PCD 文件。
  • 过滤 z 轴值小于 -0.88 或大于 1.5 的点。
  • 可视化处理后的点云。
  • 将处理后的点云保存为新的 PCD 文件。
2. MATLAB 点云处理概述

MATLAB 包含一个强大的点云处理工具箱,提供了诸如 pcreadpcwritepointCloud 等函数,可以方便地进行点云数据的读写和处理。本文的代码示例将展示如何使用这些函数进行点云数据的批量处理。

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 文件处理完成!');

相关文章:

  • Bigemap Pro首发(一款真正全面替代Arcgis的国产基础软件)
  • 《概率论与数理统计》学渣笔记
  • MATLAB无线网络设计工具:从理论到实践
  • TDengine 在业务落地与架构改造中的应用实践!
  • 【Redis入门到精通六】在Spring Boot中集成Redis(含配置和操作演示)
  • 计算机网络第六章——应用层
  • 速盾:cdn是怎么加速视频的?
  • 【解密 Kotlin 扩展函数】顶级函数和顶级属性(十五)
  • 极狐GitLab 17.4 重点功能解读【一】
  • springboot基于学习行为的学生选课成绩分析系统设计与实现
  • 计算机视觉实战项目4(图像分类+目标检测+目标跟踪+姿态识别+车道线识别+车牌识别+无人机检测+A*路径规划+单目测距与测速+行人车辆计数等)
  • oracle数据备份和导入
  • RT_Thread内核源码分析(二)——链表和对象管理
  • 2024.9.27 Python面试八股文
  • Linux权限解析
  • angular学习第一篇-----环境搭建
  • canvas 高仿 Apple Watch 表盘
  • CODING 缺陷管理功能正式开始公测
  • Django 博客开发教程 8 - 博客文章详情页
  • emacs初体验
  • JS实现简单的MVC模式开发小游戏
  • KMP算法及优化
  • leetcode46 Permutation 排列组合
  • Linux链接文件
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • redis学习笔记(三):列表、集合、有序集合
  • text-decoration与color属性
  • Vue--数据传输
  • 百度小程序遇到的问题
  • 初识 beanstalkd
  • 创建一种深思熟虑的文化
  • 欢迎参加第二届中国游戏开发者大会
  • 聊聊directory traversal attack
  • 王永庆:技术创新改变教育未来
  • elasticsearch-head插件安装
  • 回归生活:清理微信公众号
  • ​520就是要宠粉,你的心头书我买单
  • ​水经微图Web1.5.0版即将上线
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • #1015 : KMP算法
  • #Ubuntu(修改root信息)
  • $redis-setphp_redis Set命令,php操作Redis Set函数介绍
  • (C语言)球球大作战
  • (Matlab)使用竞争神经网络实现数据聚类
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (附源码)计算机毕业设计ssm基于Internet快递柜管理系统
  • (七)Appdesigner-初步入门及常用组件的使用方法说明
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
  • (心得)获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列。
  • (转)LINQ之路
  • (转)linux自定义开机启动服务和chkconfig使用方法
  • (转)自己动手搭建Nginx+memcache+xdebug+php运行环境绿色版 For windows版
  • (状压dp)uva 10817 Headmaster's Headache