c++ 下使用open3d 计算点云的马氏距离,最邻近距离以及两点云间最邻近距离
#include <string>
#include <Eigen>
#include <Open3D/Open3D.h>
using namespace open3d;
using namespace std;
int main(int argc, char* argv[]) {
//读取点云
std::shared_ptr<geometry::PointCloud> cloud1(new geometry::PointCloud);
open3d::io::ReadPointCloud("C:/Users/a/Desktop/1.ply", *cloud1);
std::shared_ptr<geometry::PointCloud> cloud(new geometry::PointCloud);
open3d::io::ReadPointCloud("C:/Users/a/Desktop/2.ply", *cloud);
double max_distance = 2;
std::vector<double> Mahalanobis_distances(cloud->points_.size());
Mahalanobis_distances = cloud->ComputeMahalanobisDistance();//计算马氏距离
std::vector<double> NearestNeighbor_distances(cloud->points_.size());
NearestNeighbor_distances = cloud1->ComputeNearestNeighborDistance();//计算最临近点距离
cloud->colors_.resize(cloud->points_.size());
visualization::ColorMapHot colormap;//通过数值生成颜色信息
for (size_t i = 0; i < cloud->points_.size(); i++) {
cloud->colors_[i] = colormap.GetColor(Mahalanobis_distances[i] / max_distance);
}
cloud1->colors_.resize(cloud1->points_.size());
for (size_t i = 0; i < cloud1->points_.size(); i++) {
cloud1->colors_[i] = colormap.GetColor(NearestNeighbor_distances[i] / max_distance);
}
visualization::DrawGeometries({cloud}, "visualization", 960, 900, 960, 100);
visualization::DrawGeometries({ cloud1 }, "visualization", 960, 900, 960, 100);
std::vector<double> cloud_distance;
cloud_distance = cloud->ComputePointCloudDistance(*cloud1); //计算两点云间最临近点的距离
for (int t= 0; t < cloud_distance.size(); t++)
{
cout << cloud_distance[t] << endl;
}
return 0;
}