admin 管理员组文章数量: 1184232
iss
iss 也是一种点云的特征点,其主要是依赖周边的领域而设置的;本文将结合 pcl 的源码 来说明。
先计算 领域的协方差矩阵 Iss 论文涉及到了 权重 但是pcl 中没有哦。
for (int n_idx = 0; n_idx < n_neighbors; n_idx++){const PointInT& n_point = (*input_).points[nn_indices[n_idx]];double neigh_point[3];memset(neigh_point, 0, sizeof(double) * 3);neigh_point[0] = n_point.x;neigh_point[1] = n_point.y;neigh_point[2] = n_point.z;for (int i = 0; i < 3; i++)for (int j = 0; j < 3; j++)cov[i * 3 + j] += (neigh_point[i] - central_point[i]) * (neigh_point[j] - central_point[j]);}
求解特征值:
getScatterMatrix (static_cast<int> (index), cov_m);Eigen::SelfAdjointEigenSolver<Eigen::Matrix3d> solver (cov_m);const double& e1c = solver.eigenvalues ()[2];const double& e2c = solver.eigenvalues ()[1];const double& e3c = solver.eigenvalues ()[0];
判断因子:
omp_mem[tid][0] = e2c / e1c;omp_mem[tid][1] = e3c / e2c;;omp_mem[tid][2] = e3c;
最后还有一个非极大值抑制的操作:
for (index = 0; index < int (input_->size ()); index++){feat_max [index] = false;PointInT current_point = input_->points[index];if ((third_eigen_value_[index] > 0.0) && (pcl::isFinite(current_point))){std::vector<int> nn_indices;std::vector<float> nn_distances;int n_neighbors;this->searchForNeighbors (static_cast<int> (index), non_max_radius_, nn_indices, nn_distances);n_neighbors = static_cast<int> (nn_indices.size ());if (n_neighbors >= min_neighbors_){is_max = true;for (int j = 0 ; j < n_neighbors; j++)if (third_eigen_value_[index] < third_eigen_value_[nn_indices[j]])is_max = false;if (is_max)feat_max[index] = true;}}}
本文标签: iss
版权声明:本文标题:iss 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1687379932a95992.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论