Image Component Library (ICL)
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines
Public Member Functions | Private Attributes
icl::geom::PointCloudNormalEstimator Class Reference

#include <PointCloudNormalEstimator.h>

Inheritance diagram for icl::geom::PointCloudNormalEstimator:
icl::utils::Uncopyable

List of all members.

Public Member Functions

 PointCloudNormalEstimator (utils::Size size)
 Create new PointCloudNormalEstimator with given internal image size.
virtual ~PointCloudNormalEstimator ()
 Destructor.
const core::Img8ucalculate (const core::Img32f &depthImage, bool filter, bool average, bool gauss)
 One call function for calculation of the complete processingpipeline.
void setDepthImage (const core::Img32f &depthImg)
 Sets the input depth image (input for median filter).
void applyMedianFilter ()
 Calculates a filtered image using a median filter.
const core::Img32fgetFilteredDepthImage ()
 Returns the filtered depth image.
void setFilteredDepthImage (const core::Img32f &filteredImg)
 Sets the (filtered) depth image (input for normal calculation)
void applyNormalCalculation ()
 Calculates the point normals.
void applyTemporalNormalAveraging ()
 Recalculates the normals by temporal averaging within a given time window.
void applyGaussianNormalSmoothing ()
 Recalculates the normals by gaussian smoothing in a given range.
const VecgetNormals ()
 Returns the Pointer to the normals.
void applyWorldNormalCalculation (const Camera &cam)
 Transforms the normals to the world space and calculates normal image.
const VecgetWorldNormals ()
 Returns the point normals in world space.
const core::Img8ugetRGBNormalImage ()
 Returns the RGB normal image.
void setNormals (Vec *pNormals)
 Sets the point normals (input for angle image calculation).
void applyAngleImageCalculation ()
 Calculates the angle image.
const core::Img32fgetAngleImage ()
 Returns the angle image.
void setAngleImage (const core::Img32f &angleImg)
 Sets the angle image (input for image binarization).
void applyImageBinarization ()
 Binarizes the angle image to detect edges.
const core::Img8ugetBinarizedAngleImage ()
 Returns the binarized angle image (final output).
void setMedianFilterSize (int size)
 Sets the mask size for applyMedianFilter()
void setNormalCalculationRange (int range)
 Sets the range for applyNormalCalculation().
void setNormalAveragingRange (int range)
 Sets the averaging range for applyNormalAveraging()
void setAngleNeighborhoodMode (int mode)
 Sets the neighborhood mode for applyAngleImageCalculation()
void setAngleNeighborhoodRange (int range)
 Sets the neighborhood range for applyAngleImageCalculation()
void setBinarizationThreshold (float threshold)
 Sets the binarization threshold for applyImageBinarization().
void setUseCL (bool use)
 Sets openCL enabled/disabled. Enabling has no effect if no openCL.
void setUseNormalAveraging (bool use)
 Sets normal averaging enabled/disabled.
void setUseGaussSmoothing (bool use)
 Sets normal averaging by gauss smoothing enabled/disabled.
bool isCLReady ()
 Returns the openCL status.
bool isCLActive ()
 Returns the openCL activation status.

Private Attributes

Data * m_data
 internal data type

Detailed Description

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.

Internal Information

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

Detailed Description of the Processing Pipeline

TODO Andre?

  1. input depth image
  2. median filtering
  3. edge sensitive temporal smoothing
  4. normal estimation
  5. gaussian normal smoothing
  6. ... ???

Constructor & Destructor Documentation

Create new PointCloudNormalEstimator with given internal image size.

Constructs an object of this class. All default parameters are set. Use setters for desired values.

Parameters:
sizesize of the input depth image

Destructor.


Member Function Documentation

Calculates the angle image.

The mode is set by setAngleNeighborhoodMode(int mode). The range is set by setAngleNeighborhoodRange(int range)

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).

Binarizes the angle image to detect edges.

The threshold is set by setBinarizationThreshold(float threshold).

Calculates a filtered image using a median filter.

The mask size is set by setMedianFilterSize(int size)

Calculates the point normals.

The range for calculation is set by setNormalCalculationRange(int range).

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).

Transforms the normals to the world space and calculates normal image.

Parameters:
camthe 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)

Parameters:
depthImagethe input depth image
filterenable/disable filtering
averageenable/disable normal averaging
gausstrue=gauss smoothing, false=linear smoothing
Returns:
the binarized angle image

Returns the angle image.

Returns:
the angle image

Returns the binarized angle image (final output).

Returns:
the (final) binarized angle image

Returns the filtered depth image.

Returns:
the filtered depth image

Returns the Pointer to the normals.

Returns:
the point normals

Returns the RGB normal image.

Returns:
the RGB normal image

Returns the point normals in world space.

Returns:
the point normals in world space

Returns the openCL activation status.

(true=openCL enabled, false=openCL disabled). The status can be set by setUseCL(bool use).

Returns:
openCL enabled/disabled

Returns the openCL status.

(true=openCL context ready, false=no openCL context available)

Returns:
openCL context ready/unavailable

Sets the angle image (input for image binarization).

This call is not necessary if angleImageCalculation() is executed before.

Parameters:
angleImgthe angle image

Sets the neighborhood mode for applyAngleImageCalculation()

0=max, 1=mean. (default 0)

Parameters:
modethe neighborhood mode

Sets the neighborhood range for applyAngleImageCalculation()

(default 3, min 1)

Parameters:
rangethe neighborhood range

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)

Parameters:
thresholdbinarization threshold

Sets the input depth image (input for median filter).

Parameters:
depthImgthe input depth image

Sets the (filtered) depth image (input for normal calculation)

This call is not necessary if medianFilter() is executed before

Parameters:
filteredImgthe (filtered) depth image

Sets the mask size for applyMedianFilter()

size n corresponds to mask size n x n. (default 3, min 3, max 9, odd only)

Parameters:
sizethe mask size

Sets the averaging range for applyNormalAveraging()

(default 1)

Parameters:
rangethe normal averaging range

Sets the range for applyNormalCalculation().

(default 2)

Parameters:
rangethe normal calculation range

Sets the point normals (input for angle image calculation).

This call is not necessary if normalCalculation() is executed before.

Parameters:
pNormalsthe point normals

Sets openCL enabled/disabled. Enabling has no effect if no openCL.

context is available. (default true=enabled)

Parameters:
useenable/disable openCL

Sets normal averaging by gauss smoothing enabled/disabled.

(default false=linear smoothing if normal averaging enabled)

Parameters:
useenable/disable gauss smoothing

Sets normal averaging enabled/disabled.

(default true=enabled)

Parameters:
useenable/disable normal averaging

Member Data Documentation

internal data type

internal data pointer


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