几何篇(一)
一、前言
二、主要内容
1.点云的读入、储存和可视化
2.点云的下采样
三、参考资料
一、前言
本章节将主要介绍点云的读入、储存、可视化操作以及点云的下采样操作。
二、主要内容
1.点云的读入、储存和可视化
这一小节主要讲解了点云的读取、可视化以及保存操作。
(ps:可视化窗口中可以使用“+”和“-”来调节点云单个点元的大小)
代码如下(示例):
#include <Eigen/Dense>
#include <iostream>
#include <string>
#include <memory>
#include "open3d/Open3D.h"
using namespace std;
using namespace open3d;
int main(int argc, char *argv[]) {
//******Visualize point cloud******//
visualization::Visualizer visualizer;
string pointcloud_path ="../data/fragment.ply"; //文件的地址
std::shared_ptr<geometry::PointCloud> pointcloud =
io::CreatePointCloudFromFile(pointcloud_path);
if (pointcloud == nullptr) {
utility::LogWarning("Unable to load pointcloud file.");
return -1;
}; //检查文件是否为空
visualizer.CreateVisualizerWindow("Open3D", 1600, 900);
visualizer.AddGeometry(pointcloud);
visualizer.Run();
visualizer.DestroyVisualizerWindow();
bool result=open3d::io::WritePointCloudToPLY("../data/fragment_save.ply",*pointcloud,false);
if(result==1){std::cout<<"保存成功"<<std::endl;}
return 0;
}
可视化结果如下(示例):
2.点云的下采样
体素下采样,使用常规体素网格从输入点云创建均匀下采样的点云。它通常用作许多点云处理任务的预处理步骤。该算法主要分为两个步骤:
-
将输入点云进行体素分块。
-
对每个体素栅格内部所有点进行平均来生成一个点,从而实现点云的下采样。
如下程序是使用边长为0.05m 的体素对点云进行下采样。
代码如下(示例):
string pointcloud_path ="../data/fragment.ply"; //文件路径
std::shared_ptr<geometry::PointCloud> pointcloud =
io::CreatePointCloudFromFile(pointcloud_path);
if (pointcloud == nullptr) {
utility::LogWarning("Unable to load source or target file.");
return -1;
}; //检查文件是否为空
// test downsample
auto downsampled = pointcloud->VoxelDownSample(0.05);
visualization::DrawGeometries({downsampled}, "Down Sampled Pointcloud");
下采样结果:
三、参考资料
http://www.open3d.org/docs/latest/tutorial/geometry/pointcloud.html#Visualize-point-cloud
总结
以上就是几何篇(一)的全部内容,完整的可执行代码可以在我的github仓库进行下载,文章会持续更新,如果文章中有写的不对的地方,希望大家可以在评论区进行批评和指正,大家一起交流,共同进步!