5.点云的分辨率计算

您所在的位置:网站首页 mr的空间分辨率是多少 5.点云的分辨率计算

5.点云的分辨率计算

2024-07-11 04:28| 来源: 网络整理| 查看: 265

目录

1.什么是点云的分辨率

2.代码实现

1.什么是点云的分辨率

        点云的分辨率也叫点云密度,点云密度是数据分辨率的指标:较高的密度意味着更多的信息(高分辨率),而较低的密度意味着较少的信息(低分辨率)。了解点云密度很重要,因为这可能会影响基于点云的其他项目的质量或准确性。

        点云的分辨率有很多是基于某点去查询最近点,根据最近点的距离去代替点云的密度,但是这种是不稳定的,对于有噪声和有空洞的点云来说,可能是不准确的,所以利用整个点云去查找最近点进行平均的方法是具有较高的稳定性和鲁棒性的;

2.代码实现 #define BOOST_TYPEOF_EMULATION #include #include #include #include #include //kdtree近邻搜索 #include using namespace std; float CalculateDensity(pcl::PointCloud::Ptr cloud) { float mr = 0; pcl::KdTreeFLANN kdtree; vectorpointIdx(2); vectorpointDst(2); kdtree.setInputCloud(cloud); pcl::PointXYZ query_point; for (int i = 0; i < cloud->points.size(); i++) { query_point = cloud->points[i]; kdtree.nearestKSearch(query_point, 2, pointIdx, pointDst); float x = cloud->points[pointIdx[0]].x - cloud->points[pointIdx[1]].x; float y = cloud->points[pointIdx[0]].y - cloud->points[pointIdx[1]].y; float z = cloud->points[pointIdx[0]].z - cloud->points[pointIdx[1]].z; float mr_temp = sqrt(x * x + y * y+ z * z ); mr += mr_temp; } mr /= cloud->points.size(); return mr; } int main() { // --------------------------------读取点云------------------------------------ pcl::PointCloud::Ptr cloud(new pcl::PointCloud); if (pcl::io::loadPLYFile("banShou.ply", *cloud) == -1) { PCL_ERROR("Cloudn't load pointCloud file!"); return -1; } float density = 0; density = CalculateDensity(cloud); //基于PCL库的点云分辨率计算 pcl内置函数内置多线程加速 float dist_max = 100.0; std::vector indices; for (int i = 0; i < cloud->points.size(); i++) { indices.push_back(i); } float Density = pcl::getMeanPointDensity(cloud, indices, dist_max, 8);//8个线程 cout


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3