===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