CCCoreLib 31 May 2022
CloudCompare Core algorithms
Public Member Functions | Static Protected Member Functions | List of all members
CCCoreLib::SaitoSquaredDistanceTransform Class Reference

Class to compute a Squared Distance Field with the Saito algorithm on a 3D grid. More...

#include <SaitoSquaredDistanceTransform.h>

Inheritance diagram for CCCoreLib::SaitoSquaredDistanceTransform:
Inheritance graph
[legend]
Collaboration diagram for CCCoreLib::SaitoSquaredDistanceTransform:
Collaboration graph
[legend]

Public Member Functions

 SaitoSquaredDistanceTransform ()=default
 Default constructor.
 
bool initGrid (const Tuple3ui &gridSize)
 Initializes the grid. More...
 
bool initDT (GenericIndexedMesh *mesh, PointCoordinateType cellLength, const CCVector3 &gridMinCorner, GenericProgressCallback *progressCb=nullptr)
 Initializes the distance transform with a mesh.
 
bool initDT (GenericCloud *cloud, PointCoordinateType cellLength, const CCVector3 &gridMinCorner, GenericProgressCallback *progressCb=nullptr)
 Initializes the distance transform with a cloud.
 
bool propagateDistance (GenericProgressCallback *progressCb=nullptr)
 Computes the exact Squared Distance Transform on the whole grid. More...
 
- Public Member Functions inherited from CCCoreLib::Grid3D< unsigned >
 Grid3D ()
 Default constructor.
 
const Tuple3uisize () const
 Returns the grid dimensions.
 
bool isInitialized () const
 Returns whether the grid has been initialized or not.
 
void clear ()
 Clears the grid. More...
 
bool init (unsigned di, unsigned dj, unsigned dk, unsigned margin, GridElement defaultCellValue=0)
 Initializes the grid. More...
 
Tuple3i computeCellPos (const CCVector3 &P, const CCVector3 &gridMinCorner, PointCoordinateType cellSize) const
 Computes the (grid) cell position that contains a given point.
 
bool intersectWith (GenericIndexedMesh *mesh, PointCoordinateType cellLength, const CCVector3 &gridMinCorner, GridElement intersectValue=0, GenericProgressCallback *progressCb=nullptr)
 Intersects this grid with a mesh.
 
bool intersectWith (GenericIndexedMesh *mesh, PointCoordinateType cellLength, const CCVector3 &gridMinCorner, genericCellTriIntersectionAction action, GenericProgressCallback *progressCb=nullptr)
 Intersects this grid with a mesh (generic form)
 
bool intersectWith (GenericCloud *cloud, PointCoordinateType cellLength, const CCVector3 &gridMinCorner, GridElement intersectValue=0, GenericProgressCallback *progressCb=nullptr)
 Intersects this grid with a cloud.
 
void setValue (int i, int j, int k, GridElement value)
 Sets the value of a given cell. More...
 
void setValue (const Tuple3i &cellPos, GridElement value)
 Sets the value of a given cell. More...
 
const GridElementgetValue (int i, int j, int k) const
 Returns the value of a given cell (const version) More...
 
GridElementgetValue (int i, int j, int k)
 Returns the value of a given cell. More...
 
const GridElementgetValue (const Tuple3i &cellPos) const
 Returns the value of a given cell const version) More...
 
GridElementgetValue (const Tuple3i &cellPos)
 Returns the value of a given cell. More...
 
GridElementdata ()
 Gives access to the internal grid data (with margin)
 
const GridElementdata () const
 Gives access to the internal grid data (with margin) (const version)
 
unsigned innerCellCount () const
 Returns the number of cell count (whithout margin)
 
unsigned totalCellCount () const
 Returns the total number of cell count (with margin)
 

Static Protected Member Functions

static bool EDT_1D (GridElement *slice, std::size_t r, std::size_t c)
 1D Euclidean Distance Transform
 
static bool SDT_2D (Grid3D< GridElement > &image, std::size_t sliceIndex, const std::vector< GridElement > &sq)
 2D Exact Squared Distance Transform
 
static bool SDT_3D (Grid3D< GridElement > &image, GenericProgressCallback *progressCb=nullptr)
 3D Exact Squared Distance Transform
 

Additional Inherited Members

- Public Types inherited from CCCoreLib::Grid3D< unsigned >
using GridElement = unsigned
 Cell type.
 
using genericCellTriIntersectionAction = std::function< void(const Tuple3i &, unsigned)>
 Generic function applied to a cell intersected by a triangle (used by the generic form of intersectWith)
 
- Protected Member Functions inherited from CCCoreLib::Grid3D< unsigned >
int pos2index (int i, int j, int k) const
 Converts a 3D position to an absolute index.
 
- Protected Attributes inherited from CCCoreLib::Grid3D< unsigned >
std::vector< GridElementm_grid
 Grid data.
 
Tuple3ui m_innerSize
 Dimensions of the grid (without margin)
 
unsigned m_margin
 Margin.
 
unsigned m_rowSize
 1D row size (with margin)
 
unsigned m_sliceSize
 2D slice size (with margin)
 
unsigned m_innerCellCount
 3D grid size without margin
 
unsigned m_totalCellCount
 3D grid size with margin
 
unsigned m_marginShift
 First index of real data (i.e. after marin)
 

Detailed Description

Class to compute a Squared Distance Field with the Saito algorithm on a 3D grid.

Member Function Documentation

◆ initGrid()

bool CCCoreLib::SaitoSquaredDistanceTransform::initGrid ( const Tuple3ui gridSize)
inline

Initializes the grid.

The memory for the grid must be explicitelty reserved prior to any action.

Returns
true if the initialization succeeded

◆ propagateDistance()

bool CCCoreLib::SaitoSquaredDistanceTransform::propagateDistance ( GenericProgressCallback progressCb = nullptr)
inline

Computes the exact Squared Distance Transform on the whole grid.

Propagates the distances on the whole grid.

Base on the implementation by R. Fabbri (which is itslef based on
two independent implementations by O. Cuisenaire and J. C. Torelli).

PAPER
T. Saito and J.I. Toriwaki, "New algorithms for Euclidean distance
transformations of an n-dimensional digitised picture with applications",
Pattern Recognition, 27(11), pp. 1551-1565, 1994

\warning Output distances are squared

\param progressCb progress callback (optional)
\return success

The documentation for this class was generated from the following files: