基於PCL- 利用kdtree計算點雲點距均值
阿新 • • 發佈:2021-02-18
基於PCL- 利用kdtree計算點雲點距均值
//功能:利用kdtree計算點雲點距均值 //cloud:代表輸入點雲 //k:代表定查詢點鄰域周圍最近的K個點 float computeCloudResolution(const pcl::PointCloud<pcl::PointNormal>::ConstPtr &cloud, int k) { double res = 0.0; int n_points = 0; pcl::KdTreeFLANN<pcl::PointNormal> tree; tree.setInputCloud(cloud); for (size_t i = 0; i < cloud->size(); ++i) { if (!pcl_isfinite((*cloud)[i].x)) //pcl_isfinite函式返回一個布林值,檢查某個值是不是正常數值 { continue; } std::vector<int> indices(k); //建立一個動態陣列,儲存查詢點近鄰索引 std::vector<float> sqr_distances(k); //儲存近鄰點對應平方距離 if (tree.nearestKSearch(i, k, indices, sqr_distances) == k) { for (int i = 1; i < k; i++) { res += sqrt(sqr_distances[i]); ++n_points; } } } if (n_points != 0) { res /= n_points; } return res; }