Point Cloud Library (PCL)
1.14.1-dev
|
The texture mapping algorithm. More...
#include <pcl/surface/texture_mapping.h>
Public Types | |
using | Ptr = shared_ptr< TextureMapping< PointInT > > |
using | ConstPtr = shared_ptr< const TextureMapping< PointInT > > |
using | PointCloud = pcl::PointCloud< PointInT > |
using | PointCloudPtr = typename PointCloud::Ptr |
using | PointCloudConstPtr = typename PointCloud::ConstPtr |
using | Octree = pcl::octree::OctreePointCloudSearch< PointInT > |
using | OctreePtr = typename Octree::Ptr |
using | OctreeConstPtr = typename Octree::ConstPtr |
using | Camera = pcl::texture_mapping::Camera |
using | UvIndex = pcl::texture_mapping::UvIndex |
Public Member Functions | |
TextureMapping ()=default | |
Constructor. More... | |
~TextureMapping ()=default | |
Destructor. More... | |
void | setF (float f) |
Set mesh scale control. More... | |
void | setVectorField (float x, float y, float z) |
Set vector field. More... | |
void | setTextureFiles (std::vector< std::string > tex_files) |
Set texture files. More... | |
void | setTextureMaterials (TexMaterial tex_material) |
Set texture materials. More... | |
void | mapTexture2Mesh (pcl::TextureMesh &tex_mesh) |
Map texture to a mesh synthesis algorithm. More... | |
void | mapTexture2MeshUV (pcl::TextureMesh &tex_mesh) |
Map texture to a mesh UV mapping. More... | |
void | mapMultipleTexturesToMeshUV (pcl::TextureMesh &tex_mesh, pcl::texture_mapping::CameraVector &cams) |
Map textures acquired from a set of cameras onto a mesh. More... | |
bool | getPointUVCoordinates (const PointInT &pt, const Camera &cam, Eigen::Vector2f &UV_coordinates) |
computes UV coordinates of point, observed by one particular camera More... | |
bool | isPointOccluded (const PointInT &pt, const OctreePtr octree) |
Check if a point is occluded using raycasting on octree. More... | |
void | removeOccludedPoints (const PointCloudPtr &input_cloud, PointCloudPtr &filtered_cloud, const double octree_voxel_size, pcl::Indices &visible_indices, pcl::Indices &occluded_indices) |
Remove occluded points from a point cloud. More... | |
void | removeOccludedPoints (const pcl::TextureMesh &tex_mesh, pcl::TextureMesh &cleaned_mesh, const double octree_voxel_size) |
Remove occluded points from a textureMesh. More... | |
void | removeOccludedPoints (const pcl::TextureMesh &tex_mesh, PointCloudPtr &filtered_cloud, const double octree_voxel_size) |
Remove occluded points from a textureMesh. More... | |
int | sortFacesByCamera (pcl::TextureMesh &tex_mesh, pcl::TextureMesh &sorted_mesh, const pcl::texture_mapping::CameraVector &cameras, const double octree_voxel_size, PointCloud &visible_pts) |
Segment faces by camera visibility. More... | |
void | showOcclusions (const PointCloudPtr &input_cloud, pcl::PointCloud< pcl::PointXYZI >::Ptr &colored_cloud, const double octree_voxel_size, const bool show_nb_occlusions=true, const int max_occlusions=4) |
Colors a point cloud, depending on its occlusions. More... | |
void | showOcclusions (pcl::TextureMesh &tex_mesh, pcl::PointCloud< pcl::PointXYZI >::Ptr &colored_cloud, double octree_voxel_size, bool show_nb_occlusions=true, int max_occlusions=4) |
Colors the point cloud of a Mesh, depending on its occlusions. More... | |
void | textureMeshwithMultipleCameras (pcl::TextureMesh &mesh, const pcl::texture_mapping::CameraVector &cameras) |
Segment and texture faces by camera visibility. More... | |
Protected Member Functions | |
std::vector< Eigen::Vector2f, Eigen::aligned_allocator< Eigen::Vector2f > > | mapTexture2Face (const Eigen::Vector3f &p1, const Eigen::Vector3f &p2, const Eigen::Vector3f &p3) |
Map texture to a face. More... | |
void | getTriangleCircumcenterAndSize (const pcl::PointXY &p1, const pcl::PointXY &p2, const pcl::PointXY &p3, pcl::PointXY &circumcenter, double &radius) |
Returns the circumcenter of a triangle and the circle's radius. More... | |
void | getTriangleCircumcscribedCircleCentroid (const pcl::PointXY &p1, const pcl::PointXY &p2, const pcl::PointXY &p3, pcl::PointXY &circumcenter, double &radius) |
Returns the centroid of a triangle and the corresponding circumscribed circle's radius. More... | |
bool | getPointUVCoordinates (const PointInT &pt, const Camera &cam, pcl::PointXY &UV_coordinates) |
computes UV coordinates of point, observed by one particular camera More... | |
bool | isFaceProjected (const Camera &camera, const PointInT &p1, const PointInT &p2, const PointInT &p3, pcl::PointXY &proj1, pcl::PointXY &proj2, pcl::PointXY &proj3) |
Returns true if all the vertices of one face are projected on the camera's image plane. More... | |
bool | checkPointInsideTriangle (const pcl::PointXY &p1, const pcl::PointXY &p2, const pcl::PointXY &p3, const pcl::PointXY &pt) |
Returns True if a point lays within a triangle. More... | |
std::string | getClassName () const |
Class get name method. More... | |
Protected Attributes | |
float | f_ {0.0f} |
mesh scale control. More... | |
Eigen::Vector3f | vector_field_ |
vector field More... | |
std::vector< std::string > | tex_files_ |
list of texture files More... | |
TexMaterial | tex_material_ |
list of texture materials More... | |
The texture mapping algorithm.
Definition at line 99 of file texture_mapping.h.
using pcl::TextureMapping< PointInT >::Camera = pcl::texture_mapping::Camera |
Definition at line 114 of file texture_mapping.h.
using pcl::TextureMapping< PointInT >::ConstPtr = shared_ptr<const TextureMapping<PointInT> > |
Definition at line 104 of file texture_mapping.h.
using pcl::TextureMapping< PointInT >::Octree = pcl::octree::OctreePointCloudSearch<PointInT> |
Definition at line 110 of file texture_mapping.h.
using pcl::TextureMapping< PointInT >::OctreeConstPtr = typename Octree::ConstPtr |
Definition at line 112 of file texture_mapping.h.
using pcl::TextureMapping< PointInT >::OctreePtr = typename Octree::Ptr |
Definition at line 111 of file texture_mapping.h.
using pcl::TextureMapping< PointInT >::PointCloud = pcl::PointCloud<PointInT> |
Definition at line 106 of file texture_mapping.h.
using pcl::TextureMapping< PointInT >::PointCloudConstPtr = typename PointCloud::ConstPtr |
Definition at line 108 of file texture_mapping.h.
using pcl::TextureMapping< PointInT >::PointCloudPtr = typename PointCloud::Ptr |
Definition at line 107 of file texture_mapping.h.
using pcl::TextureMapping< PointInT >::Ptr = shared_ptr<TextureMapping<PointInT> > |
Definition at line 103 of file texture_mapping.h.
using pcl::TextureMapping< PointInT >::UvIndex = pcl::texture_mapping::UvIndex |
Definition at line 115 of file texture_mapping.h.
|
default |
Constructor.
|
default |
Destructor.
|
inlineprotected |
Returns True if a point lays within a triangle.
see http://www.blackpawn.com/texts/pointinpoly/default.html
[in] | p1 | first point of the triangle. |
[in] | p2 | second point of the triangle. |
[in] | p3 | third point of the triangle. |
[in] | pt | the query point. |
Definition at line 1036 of file texture_mapping.hpp.
References pcl::PointXY::x, and pcl::PointXY::y.
|
inlineprotected |
Class get name method.
Definition at line 412 of file texture_mapping.h.
|
inline |
computes UV coordinates of point, observed by one particular camera
[in] | pt | XYZ point to project on camera plane |
[in] | cam | the camera used for projection |
[out] | UV_coordinates | the resulting uv coordinates. Set to (-1.0,-1.0) if the point is not visible by the camera |
Definition at line 192 of file texture_mapping.h.
References pcl::texture_mapping::Camera::center_h, pcl::texture_mapping::Camera::center_w, pcl::texture_mapping::Camera::focal_length, pcl::texture_mapping::Camera::focal_length_h, pcl::texture_mapping::Camera::focal_length_w, pcl::texture_mapping::Camera::height, and pcl::texture_mapping::Camera::width.
|
inlineprotected |
computes UV coordinates of point, observed by one particular camera
[in] | pt | XYZ point to project on camera plane |
[in] | cam | the camera used for projection |
[out] | UV_coordinates | the resulting UV coordinates. Set to (-1.0,-1.0) if the point is not visible by the camera |
Definition at line 992 of file texture_mapping.hpp.
References pcl::texture_mapping::Camera::center_h, pcl::texture_mapping::Camera::center_w, pcl::texture_mapping::Camera::focal_length, pcl::texture_mapping::Camera::focal_length_h, pcl::texture_mapping::Camera::focal_length_w, pcl::texture_mapping::Camera::height, pcl::texture_mapping::Camera::width, pcl::PointXY::x, and pcl::PointXY::y.
|
inlineprotected |
Returns the circumcenter of a triangle and the circle's radius.
see https://en.wikipedia.org/wiki/Circumcenter for formulas.
[in] | p1 | first point of the triangle. |
[in] | p2 | second point of the triangle. |
[in] | p3 | third point of the triangle. |
[out] | circumcenter | resulting circumcenter |
[out] | radius | the radius of the circumscribed circle. |
Definition at line 943 of file texture_mapping.hpp.
References pcl::PointXY::x, and pcl::PointXY::y.
|
inlineprotected |
Returns the centroid of a triangle and the corresponding circumscribed circle's radius.
yield a tighter circle than getTriangleCircumcenterAndSize.
[in] | p1 | first point of the triangle. |
[in] | p2 | second point of the triangle. |
[in] | p3 | third point of the triangle. |
[out] | circumcenter | resulting circumcenter |
[out] | radius | the radius of the circumscribed circle. |
Definition at line 976 of file texture_mapping.hpp.
References pcl::PointXY::x, and pcl::PointXY::y.
|
inlineprotected |
Returns true if all the vertices of one face are projected on the camera's image plane.
[in] | camera | camera on which to project the face. |
[in] | p1 | first point of the face. |
[in] | p2 | second point of the face. |
[in] | p3 | third point of the face. |
[out] | proj1 | UV coordinates corresponding to p1. |
[out] | proj2 | UV coordinates corresponding to p2. |
[out] | proj3 | UV coordinates corresponding to p3. |
Definition at line 1062 of file texture_mapping.hpp.
|
inline |
Check if a point is occluded using raycasting on octree.
[in] | pt | XYZ from which the ray will start (toward the camera) |
[in] | octree | the octree used for raycasting. It must be initialized with a cloud transformed into the camera's frame |
Definition at line 359 of file texture_mapping.hpp.
void pcl::TextureMapping< PointInT >::mapMultipleTexturesToMeshUV | ( | pcl::TextureMesh & | tex_mesh, |
pcl::texture_mapping::CameraVector & | cams | ||
) |
Map textures acquired from a set of cameras onto a mesh.
With UV mapping, the mesh must be divided into NbCamera + 1 sub-meshes. Each sub-mesh corresponding to the faces visible by one camera. The last submesh containing all non-visible faces
[in] | tex_mesh | texture mesh |
[in] | cams | cameras used for UV mapping |
Definition at line 281 of file texture_mapping.hpp.
References pcl::TextureMesh::cloud, pcl::fromPCLPointCloud2(), pcl::texture_mapping::Camera::pose, pcl::TextureMesh::tex_coordinates, pcl::TextureMesh::tex_materials, pcl::TextureMesh::tex_polygons, pcl::texture_mapping::Camera::texture_file, and pcl::transformPointCloud().
|
protected |
Map texture to a face.
[in] | p1 | the first point |
[in] | p2 | the second point |
[in] | p3 | the third point |
Definition at line 47 of file texture_mapping.hpp.
void pcl::TextureMapping< PointInT >::mapTexture2Mesh | ( | pcl::TextureMesh & | tex_mesh | ) |
Map texture to a mesh synthesis algorithm.
[in] | tex_mesh | texture mesh |
Definition at line 145 of file texture_mapping.hpp.
References pcl::TextureMesh::cloud, pcl::PCLPointCloud2::data, pcl::PCLPointCloud2::fields, pcl::PCLPointCloud2::height, pcl::TextureMesh::tex_coordinates, pcl::TextureMesh::tex_materials, pcl::TextureMesh::tex_polygons, and pcl::PCLPointCloud2::width.
void pcl::TextureMapping< PointInT >::mapTexture2MeshUV | ( | pcl::TextureMesh & | tex_mesh | ) |
Map texture to a mesh UV mapping.
[in] | tex_mesh | texture mesh |
Definition at line 197 of file texture_mapping.hpp.
References pcl::TextureMesh::cloud, pcl::PCLPointCloud2::data, pcl::PCLPointCloud2::fields, pcl::PCLPointCloud2::height, pcl::TextureMesh::tex_coordinates, pcl::TextureMesh::tex_materials, pcl::TextureMesh::tex_polygons, and pcl::PCLPointCloud2::width.
void pcl::TextureMapping< PointInT >::removeOccludedPoints | ( | const pcl::TextureMesh & | tex_mesh, |
pcl::TextureMesh & | cleaned_mesh, | ||
const double | octree_voxel_size | ||
) |
Remove occluded points from a textureMesh.
[in] | tex_mesh | input mesh, on witch to perform occlusion detection |
[out] | cleaned_mesh | resulting mesh, containing only visible points |
[in] | octree_voxel_size | octree resolution (in meters) |
Definition at line 462 of file texture_mapping.hpp.
References pcl::TextureMesh::cloud, pcl::fromPCLPointCloud2(), and pcl::TextureMesh::tex_polygons.
void pcl::TextureMapping< PointInT >::removeOccludedPoints | ( | const pcl::TextureMesh & | tex_mesh, |
PointCloudPtr & | filtered_cloud, | ||
const double | octree_voxel_size | ||
) |
Remove occluded points from a textureMesh.
[in] | tex_mesh | input mesh, on witch to perform occlusion detection |
[out] | filtered_cloud | resulting cloud, containing only visible points |
[in] | octree_voxel_size | octree resolution (in meters) |
Definition at line 515 of file texture_mapping.hpp.
References pcl::TextureMesh::cloud, and pcl::fromPCLPointCloud2().
void pcl::TextureMapping< PointInT >::removeOccludedPoints | ( | const PointCloudPtr & | input_cloud, |
PointCloudPtr & | filtered_cloud, | ||
const double | octree_voxel_size, | ||
pcl::Indices & | visible_indices, | ||
pcl::Indices & | occluded_indices | ||
) |
Remove occluded points from a point cloud.
[in] | input_cloud | the cloud on which to perform occlusion detection |
[out] | filtered_cloud | resulting cloud, containing only visible points |
[in] | octree_voxel_size | octree resolution (in meters) |
[out] | visible_indices | will contain indices of visible points |
[out] | occluded_indices | will contain indices of occluded points |
Definition at line 398 of file texture_mapping.hpp.
References pcl::octree::OctreePointCloud< PointT, LeafContainerT, BranchContainerT, OctreeT >::addPointsFromInputCloud(), pcl::octree::OctreePointCloud< PointT, LeafContainerT, BranchContainerT, OctreeT >::defineBoundingBox(), pcl::octree::OctreePointCloudSearch< PointT, LeafContainerT, BranchContainerT >::getIntersectedVoxelIndices(), and pcl::octree::OctreePointCloud< PointT, LeafContainerT, BranchContainerT, OctreeT >::setInputCloud().
|
inline |
Set mesh scale control.
[in] | f |
Definition at line 127 of file texture_mapping.h.
References pcl::TextureMapping< PointInT >::f_.
|
inline |
Set texture files.
[in] | tex_files | list of texture files |
Definition at line 149 of file texture_mapping.h.
References pcl::TextureMapping< PointInT >::tex_files_.
|
inline |
Set texture materials.
[in] | tex_material | texture material |
Definition at line 158 of file texture_mapping.h.
References pcl::TextureMapping< PointInT >::tex_material_.
|
inline |
Set vector field.
[in] | x | data point x |
[in] | y | data point y |
[in] | z | data point z |
Definition at line 138 of file texture_mapping.h.
References pcl::TextureMapping< PointInT >::vector_field_.
void pcl::TextureMapping< PointInT >::showOcclusions | ( | const PointCloudPtr & | input_cloud, |
pcl::PointCloud< pcl::PointXYZI >::Ptr & | colored_cloud, | ||
const double | octree_voxel_size, | ||
const bool | show_nb_occlusions = true , |
||
const int | max_occlusions = 4 |
||
) |
Colors a point cloud, depending on its occlusions.
If showNbOcclusions is set to True, each point is colored depending on the number of points occluding it. Else, each point is given a different a 0 value is not occluded, 1 if occluded. By default, the number of occlusions is bounded to 4.
[in] | input_cloud | input cloud on which occlusions will be computed. |
[out] | colored_cloud | resulting colored cloud showing the number of occlusions per point. |
[in] | octree_voxel_size | octree resolution (in meters). |
[in] | show_nb_occlusions | If false, color information will only represent. |
[in] | max_occlusions | Limit the number of occlusions per point. |
Definition at line 616 of file texture_mapping.hpp.
References pcl::octree::OctreePointCloud< PointT, LeafContainerT, BranchContainerT, OctreeT >::addPointsFromInputCloud(), pcl::octree::OctreePointCloud< PointT, LeafContainerT, BranchContainerT, OctreeT >::defineBoundingBox(), pcl::euclideanDistance(), pcl::octree::OctreePointCloudSearch< PointT, LeafContainerT, BranchContainerT >::getIntersectedVoxelIndices(), pcl::_PointXYZI::intensity, pcl::PointCloud< PointT >::points, and pcl::octree::OctreePointCloud< PointT, LeafContainerT, BranchContainerT, OctreeT >::setInputCloud().
void pcl::TextureMapping< PointInT >::showOcclusions | ( | pcl::TextureMesh & | tex_mesh, |
pcl::PointCloud< pcl::PointXYZI >::Ptr & | colored_cloud, | ||
double | octree_voxel_size, | ||
bool | show_nb_occlusions = true , |
||
int | max_occlusions = 4 |
||
) |
Colors the point cloud of a Mesh, depending on its occlusions.
If showNbOcclusions is set to True, each point is colored depending on the number of points occluding it. Else, each point is given a different a 0 value is not occluded, 1 if occluded. By default, the number of occlusions is bounded to 4.
[in] | tex_mesh | input mesh on which occlusions will be computed. |
[out] | colored_cloud | resulting colored cloud showing the number of occlusions per point. |
[in] | octree_voxel_size | octree resolution (in meters). |
[in] | show_nb_occlusions | If false, color information will only represent. |
[in] | max_occlusions | Limit the number of occlusions per point. |
Definition at line 690 of file texture_mapping.hpp.
References pcl::TextureMesh::cloud, and pcl::fromPCLPointCloud2().
int pcl::TextureMapping< PointInT >::sortFacesByCamera | ( | pcl::TextureMesh & | tex_mesh, |
pcl::TextureMesh & | sorted_mesh, | ||
const pcl::texture_mapping::CameraVector & | cameras, | ||
const double | octree_voxel_size, | ||
PointCloud & | visible_pts | ||
) |
Segment faces by camera visibility.
Point-based segmentation.
With N camera, faces will be arranged into N+1 groups: 1 for each camera, plus 1 for faces not visible from any camera.
[in] | tex_mesh | input mesh that needs sorting. Must contain only 1 sub-mesh. |
[in] | sorted_mesh | resulting mesh, will contain nbCamera + 1 sub-mesh. |
[in] | cameras | vector containing the cameras used for texture mapping. |
[in] | octree_voxel_size | octree resolution (in meters) |
[out] | visible_pts | cloud containing only visible points |
Definition at line 530 of file texture_mapping.hpp.
References pcl::TextureMesh::cloud, pcl::fromPCLPointCloud2(), pcl::TextureMesh::tex_polygons, and pcl::transformPointCloud().
void pcl::TextureMapping< PointInT >::textureMeshwithMultipleCameras | ( | pcl::TextureMesh & | mesh, |
const pcl::texture_mapping::CameraVector & | cameras | ||
) |
Segment and texture faces by camera visibility.
Face-based segmentation.
With N camera, faces will be arranged into N+1 groups: 1 for each camera, plus 1 for faces not visible from any camera. The mesh will also contain uv coordinates for each face
mesh | input mesh that needs sorting. Should contain only 1 sub-mesh. | |
[in] | cameras | vector containing the cameras used for texture mapping. |
Definition at line 702 of file texture_mapping.hpp.
References pcl::TextureMesh::cloud, pcl::fromPCLPointCloud2(), pcl::texture_mapping::UvIndex::idx_cloud, pcl::texture_mapping::UvIndex::idx_face, pcl::PointCloud< PointT >::points, pcl::KdTreeFLANN< PointT, Dist >::radiusSearch(), pcl::KdTreeFLANN< PointT, Dist >::setInputCloud(), pcl::TextureMesh::tex_coordinates, pcl::TextureMesh::tex_polygons, pcl::transformPointCloud(), pcl::PointXY::x, and pcl::PointXY::y.
|
protected |
mesh scale control.
Definition at line 334 of file texture_mapping.h.
Referenced by pcl::TextureMapping< PointInT >::setF().
|
protected |
list of texture files
Definition at line 340 of file texture_mapping.h.
Referenced by pcl::TextureMapping< PointInT >::setTextureFiles().
|
protected |
list of texture materials
Definition at line 343 of file texture_mapping.h.
Referenced by pcl::TextureMapping< PointInT >::setTextureMaterials().
|
protected |
vector field
Definition at line 337 of file texture_mapping.h.
Referenced by pcl::TextureMapping< PointInT >::setVectorField().