pcl::TextureMapping< PointInT > Class Template Reference
[Module surface]

The texture mapping algorithm. More...

#include <pcl/surface/texture_mapping.h>

Collaboration diagram for pcl::TextureMapping< PointInT >:
Collaboration graph
[legend]

List of all members.

Public Types

typedef boost::shared_ptr
< PointInT > 
Ptr
typedef boost::shared_ptr
< const PointInT > 
ConstPtr
typedef pcl::PointCloud< PointInT > PointCloud
typedef PointCloud::Ptr PointCloudPtr
typedef PointCloud::ConstPtr PointCloudConstPtr
typedef
pcl::octree::OctreePointCloudSearch
< PointInT > 
Octree
typedef Octree::Ptr OctreePtr
typedef Octree::ConstPtr OctreeConstPtr
typedef
pcl::texture_mapping::Camera 
Camera
typedef
pcl::texture_mapping::UvIndex 
UvIndex

Public Member Functions

 TextureMapping ()
 Constructor.
 ~TextureMapping ()
 Destructor.
void setF (float f)
 Set mesh scale control.
void setVectorField (float x, float y, float z)
 Set vector field.
void setTextureFiles (std::vector< std::string > tex_files)
 Set texture files.
void setTextureMaterials (TexMaterial tex_material)
 Set texture materials.
void mapTexture2Mesh (pcl::TextureMesh &tex_mesh)
 Map texture to a mesh synthesis algorithm.
void mapTexture2MeshUV (pcl::TextureMesh &tex_mesh)
 Map texture to a mesh UV mapping.
void mapMultipleTexturesToMeshUV (pcl::TextureMesh &tex_mesh, pcl::texture_mapping::CameraVector &cams)
 Map textures acquired from a set of cameras onto a mesh.
bool getPointUVCoordinates (const pcl::PointXYZ &pt, const Camera &cam, Eigen::Vector2f &UV_coordinates)
 computes UV coordinates of point, observed by one particular camera
bool isPointOccluded (const pcl::PointXYZ &pt, const OctreePtr octree)
 Check if a point is occluded using raycasting on octree.
void removeOccludedPoints (const PointCloudPtr &input_cloud, PointCloudPtr &filtered_cloud, const double octree_voxel_size, std::vector< int > &visible_indices, std::vector< int > &occluded_indices)
 Remove occluded points from a point cloud.
void removeOccludedPoints (const pcl::TextureMesh &tex_mesh, pcl::TextureMesh &cleaned_mesh, const double octree_voxel_size)
 Remove occluded points from a textureMesh.
void removeOccludedPoints (const pcl::TextureMesh &tex_mesh, PointCloudPtr &filtered_cloud, const double octree_voxel_size)
 Remove occluded points from a textureMesh.
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.
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.
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.
void textureMeshwithMultipleCameras (pcl::TextureMesh &mesh, const pcl::texture_mapping::CameraVector &cameras)
 Segment and texture faces by camera visibility.

Protected Member Functions

std::vector< Eigen::Vector2f > mapTexture2Face (const Eigen::Vector3f &p1, const Eigen::Vector3f &p2, const Eigen::Vector3f &p3)
 Map texture to a face.
void getTriangleCircumcenterAndSize (const pcl::PointXY &p1, const pcl::PointXY &p2, const pcl::PointXY &p3, pcl::PointXY &circomcenter, double &radius)
 Returns the circumcenter of a triangle and the circle's radius.
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.
bool getPointUVCoordinates (const pcl::PointXYZ &pt, const Camera &cam, pcl::PointXY &UV_coordinates)
 computes UV coordinates of point, observed by one particular camera
bool isFaceProjected (const Camera &camera, const pcl::PointXYZ &p1, const pcl::PointXYZ &p2, const pcl::PointXYZ &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.
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.
std::string getClassName () const
 Class get name method.

Protected Attributes

float f_
 mesh scale control.
Eigen::Vector3f vector_field_
 vector field
std::vector< std::string > tex_files_
 list of texture files
TexMaterial tex_material_
 list of texture materials

Detailed Description

template<typename PointInT>
class pcl::TextureMapping< PointInT >

The texture mapping algorithm.

Author:
Khai Tran, Raphael Favier

Definition at line 84 of file texture_mapping.h.


Member Typedef Documentation

template<typename PointInT >
typedef pcl::texture_mapping::Camera pcl::TextureMapping< PointInT >::Camera

Definition at line 99 of file texture_mapping.h.

template<typename PointInT >
typedef boost::shared_ptr< const PointInT > pcl::TextureMapping< PointInT >::ConstPtr

Definition at line 89 of file texture_mapping.h.

template<typename PointInT >
typedef pcl::octree::OctreePointCloudSearch<PointInT> pcl::TextureMapping< PointInT >::Octree

Definition at line 95 of file texture_mapping.h.

template<typename PointInT >
typedef Octree::ConstPtr pcl::TextureMapping< PointInT >::OctreeConstPtr

Definition at line 97 of file texture_mapping.h.

template<typename PointInT >
typedef Octree::Ptr pcl::TextureMapping< PointInT >::OctreePtr

Definition at line 96 of file texture_mapping.h.

template<typename PointInT >
typedef pcl::PointCloud<PointInT> pcl::TextureMapping< PointInT >::PointCloud

Definition at line 91 of file texture_mapping.h.

template<typename PointInT >
typedef PointCloud::ConstPtr pcl::TextureMapping< PointInT >::PointCloudConstPtr

Definition at line 93 of file texture_mapping.h.

template<typename PointInT >
typedef PointCloud::Ptr pcl::TextureMapping< PointInT >::PointCloudPtr

Definition at line 92 of file texture_mapping.h.

template<typename PointInT >
typedef boost::shared_ptr< PointInT > pcl::TextureMapping< PointInT >::Ptr

Definition at line 88 of file texture_mapping.h.

template<typename PointInT >
typedef pcl::texture_mapping::UvIndex pcl::TextureMapping< PointInT >::UvIndex

Definition at line 100 of file texture_mapping.h.


Constructor & Destructor Documentation

template<typename PointInT >
pcl::TextureMapping< PointInT >::TextureMapping (  )  [inline]

Constructor.

Definition at line 103 of file texture_mapping.h.

template<typename PointInT >
pcl::TextureMapping< PointInT >::~TextureMapping (  )  [inline]

Destructor.

Definition at line 109 of file texture_mapping.h.


Member Function Documentation

template<typename PointInT >
bool pcl::TextureMapping< PointInT >::checkPointInsideTriangle ( const pcl::PointXY p1,
const pcl::PointXY p2,
const pcl::PointXY p3,
const pcl::PointXY pt 
) [inline, protected]

Returns True if a point lays within a triangle.

see http://www.blackpawn.com/texts/pointinpoly/default.html

Parameters:
[in] p1 first point of the triangle.
[in] p2 second point of the triangle.
[in] p3 third point of the triangle.
[in] pt the querry point.

Definition at line 1065 of file texture_mapping.hpp.

References pcl::PointXY::x, and pcl::PointXY::y.

Referenced by pcl::TextureMapping< PointInT >::textureMeshwithMultipleCameras().

template<typename PointInT >
std::string pcl::TextureMapping< PointInT >::getClassName (  )  const [inline, protected]

Class get name method.

Definition at line 388 of file texture_mapping.h.

template<typename PointInT >
bool pcl::TextureMapping< PointInT >::getPointUVCoordinates ( const pcl::PointXYZ pt,
const Camera cam,
pcl::PointXY UV_coordinates 
) [inline, protected]

computes UV coordinates of point, observed by one particular camera

Parameters:
[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
Returns:
false if the point is not visible by the camera

Definition at line 1038 of file texture_mapping.hpp.

References pcl::texture_mapping::Camera::focal_length, pcl::texture_mapping::Camera::height, pcl::texture_mapping::Camera::width, pcl::PointXY::x, and pcl::PointXY::y.

template<typename PointInT >
bool pcl::TextureMapping< PointInT >::getPointUVCoordinates ( const pcl::PointXYZ pt,
const Camera cam,
Eigen::Vector2f &  UV_coordinates 
) [inline]

computes UV coordinates of point, observed by one particular camera

Parameters:
[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
Returns:
false if the point is not visible by the camera

Definition at line 182 of file texture_mapping.h.

References pcl::texture_mapping::Camera::focal_length, pcl::texture_mapping::Camera::height, and pcl::texture_mapping::Camera::width.

Referenced by pcl::TextureMapping< PointInT >::isFaceProjected(), pcl::TextureMapping< PointInT >::mapMultipleTexturesToMeshUV(), and pcl::TextureMapping< PointInT >::sortFacesByCamera().

template<typename PointInT >
void pcl::TextureMapping< PointInT >::getTriangleCircumcenterAndSize ( const pcl::PointXY p1,
const pcl::PointXY p2,
const pcl::PointXY p3,
pcl::PointXY circomcenter,
double &  radius 
) [inline, protected]

Returns the circumcenter of a triangle and the circle's radius.

see http://en.wikipedia.org/wiki/Circumcenter for formulas.

Parameters:
[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 989 of file texture_mapping.hpp.

References pcl::PointXY::x, and pcl::PointXY::y.

template<typename PointInT >
void pcl::TextureMapping< PointInT >::getTriangleCircumcscribedCircleCentroid ( const pcl::PointXY p1,
const pcl::PointXY p2,
const pcl::PointXY p3,
pcl::PointXY circumcenter,
double &  radius 
) [inline, protected]

Returns the centroid of a triangle and the corresponding circumscribed circle's radius.

yield a tighter circle than getTriangleCircumcenterAndSize.

Parameters:
[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 1022 of file texture_mapping.hpp.

References pcl::PointXY::x, and pcl::PointXY::y.

Referenced by pcl::TextureMapping< PointInT >::textureMeshwithMultipleCameras().

template<typename PointInT >
bool pcl::TextureMapping< PointInT >::isFaceProjected ( const Camera camera,
const pcl::PointXYZ p1,
const pcl::PointXYZ p2,
const pcl::PointXYZ p3,
pcl::PointXY proj1,
pcl::PointXY proj2,
pcl::PointXY proj3 
) [inline, protected]

Returns true if all the vertices of one face are projected on the camera's image plane.

Parameters:
[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 1091 of file texture_mapping.hpp.

References pcl::TextureMapping< PointInT >::getPointUVCoordinates().

Referenced by pcl::TextureMapping< PointInT >::textureMeshwithMultipleCameras().

template<typename PointInT >
bool pcl::TextureMapping< PointInT >::isPointOccluded ( const pcl::PointXYZ pt,
const OctreePtr  octree 
) [inline]

Check if a point is occluded using raycasting on octree.

Parameters:
[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
Returns:
true if the point is occluded.

Definition at line 377 of file texture_mapping.hpp.

template<typename PointInT >
void pcl::TextureMapping< PointInT >::mapMultipleTexturesToMeshUV ( pcl::TextureMesh tex_mesh,
pcl::texture_mapping::CameraVector cams 
) [inline]

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

Parameters:
[in] tex_mesh texture mesh
[in] cams cameras used for UV mapping

Definition at line 287 of file texture_mapping.hpp.

References pcl::TextureMesh::cloud, pcl::fromPCLPointCloud2(), pcl::TextureMapping< PointInT >::getPointUVCoordinates(), pcl::PointCloud< PointT >::points, pcl::texture_mapping::Camera::pose, pcl::TextureMesh::tex_coordinates, pcl::TexMaterial::tex_file, pcl::TextureMapping< PointInT >::tex_material_, pcl::TextureMesh::tex_materials, pcl::TexMaterial::tex_name, pcl::TextureMesh::tex_polygons, pcl::texture_mapping::Camera::texture_file, and pcl::transformPointCloud().

template<typename PointInT >
std::vector< Eigen::Vector2f > pcl::TextureMapping< PointInT >::mapTexture2Face ( const Eigen::Vector3f &  p1,
const Eigen::Vector3f &  p2,
const Eigen::Vector3f &  p3 
) [inline, protected]

Map texture to a face.

Parameters:
[in] p1 the first point
[in] p2 the second point
[in] p3 the third point

Definition at line 46 of file texture_mapping.hpp.

References pcl::TextureMapping< PointInT >::f_, and pcl::TextureMapping< PointInT >::vector_field_.

Referenced by pcl::TextureMapping< PointInT >::mapTexture2Mesh().

template<typename PointInT >
void pcl::TextureMapping< PointInT >::mapTexture2Mesh ( pcl::TextureMesh tex_mesh  )  [inline]
template<typename PointInT >
void pcl::TextureMapping< PointInT >::mapTexture2MeshUV ( pcl::TextureMesh tex_mesh  )  [inline]
template<typename PointInT >
void pcl::TextureMapping< PointInT >::removeOccludedPoints ( const pcl::TextureMesh tex_mesh,
PointCloudPtr filtered_cloud,
const double  octree_voxel_size 
) [inline]

Remove occluded points from a textureMesh.

Parameters:
[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 539 of file texture_mapping.hpp.

References pcl::TextureMesh::cloud, pcl::fromPCLPointCloud2(), and pcl::TextureMapping< PointInT >::removeOccludedPoints().

template<typename PointInT >
void pcl::TextureMapping< PointInT >::removeOccludedPoints ( const pcl::TextureMesh tex_mesh,
pcl::TextureMesh cleaned_mesh,
const double  octree_voxel_size 
) [inline]

Remove occluded points from a textureMesh.

Parameters:
[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 483 of file texture_mapping.hpp.

References pcl::TextureMesh::cloud, pcl::fromPCLPointCloud2(), pcl::TextureMapping< PointInT >::removeOccludedPoints(), and pcl::TextureMesh::tex_polygons.

template<typename PointInT >
void pcl::TextureMapping< PointInT >::removeOccludedPoints ( const PointCloudPtr input_cloud,
PointCloudPtr filtered_cloud,
const double  octree_voxel_size,
std::vector< int > &  visible_indices,
std::vector< int > &  occluded_indices 
) [inline]

Remove occluded points from a point cloud.

Parameters:
[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 419 of file texture_mapping.hpp.

Referenced by pcl::TextureMapping< PointInT >::removeOccludedPoints(), and pcl::TextureMapping< PointInT >::sortFacesByCamera().

template<typename PointInT >
void pcl::TextureMapping< PointInT >::setF ( float  f  )  [inline]

Set mesh scale control.

Parameters:
[in] f 

Definition at line 117 of file texture_mapping.h.

References pcl::TextureMapping< PointInT >::f_.

template<typename PointInT >
void pcl::TextureMapping< PointInT >::setTextureFiles ( std::vector< std::string >  tex_files  )  [inline]

Set texture files.

Parameters:
[in] tex_files list of texture files

Definition at line 139 of file texture_mapping.h.

References pcl::TextureMapping< PointInT >::tex_files_.

template<typename PointInT >
void pcl::TextureMapping< PointInT >::setTextureMaterials ( TexMaterial  tex_material  )  [inline]

Set texture materials.

Parameters:
[in] tex_material texture material

Definition at line 148 of file texture_mapping.h.

References pcl::TextureMapping< PointInT >::tex_material_.

template<typename PointInT >
void pcl::TextureMapping< PointInT >::setVectorField ( float  x,
float  y,
float  z 
) [inline]

Set vector field.

Parameters:
[in] x data point x
[in] y data point y
[in] z data point z

Definition at line 128 of file texture_mapping.h.

References pcl::TextureMapping< PointInT >::vector_field_.

template<typename PointInT >
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 
) [inline]

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.

Parameters:
[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 731 of file texture_mapping.hpp.

References pcl::TextureMesh::cloud, pcl::fromPCLPointCloud2(), and pcl::TextureMapping< PointInT >::showOcclusions().

template<typename PointInT >
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 
) [inline]

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.

Parameters:
[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 651 of file texture_mapping.hpp.

References pcl::octree::OctreePointCloud< PointT, LeafContainerT, BranchContainerT >::addPointsFromInputCloud(), pcl::octree::OctreePointCloud< PointT, LeafContainerT, BranchContainerT >::defineBoundingBox(), pcl::euclideanDistance(), pcl::octree::OctreePointCloudSearch< PointT, LeafContainerT, BranchContainerT >::getIntersectedVoxelIndices(), pcl::_PointXYZI::intensity, pcl::PointCloud< PointT >::points, and pcl::octree::OctreePointCloud< PointT, LeafContainerT, BranchContainerT >::setInputCloud().

Referenced by pcl::TextureMapping< PointInT >::showOcclusions().

template<typename PointInT >
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 
) [inline]

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.

Parameters:
[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 554 of file texture_mapping.hpp.

References pcl::TextureMesh::cloud, pcl::fromPCLPointCloud2(), pcl::TextureMapping< PointInT >::getPointUVCoordinates(), pcl::PointCloud< PointT >::points, pcl::TextureMapping< PointInT >::removeOccludedPoints(), pcl::TextureMesh::tex_polygons, and pcl::transformPointCloud().

template<typename PointInT >
void pcl::TextureMapping< PointInT >::textureMeshwithMultipleCameras ( pcl::TextureMesh mesh,
const pcl::texture_mapping::CameraVector cameras 
) [inline]

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

Parameters:
in/out] tex_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 743 of file texture_mapping.hpp.

References pcl::TextureMapping< PointInT >::checkPointInsideTriangle(), pcl::TextureMesh::cloud, pcl::fromPCLPointCloud2(), pcl::TextureMapping< PointInT >::getTriangleCircumcscribedCircleCentroid(), pcl::texture_mapping::UvIndex::idx_cloud, pcl::texture_mapping::UvIndex::idx_face, pcl::TextureMapping< PointInT >::isFaceProjected(), 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.


Member Data Documentation

template<typename PointInT >
float pcl::TextureMapping< PointInT >::f_ [protected]

mesh scale control.

Definition at line 310 of file texture_mapping.h.

Referenced by pcl::TextureMapping< PointInT >::mapTexture2Face(), and pcl::TextureMapping< PointInT >::setF().

template<typename PointInT >
std::vector<std::string> pcl::TextureMapping< PointInT >::tex_files_ [protected]
template<typename PointInT >
TexMaterial pcl::TextureMapping< PointInT >::tex_material_ [protected]
template<typename PointInT >
Eigen::Vector3f pcl::TextureMapping< PointInT >::vector_field_ [protected]

The documentation for this class was generated from the following files:
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends