Image Component Library (ICL)
|
Utility class that allows to create 3D (optionally colored) point clouds from given 2D core::depth images. More...
#include <PointCloudCreator.h>
Public Types | |
enum | DepthImageMode { DistanceToCamCenter, DistanceToCamPlane, KinectRAW11Bit } |
Representation of the given core::depth images. More... | |
Public Member Functions | |
PointCloudCreator () | |
creates a null instance More... | |
PointCloudCreator (const Camera &depthCam, DepthImageMode mode=DistanceToCamPlane) | |
creates a new instance with given core::depth camera (no rgbd mapping is available then) More... | |
PointCloudCreator (const Camera &depthCam, const Camera &colorCam, DepthImageMode mode=DistanceToCamPlane) | |
creates a new instance with given core::depth camera and color camera for rgbd mapping More... | |
PointCloudCreator (const PointCloudCreator &other) | |
deep copy constructor More... | |
PointCloudCreator & | operator= (const PointCloudCreator &other) |
deep copy assginment operator More... | |
~PointCloudCreator () | |
Destructor. More... | |
void | init (const Camera &depthCam, DepthImageMode mode=DistanceToCamPlane) |
initializes with given core::depth camera (no rgbd mapping is available then) More... | |
void | init (const Camera &depthCam, const Camera &colorCam, DepthImageMode mode=DistanceToCamPlane) |
initializes with given core::depth camera and color camera for rgbd mapping More... | |
void | create (const core::Img32f &depthImage, PointCloudObjectBase &destination, const core::Img8u *rgbImage=0, float depthScaling=1, bool addDepthFeature=false) |
creates a point cloud More... | |
const Camera & | getDepthCamera () const |
returns the current core::depth camera More... | |
const Camera & | getColorCamera () const |
returns the current camera camera (if this was not given, an exception is thrown) More... | |
void | setCameras (const Camera &depthCam, const Camera &colorCam) |
sets new cameras (reinitializes data structures internally) More... | |
void | setDepthCamera (const Camera &depthCam) |
sets the internally used depthCamera More... | |
bool | hasColorCamera () const |
returns whether a color camera was given (and therefore whether RGBD-mapping is supported) More... | |
void | mapImage (const core::ImgBase *src, core::ImgBase **dst, const core::Img32f *depthImageMM=0) |
maps another given image just like the rgbImage would be mapped More... | |
void | setUseCL (bool use) |
Enables/disables openCL accelaration. More... | |
RGBDMapping | getMapping () const |
returns the internal mapping More... | |
void | setFixes (float focalLengthMultiplier=1, float positionOffsetAlongNorm=0) |
sets up internal heuristical fixes applied to the used depth camera parameters More... | |
core::DataSegment< float, 2 > | getColorTexturePoints () |
returns for each pointcloud point the corresponding color image point More... | |
core::DataSegment< float, 2 > | getNormalizedColorTexturePoints () |
returns the normalized color texture points (normalized with color image size to range 0 to 1) More... | |
Private Attributes | |
Data * | m_data |
Utility class that allows to create 3D (optionally colored) point clouds from given 2D core::depth images.
The PointCloudCreator utility class can be used to two differenct modes. It's basic functionality is to transform a core::depth-image into a 3D point cloud. For this, a Camera instances is needed, which can be obtained from ICL's camera calibration tool icl-cam-calib-2 for real core::depth cameras such as Kinect.
If also a second camera file is provided for the color camera, then the PointCloudCreator class can also be used for mapping optionally given RGB-byte images to the contained point's colors.
Representation of the given core::depth images.
Depth image values can either be understood as distance values to the the camera center or as distances from the camera's viewing plane
Enumerator | |
---|---|
DistanceToCamCenter | distances are given w.r.t. the camera center |
DistanceToCamPlane | distances are given w.r.t. the camera plance |
KinectRAW11Bit | default kinect raw values in range [0,2047] |
icl::geom::PointCloudCreator::PointCloudCreator | ( | ) |
creates a null instance
icl::geom::PointCloudCreator::PointCloudCreator | ( | const Camera & | depthCam, |
DepthImageMode | mode = DistanceToCamPlane |
||
) |
creates a new instance with given core::depth camera (no rgbd mapping is available then)
icl::geom::PointCloudCreator::PointCloudCreator | ( | const Camera & | depthCam, |
const Camera & | colorCam, | ||
DepthImageMode | mode = DistanceToCamPlane |
||
) |
creates a new instance with given core::depth camera and color camera for rgbd mapping
icl::geom::PointCloudCreator::PointCloudCreator | ( | const PointCloudCreator & | other | ) |
deep copy constructor
icl::geom::PointCloudCreator::~PointCloudCreator | ( | ) |
Destructor.
void icl::geom::PointCloudCreator::create | ( | const core::Img32f & | depthImage, |
PointCloudObjectBase & | destination, | ||
const core::Img8u * | rgbImage = 0 , |
||
float | depthScaling = 1 , |
||
bool | addDepthFeature = false |
||
) |
creates a point cloud
If the PointCloudCreator instance is set up to provide color information and the destionation point cloud does not support color information, the detination point cloud is tried to be adapted using PointCloudObjectBase::canAddFeature and PointCloudObjectBase::addFeature. If add depthFeature is set to true, the destination pointcloud is tryed to be endowed with a depth feature segment
const Camera& icl::geom::PointCloudCreator::getColorCamera | ( | ) | const |
returns the current camera camera (if this was not given, an exception is thrown)
core::DataSegment<float,2> icl::geom::PointCloudCreator::getColorTexturePoints | ( | ) |
returns for each pointcloud point the corresponding color image point
const Camera& icl::geom::PointCloudCreator::getDepthCamera | ( | ) | const |
returns the current core::depth camera
RGBDMapping icl::geom::PointCloudCreator::getMapping | ( | ) | const |
returns the internal mapping
Only if both- depth and camera camera parameters are available. Please note, that the returned shallowly copies the internal depth camera viewray array
core::DataSegment<float,2> icl::geom::PointCloudCreator::getNormalizedColorTexturePoints | ( | ) |
returns the normalized color texture points (normalized with color image size to range 0 to 1)
bool icl::geom::PointCloudCreator::hasColorCamera | ( | ) | const |
returns whether a color camera was given (and therefore whether RGBD-mapping is supported)
void icl::geom::PointCloudCreator::init | ( | const Camera & | depthCam, |
DepthImageMode | mode = DistanceToCamPlane |
||
) |
initializes with given core::depth camera (no rgbd mapping is available then)
void icl::geom::PointCloudCreator::init | ( | const Camera & | depthCam, |
const Camera & | colorCam, | ||
DepthImageMode | mode = DistanceToCamPlane |
||
) |
initializes with given core::depth camera and color camera for rgbd mapping
void icl::geom::PointCloudCreator::mapImage | ( | const core::ImgBase * | src, |
core::ImgBase ** | dst, | ||
const core::Img32f * | depthImageMM = 0 |
||
) |
maps another given image just like the rgbImage would be mapped
src | image assumed to be captured from the perspective of the color camera |
dst | destimation image (automatically adapted) |
depthImageMM | optionally given depth image (if NULL, then the last depthImage passed to the "create"-is used, which should usually be the right one) |
PointCloudCreator& icl::geom::PointCloudCreator::operator= | ( | const PointCloudCreator & | other | ) |
deep copy assginment operator
sets new cameras (reinitializes data structures internally)
This functions is relatively complex, so it should be performed only when it is needed
void icl::geom::PointCloudCreator::setDepthCamera | ( | const Camera & | depthCam | ) |
sets the internally used depthCamera
This functions is relatively complex, so it should be performed only when it is needed. After using this function, the creator will have no color camera any more
void icl::geom::PointCloudCreator::setFixes | ( | float | focalLengthMultiplier = 1 , |
float | positionOffsetAlongNorm = 0 |
||
) |
sets up internal heuristical fixes applied to the used depth camera parameters
focalLengthMultiplier | is used as multiplicative adaption to the orginal depth camera's focal length. 1 is the neutral value for this |
positionOffsetAlongNorm | is used as additive displacement for the used depth camera along the camera's view normal |
void icl::geom::PointCloudCreator::setUseCL | ( | bool | use | ) |
Enables/disables openCL accelaration.
In case of having no opencl support, this function does nothing
|
private |