===Compilation sous Windows=== 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). On utilise ''cmake-gui''. Télécharger https://github.com/PointCloudLibrary/pcl et prendre la dernière version (pcl-1.9.1) Where is my source code: ...\Sources\flann-1.7.1-src Where to build binaries: ...\Sources\flann-1.7.1-src/build Configure Visual Studio 14 2015 X64 Générer Modifier EIGEN_INCLUDE_DIR ...\Sources\eigen PCL_BUILD_WITH_FLANN_DYNAMIC_LINKING_WIN32 à true PCL_BUILD_WITH_QHULL_DYNAMIC_LINKING_WIN32 à true Configurer le dossier d’installation à Program Files/pcl Configure FLANN_INCLUDE_DIR C:\Program Files\flann.release\include FLANN_LIBRARY C:\Program Files\flann.release\lib\flann.lib;C:\Program Files\flann.release\lib\flann_cpp_s.lib FLANN_LIBRARY_DEBUG C:\Program Files\flann.debug\lib\flann.lib;C:\Program Files\flann.debug\lib\flann_cpp_s.lib Configure WITH_OPENNI2 à false WITH_VTK à false WITH_QT à false WITH_PCAP à false WITH_LIBUSB à false QHULL_LIBRARY C:/Program Files/qhull.release/lib/qhull.lib QHULL_LIBRARY_DEBUG C:/Program Files/qhull.debug/lib/qhull.lib CUDA_ARCH_BIN 3.0 5.2 7.5 garder le dernier, une version intermédiaire et le tout premier. Ca permet d’économiser un gros temps de compilation. (avant : 3.0 3.5 5.0 5.2 5.3 6.0 6.1 7.0 7.2 7.5) Boost_INCLUDE_DIR ...\Sources\boost\boost.install\include\boost-1_69 Boost_*_LIBRARY_RELEASE et Boost_*_LIBRARY_DEBUG ...\Sources\boost\build.install\lib\*.lib Les .lib contenant -sgd dont la version de debug. BUILD_CUDA à true BUILD_GPU à true CMAKE_CXX_FLAGS : ajouter "/D_WIN32_WINNT=0x0A00" pour une compatibilité Windows 10 avec Boost. Ajouter manuellement : QHULL_LIBRARIES C:\Program Files\qhull.release\lib\qhull.lib QHULL_LIBRARIES_DEBUG C:\Program Files\qhull.debug\lib\qhull.lib QHULL_INCLUDE_DIRS C:\Program Files\qhull.release\include Configure Boost_*_LIBRARY_RELEASE et Boost_*_LIBRARY_DEBUG BUILD_cuda_io à true BUILD_cuda_apps à true Configure Boost_*_LIBRARY_RELEASE et Boost_*_LIBRARY_DEBUG Ouvrir ...\Sources\pcl\build\PCL.sln Pour tester compiler pcl_common, pcl_io_ply, pcl_io, pcl_kdtree Compiler le projet ALL_BUILD Sélectionner Debug x64 ===Nouveau projet Visual Studio=== Ajouter les includes : C:\Program Files (x86)\PCL\include\pcl-1.9 ...\Sources\eigen ...\Sources\boost\build.install\include\boost-1_69 Ajouter les .lib : ...\Sources\boost\build.install\lib ===Appliquer des translations et rotations successives=== Quand on veut appliquer des modifications successives, il faut inverser les multiplications de matrices : $M = R_2 * T_1$ Eigen::Affine3f transform = Eigen::Affine3f::Identity(); transform.pretranslate(Eigen::Vector3f(-parametres.GetPoint0().x_, -parametres.GetPoint0().y_, -parametres.GetPoint0().z_)); transform.prerotate(Eigen::AngleAxisf(-atan2f(diffy, diffx), Eigen::Vector3f::UnitZ())); pcl::transformPointCloud(*cloud_src, *retval, transform); ===Matrice de rotation pour aligner un axe vers un autre=== Eigen::Quaternionf rotAxe; rotAxe.setFromTwoVectors(Eigen::Vector3f(rotation.x_, rotation.y_, rotation.z_), Eigen::Vector3f(1, 0, 0)); transform.prerotate(rotAxe); ===Rotation d'un nuage=== Sans les normales : pcl::transformPointCloud(*cloud_src, *retval, transform); Avec les normales : pcl::transformPointCloudWithNormals(*cloud_src, *retval, transform); ===Recherche des normales=== pcl::PointCloud::Ptr cloud_src(XXXXXXX); pcl::PointCloud::Ptr retval(new pcl::PointCloud); pcl::search::KdTree::Ptr tree(new pcl::search::KdTree()); pcl::NormalEstimation 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); [[http://pointclouds.org/documentation/tutorials/normal_estimation.php|Estimating Surface Normals in a PointCloud]] Archive du 26/03/2019