Outils pour utilisateurs

Outils du site


lib:pcl

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
lib:pcl [2019/03/14 20:25] – Ajout de "Rotation d'un point avec normales" rootlib:pcl [2019/09/20 13:12] (Version actuelle) – Ajout de Eigen comme dépendance root
Ligne 1: Ligne 1:
 ===Compilation sous Windows=== ===Compilation sous Windows===
-Il est nécessaire d'avoir [[lib:flann|Flann]], [[lib:qhull|Qhull]] et [[lib:boost|Boost]] de compilé en version 64 bits, Release et Debug.+Il est nécessaire d'avoir Eigen (librairie entête), [[lib:flann|Flann]], [[lib:qhull|Qhull]] et [[lib:boost|Boost]] de compilé en version 64 bits, Release et Debug.
  
 Il faut aussi les sources de Eigen mais uniquement pour les header (compilation inutile). Il faut aussi les sources de Eigen mais uniquement pour les header (compilation inutile).
Ligne 75: Ligne 75:
 </code> </code>
  
-===Rotation d'un point avec normales=== +===Matrice de rotation pour aligner un axe vers un autre=== 
-Les normales ne sont pas tournées. Il faut le faire manuellement :+<code cpp> 
 +Eigen::Quaternionf rotAxe; 
 +rotAxe.setFromTwoVectors(Eigen::Vector3f(rotation.x_, rotation.y_, rotation.z_), Eigen::Vector3f(1, 0, 0)); 
 +transform.prerotate(rotAxe); 
 +</code> 
 + 
 +===Rotation d'un nuage=== 
 +Sans les normales :
 <code cpp> <code cpp>
-// Transformation du nuage 
 pcl::transformPointCloud(*cloud_src, *retval, transform); pcl::transformPointCloud(*cloud_src, *retval, transform);
 +</code>
  
-// On enlève tout ce qui touche à la translation. +Avec les normales 
-Eigen::Matrix4f matrix = transform.matrix(); +<code cpp> 
-matrix(0, 3) = 0.f; +pcl::transformPointCloudWithNormals(*cloud_src, *retval, transform);
-matrix(1, 3) = 0.f; +
-matrix(2, 3) = 0.f; +
-matrix(3, 0) = 0.f; +
-matrix(3, 1) = 0.f; +
-matrix(3, 2) = 0.f; +
-matrix(3, 3) = 0.f; +
-pcl::detail::Transformer<float> tf(matrix); +
-     +
-// Transformation des normales. +
-for (size_t i = 0; i < retval->points.size(); ++i) +
-  tf.se3(cloud_src->points[i].data_n, retval->points[i].data_n);+
 </code> </code>
 +
 +===Recherche des normales===
 +<code cpp>
 +pcl::PointCloud<TYPE_POINT_PCL>::Ptr cloud_src(XXXXXXX);
 +pcl::PointCloud<TYPE_POINT_PCL>::Ptr retval(new pcl::PointCloud<TYPE_POINT_PCL>);
 +pcl::search::KdTree<TYPE_POINT_PCL>::Ptr tree(new pcl::search::KdTree<TYPE_POINT_PCL>());
 +pcl::NormalEstimation<TYPE_POINT_PCL, TYPE_POINT_PCL> ne;
 +ne.setSearchMethod(tree);
 +// Pour l'orientation des normales.
 +ne.setViewPoint(0, 0, 0);
 +ne.setInputCloud(cloud_src);
 +// L'un ou l'autre
 +ne.setKSearch(nombre_de_voisins);
 +ne.setRadiusSearch(distance_des_voisins);
 +ne.compute(*retval);
 +</code>
 +
 +[[http://pointclouds.org/documentation/tutorials/normal_estimation.php|Estimating Surface Normals in a PointCloud]] Archive du 26/03/2019
lib/pcl.1552591546.txt.gz · Dernière modification : 2019/03/14 20:25 de root