CCCoreLib 31 May 2022
CloudCompare Core algorithms
|
Class to compute a Squared Distance Field with the Saito algorithm on a 3D grid. More...
#include <SaitoSquaredDistanceTransform.h>
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 Tuple3ui & | size () 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 GridElement & | getValue (int i, int j, int k) const |
Returns the value of a given cell (const version) More... | |
GridElement & | getValue (int i, int j, int k) |
Returns the value of a given cell. More... | |
const GridElement & | getValue (const Tuple3i &cellPos) const |
Returns the value of a given cell const version) More... | |
GridElement & | getValue (const Tuple3i &cellPos) |
Returns the value of a given cell. More... | |
GridElement * | data () |
Gives access to the internal grid data (with margin) | |
const GridElement * | data () 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< GridElement > | m_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) | |
Class to compute a Squared Distance Field with the Saito algorithm on a 3D grid.
|
inline |
Initializes the grid.
The memory for the grid must be explicitelty reserved prior to any action.
|
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