Image Component Library (ICL)
|
#include <PointCloudNormalEstimator.h>
Public Member Functions | |
PointCloudNormalEstimator (utils::Size size) | |
Create new PointCloudNormalEstimator with given internal image size. More... | |
virtual | ~PointCloudNormalEstimator () |
Destructor. More... | |
const core::Img8u & | calculate (const core::Img32f &depthImage, bool filter, bool average, bool gauss) |
One call function for calculation of the complete processingpipeline. More... | |
void | setDepthImage (const core::Img32f &depthImg) |
Sets the input depth image (input for median filter). More... | |
void | applyMedianFilter () |
Calculates a filtered image using a median filter. More... | |
const core::Img32f & | getFilteredDepthImage () |
Returns the filtered depth image. More... | |
void | setFilteredDepthImage (const core::Img32f &filteredImg) |
Sets the (filtered) depth image (input for normal calculation) More... | |
void | applyNormalCalculation () |
Calculates the point normals. More... | |
void | applyTemporalNormalAveraging () |
Recalculates the normals by temporal averaging within a given time window. More... | |
void | applyGaussianNormalSmoothing () |
Recalculates the normals by gaussian smoothing in a given range. More... | |
const Vec * | getNormals () |
Returns the Pointer to the normals. More... | |
void | applyWorldNormalCalculation (const Camera &cam) |
Transforms the normals to the world space and calculates normal image. More... | |
const Vec * | getWorldNormals () |
Returns the point normals in world space. More... | |
const core::Img8u & | getRGBNormalImage () |
Returns the RGB normal image. More... | |
void | setNormals (Vec *pNormals) |
Sets the point normals (input for angle image calculation). More... | |
void | applyAngleImageCalculation () |
Calculates the angle image. More... | |
const core::Img32f & | getAngleImage () |
Returns the angle image. More... | |
void | setAngleImage (const core::Img32f &angleImg) |
Sets the angle image (input for image binarization). More... | |
void | applyImageBinarization () |
Binarizes the angle image to detect edges. More... | |
const core::Img8u & | getBinarizedAngleImage () |
Returns the binarized angle image (final output). More... | |
void | setMedianFilterSize (int size) |
Sets the mask size for applyMedianFilter() More... | |
void | setNormalCalculationRange (int range) |
Sets the range for applyNormalCalculation(). More... | |
void | setNormalAveragingRange (int range) |
Sets the averaging range for applyNormalAveraging() More... | |
void | setAngleNeighborhoodMode (int mode) |
Sets the neighborhood mode for applyAngleImageCalculation() More... | |
void | setAngleNeighborhoodRange (int range) |
Sets the neighborhood range for applyAngleImageCalculation() More... | |
void | setBinarizationThreshold (float threshold) |
Sets the binarization threshold for applyImageBinarization(). More... | |
void | setUseCL (bool use) |
Sets openCL enabled/disabled. Enabling has no effect if no openCL. More... | |
void | setUseNormalAveraging (bool use) |
Sets normal averaging enabled/disabled. More... | |
void | setUseGaussSmoothing (bool use) |
Sets normal averaging by gauss smoothing enabled/disabled. More... | |
bool | isCLReady () |
Returns the openCL status. More... | |
bool | isCLActive () |
Returns the openCL activation status. More... | |
Private Attributes | |
Data * | m_data |
internal data type More... | |
Additional Inherited Members | |
Protected Member Functions inherited from icl::utils::Uncopyable | |
Uncopyable () | |
Empty base constructor. More... | |
Utility class for point cloud normal and depth-edge estimation This class is a normal estimator and edge detector for depth images. It uses OpenCL for hardware parallelization if a compatible GPU is found. Given an input depth image, it computes 3D normals to obtain a binarized image that describes edges in the depth image. The implementation does not use a straight forward implementation that would try to use common linear filters to compute depth image edges. Instead, a point-wise normal image to measure high local curvature is computed. large angles of neighbored point normals indicate high local curvature. The resulting binary image provides well formed information for further point cloud processing steps such as segmentation.
All intermediate results (such as the point normal image) can be accessed externally. In addition also setter functions for intermediate results can be used if these are obtained from another source. By these means, also only parts of the processing pipeline can be used
TODO Andre?
icl::geom::PointCloudNormalEstimator::PointCloudNormalEstimator | ( | utils::Size | size | ) |
Create new PointCloudNormalEstimator with given internal image size.
Constructs an object of this class. All default parameters are set. Use setters for desired values.
size | size of the input depth image |
|
virtual |
Destructor.
void icl::geom::PointCloudNormalEstimator::applyAngleImageCalculation | ( | ) |
Calculates the angle image.
The mode is set by setAngleNeighborhoodMode(int mode). The range is set by setAngleNeighborhoodRange(int range)
void icl::geom::PointCloudNormalEstimator::applyGaussianNormalSmoothing | ( | ) |
Recalculates the normals by gaussian smoothing in a given range.
Alternative to applyTemporalNormalAveraging that uses a simpler gaussian filter for smoothing
if it is enabled width setUseNormalAveraging(bool use). The range is set by setNormalAveragingRange(int range). Alternative: normalAveraging() with setUseGaussSmoothing(false).
void icl::geom::PointCloudNormalEstimator::applyImageBinarization | ( | ) |
Binarizes the angle image to detect edges.
The threshold is set by setBinarizationThreshold(float threshold).
void icl::geom::PointCloudNormalEstimator::applyMedianFilter | ( | ) |
Calculates a filtered image using a median filter.
The mask size is set by setMedianFilterSize(int size)
void icl::geom::PointCloudNormalEstimator::applyNormalCalculation | ( | ) |
Calculates the point normals.
The range for calculation is set by setNormalCalculationRange(int range).
void icl::geom::PointCloudNormalEstimator::applyTemporalNormalAveraging | ( | ) |
Recalculates the normals by temporal averaging within a given time window.
This reduces the noise of the normal image. The function is called from calculateNormals() if it is enabled width setUseNormalAveraging(bool use). The range is set by setNormalAveragingRange(int range).
Alternative: normalGaussSmoothing() with setUseGaussSmoothing(true).
void icl::geom::PointCloudNormalEstimator::applyWorldNormalCalculation | ( | const Camera & | cam | ) |
Transforms the normals to the world space and calculates normal image.
cam | the camera of the depth image |
const core::Img8u& icl::geom::PointCloudNormalEstimator::calculate | ( | const core::Img32f & | depthImage, |
bool | filter, | ||
bool | average, | ||
bool | gauss | ||
) |
One call function for calculation of the complete processingpipeline.
Order: ((filter)->normals->(normalAvg)->angles->binarization)
depthImage | the input depth image |
filter | enable/disable filtering |
average | enable/disable normal averaging |
gauss | true=gauss smoothing, false=linear smoothing |
const core::Img32f& icl::geom::PointCloudNormalEstimator::getAngleImage | ( | ) |
Returns the angle image.
const core::Img8u& icl::geom::PointCloudNormalEstimator::getBinarizedAngleImage | ( | ) |
Returns the binarized angle image (final output).
const core::Img32f& icl::geom::PointCloudNormalEstimator::getFilteredDepthImage | ( | ) |
Returns the filtered depth image.
const Vec* icl::geom::PointCloudNormalEstimator::getNormals | ( | ) |
Returns the Pointer to the normals.
const core::Img8u& icl::geom::PointCloudNormalEstimator::getRGBNormalImage | ( | ) |
Returns the RGB normal image.
const Vec* icl::geom::PointCloudNormalEstimator::getWorldNormals | ( | ) |
Returns the point normals in world space.
bool icl::geom::PointCloudNormalEstimator::isCLActive | ( | ) |
Returns the openCL activation status.
(true=openCL enabled, false=openCL disabled). The status can be set by setUseCL(bool use).
bool icl::geom::PointCloudNormalEstimator::isCLReady | ( | ) |
Returns the openCL status.
(true=openCL context ready, false=no openCL context available)
void icl::geom::PointCloudNormalEstimator::setAngleImage | ( | const core::Img32f & | angleImg | ) |
Sets the angle image (input for image binarization).
This call is not necessary if angleImageCalculation() is executed before.
angleImg | the angle image |
void icl::geom::PointCloudNormalEstimator::setAngleNeighborhoodMode | ( | int | mode | ) |
Sets the neighborhood mode for applyAngleImageCalculation()
0=max, 1=mean. (default 0)
mode | the neighborhood mode |
void icl::geom::PointCloudNormalEstimator::setAngleNeighborhoodRange | ( | int | range | ) |
Sets the neighborhood range for applyAngleImageCalculation()
(default 3, min 1)
range | the neighborhood range |
void icl::geom::PointCloudNormalEstimator::setBinarizationThreshold | ( | float | threshold | ) |
Sets the binarization threshold for applyImageBinarization().
Value n for acos(n). A value of 0 maps to 90 degree, a value of 1 maps to o degree (default 0.89)
threshold | binarization threshold |
void icl::geom::PointCloudNormalEstimator::setDepthImage | ( | const core::Img32f & | depthImg | ) |
Sets the input depth image (input for median filter).
depthImg | the input depth image |
void icl::geom::PointCloudNormalEstimator::setFilteredDepthImage | ( | const core::Img32f & | filteredImg | ) |
Sets the (filtered) depth image (input for normal calculation)
This call is not necessary if medianFilter() is executed before
filteredImg | the (filtered) depth image |
void icl::geom::PointCloudNormalEstimator::setMedianFilterSize | ( | int | size | ) |
Sets the mask size for applyMedianFilter()
size n corresponds to mask size n x n. (default 3, min 3, max 9, odd only)
size | the mask size |
void icl::geom::PointCloudNormalEstimator::setNormalAveragingRange | ( | int | range | ) |
Sets the averaging range for applyNormalAveraging()
(default 1)
range | the normal averaging range |
void icl::geom::PointCloudNormalEstimator::setNormalCalculationRange | ( | int | range | ) |
Sets the range for applyNormalCalculation().
(default 2)
range | the normal calculation range |
void icl::geom::PointCloudNormalEstimator::setNormals | ( | Vec * | pNormals | ) |
Sets the point normals (input for angle image calculation).
This call is not necessary if normalCalculation() is executed before.
pNormals | the point normals |
void icl::geom::PointCloudNormalEstimator::setUseCL | ( | bool | use | ) |
Sets openCL enabled/disabled. Enabling has no effect if no openCL.
context is available. (default true=enabled)
use | enable/disable openCL |
void icl::geom::PointCloudNormalEstimator::setUseGaussSmoothing | ( | bool | use | ) |
Sets normal averaging by gauss smoothing enabled/disabled.
(default false=linear smoothing if normal averaging enabled)
use | enable/disable gauss smoothing |
void icl::geom::PointCloudNormalEstimator::setUseNormalAveraging | ( | bool | use | ) |
Sets normal averaging enabled/disabled.
(default true=enabled)
use | enable/disable normal averaging |
|
private |
internal data type
internal data pointer