私は未構成サーフェスの法線推定が所定のポイントクラウドに基づいて決定論的であるべきかどうかを判断しようとしています。 http://pointclouds.org/documentation/tutorials/normal_estimation.php#normal-estimationPCL Cloud Normalsシンプルなテストケースで非決定的です
しかし、均一な3x3表面直方体(すなわち合計26点)を生成し、雲全体にわたって8つの最近傍法線推定を行う場合、6つの点が存在することになります6つの立方体の表面の中心は座標軸と整列せず、むしろ混沌と見える。これは驚くべきことです。この8つの最も近い近傍のこの選択は、これらの6つの中心表面点の通常の推定値が同じ平面上の他の点にのみ基づいていることを制約しなければならないことを理解しています。コードの抜粋です:
// compute normals
pcl::NormalEstimation<pcl::PointXYZ, pcl::Normal> ne;
ne.setInputCloud (cloud_ptr);
pcl::search::KdTree<pcl::PointXYZ>::Ptr tree (new pcl::search::KdTree<pcl::PointXYZ>());
ne.setSearchMethod (tree);
pcl::PointCloud<pcl::Normal>::Ptr cloud_normals (new pcl::PointCloud<pcl::Normal>);
ne.setKSearch(8);
ne.compute (*cloud_normals);
for (int i =0; i<cloud_ptr->size(); i++)
{
cout << "x: " << cloud_ptr->points.at(i).x << " y: " << cloud_ptr->points.at(i).y << " z: " << cloud_ptr->points.at(i).z << endl;
}
for (int i =0; i<cloud_normals->size(); i++)
{
cout << "x: " << cloud_normals->points.at(i).normal_x << " y: " << cloud_normals->points.at(i).normal_y << " z: " << cloud_normals->points.at(i).normal_z << endl;
}
cout << cloud_ptr->size() << endl;
cout << cloud_normals->size() << endl;
と出力:
x: -1 y: -1 z: 1
x: -1 y: 0 z: 1
x: -1 y: 1 z: 1
x: 0 y: -1 z: 1
x: 0 y: 0 z: 1
x: 0 y: 1 z: 1
x: 1 y: -1 z: 1
x: 1 y: 0 z: 1
x: 1 y: 1 z: 1
x: -1 y: -1 z: -1
x: -1 y: 0 z: -1
x: -1 y: 1 z: -1
x: 0 y: -1 z: -1
x: 0 y: 0 z: -1
x: 0 y: 1 z: -1
x: 1 y: -1 z: -1
x: 1 y: 0 z: -1
x: 1 y: 1 z: -1
x: -1 y: -1 z: 0
x: -1 y: 0 z: 0
x: -1 y: 1 z: 0
x: 1 y: -1 z: 0
x: 1 y: 0 z: 0
x: 1 y: 1 z: 0
x: 0 y: -1 z: 0
x: 0 y: 1 z: 0
x: 0.642542 y: 0.417468 z: -0.642542
x: 0.81252 y: 0.0985752 z: -0.574538
x: 0.642542 y: -0.417468 z: -0.642542
x: -0.0985752 y: 0.574539 z: -0.81252
x: -0.196116 y: 0 z: -0.980581
x: -0.0985752 y: -0.574539 z: -0.81252
x: -0.642542 y: 0.642542 z: -0.417468
x: -0.81252 y: -0.0985752 z: -0.574538
x: -0.642542 y: -0.642542 z: -0.417468
x: 0.642542 y: 0.642542 z: 0.417468
x: 0.81252 y: 0.0985752 z: 0.574538
x: 0.642542 y: -0.642542 z: 0.417468
x: -0.0985752 y: 0.81252 z: 0.574539
x: -0.196116 y: 0 z: 0.980581
x: -0.0985752 y: -0.81252 z: 0.574539
x: -0.642542 y: 0.417468 z: 0.642542
x: -0.81252 y: -0.0985752 z: 0.574538
x: -0.642542 y: -0.417468 z: 0.642542
x: 0.81252 y: 0.574538 z: -0.0985752
x: 1 y: -0 z: -0
x: 0.81252 y: -0.574538 z: 0.0985752
x: -0.81252 y: 0.574538 z: -0.0985752
x: -0.987623 y: 0.153347 z: -0.0329405
x: -0.574539 y: -0.81252 z: 0.0985752
x: 0.153347 y: 0.987623 z: -0.0329405
x: 0.153347 y: -0.987623 z: -0.0329405
26
26
私は雲のビューアで期待どおりに完璧に現れキューブ座標、とのいずれかのミスを犯していないと確信しています。
大変助かりました!
最近傍点にはポイント自体が含まれていますか? k = 9に設定するとどうなりますか? – GuyRT
同様の結果で、リンクに記載されている説明に基づいて、ポイント自体は数えられません。 V奇妙な。 –
https://github.com/djl11/PCL_Temp_Repo/blob/master/Cube_Gen.cpp ちょうど私のgithubの一時レポにプッシュしました。ソースファイルは誰でも現象の複製に興味があればそこにあります。 –