点云数据处理
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了点云数据处理相关的知识,希望对你有一定的参考价值。
参考技术A 三维计算视觉研究内容包括:(1)三维匹配:两帧或者多帧点云数据之间的匹配,因为激光扫描光束受物体遮挡的原因,不可能通过一次扫描完成对整个物体的三维点云的获取。因此需要从不同的位置和角度对物体进行扫描。三维匹配的目的就是把相邻扫描的点云数据拼接在一起。三维匹配重点关注匹配算法,常用的算法有 最近点迭代算法 ICP 和各种全局匹配算法。
(2)多视图三维重建:计算机视觉中多视图一般利用图像信息,考虑多视几何的一些约束,相关研究目前很火,射影几何和多视图几何是视觉方法的基础。在摄影测量中类似的存在共线方程,光束平差法等研究。这里也将点云的多视匹配放在这里,比如人体的三维重建,点云的多视重建不仅强调逐帧的匹配,还需要考虑不同角度观测产生误差累积,因此也存在一个优化或者平差的过程在里面。通常是通过观测形成闭环进行整体平差实现,多视图重建强调整体优化。可以只使用图像,或者点云,也可以两者结合(深度图像)实现。重建的结果通常是Mesh网格。
(3)3D SLAM:点云匹配(最近点迭代算法 ICP、正态分布变换方法 NDT)+位姿图优化( g2o 、LUM、ELCH、Toro、SPA);实时3D SLAM算法 (LOAM);Kalman滤波方法。3D SLAM通常产生3D点云,或者Octree Map。基于视觉(单目、双目、鱼眼相机、深度相机)方法的SLAM,比如orbSLAM,lsdSLAM...
(4)目标识别:无人驾驶汽车中基于激光数据检测场景中的行人、汽车、自行车、以及道路和道路附属设施(行道树、路灯、斑马线等)。
(5)形状检测与分类:点云技术在逆向工程中有很普遍的应用。构建大量的几何模型之后,如何有效的管理,检索是一个很困难的问题。需要对点云(Mesh)模型进行特征描述,分类。根据模型的特征信息进行模型的检索。同时包括如何从场景中检索某类特定的物体,这类方法关注的重点是模型。
(6)语义分类:获取场景点云之后,如何有效的利用点云信息,如何理解点云场景的内容,进行点云的分类很有必要,需要为每个点云进行Labeling。可以分为基于点的方法,基于分割的分类方法。从方法上可以分为基于监督分类的技术或者非监督分类技术,深度学习也是一个很有希望应用的技术。
(7)立体视觉与立体匹配 ZNCC
(8)SFM(运动恢复结构)
1、点云滤波方法(数据预处理):
双边滤波、高斯滤波、条件滤波、直通滤波、随机采样一致性滤波。
VoxelGrid
2、关键点
ISS3D、Harris3D、NARF
SIFT3D、
3、特征和特征描述
法线和曲率计算 NormalEstimation 、特征值分析Eigen-Analysis、 EGI
PFH、FPFH、3D Shape Context、Spin Image
4、 点云匹配
ICP 、稳健ICP、point to plane ICP、Point to line ICP、MBICP、GICP
NDT 3D 、Multil-Layer NDT
FPCS、KFPCS、SAC-IA
Line Segment Matching 、ICL
5、点云分割与分类
分割:区域生长、Ransac线面提取、NDT-RANSAC、
K-Means、Normalize Cut(Context based)
3D Hough Transform(线、面提取)、连通分析、
分类:基于点的分类,基于分割的分类;监督分类与非监督分类
6、SLAM图优化
g2o 、LUM、ELCH、Toro、SPA
SLAM方法:ICP、MBICP、IDC、likehood Field、 Cross Correlation 、NDT
7、目标识别、检索
Hausdorff 距离计算(人脸识别)
8、变化检测
基于八叉树的变化检测
9. 三维重建
泊松重建、Delaunay triangulations
表面重建,人体重建,建筑物重建,树木重建。
实时重建:重建植被或者农作物的4D(3D+时间)生长态势;人体姿势识别;表情识别;
10.点云数据管理
点云压缩,点云索引(KD、Octree),点云LOD(金字塔),海量点云的渲染
点云驱动的计算机图形学主要研究应用
http://vcc.szu.edu.cn/research/2015/Points/
MATLAB点云处理(十九):点云合并(pcmerge)
1 点云合并函数 pcmerge
pcmerge
— 合并两个点云
语法:
给定输入点云A和输入点云B,以及体素下采样的栅格边长gridstep
,将合并结果保存到pcCloudMerge
中
ptCloudMerge = pcmerge(ptCloudA,ptCloudB,gridStep)
2 代码实现
代码:
clc;
clear;
% 加载点云
ptCloudA = pcread('A.pcd');
ptCloudB = pcread('B.pcd');
figure;
pcshowpair(ptCloudA,ptCloudB);
title('点云A和点云B')
xlabel('X(m)');
ylabel('Y(m)');
zlabel('Y(m)');
% 合并点云
gridStep = 0.1; % 体素下采样格网边长
pcCloudMerge = pcmerge(ptCloudA,ptCloudB,gridStep);
figure;
pcshow(pcCloudMerge);
title('点云合并')
xlabel('X(m)');
ylabel('Y(m)');
zlabel('Y(m)');
% 保存合并点云
pcwrite(pcCloudMerge,'merge.pcd','Encoding','binary'); %保存为binary形式的PCD点云
结果展示:
相关链接
https://ww2.mathworks.cn/help/vision/ref/pcmerge.html#responsive_offcanvas
以上是关于点云数据处理的主要内容,如果未能解决你的问题,请参考以下文章