Metric class
Represents a metric to be used to create a dip::NeighborList
Contents
A metric describes the distance between a pixel and its neighbors. It also describes implicitly the size of a neighborhood, as the minimum neighborhood size required to propagate distances in the given metric.
Constructors, destructors, assignment and conversion operators
- Metric(dip::Metric::TypeCode type = TypeCode::CONNECTED, dip::uint param = 1)
- The default metric is the city distance (L1 metric).
- Metric(dip::String const& type, dip::uint param = 1, dip::PixelSize const& pixelSize = {})
- A string implicitly converts to a metric. more...
- Metric(dip::Image const& image)
- An image implicitly converts to a metric. more...
Enums
Functions
- auto HasPixelSize() const -> bool
- Returns true if the pixel size array is set (a non-empty array).
- auto Image() const -> dip::Image const&
- Retrieve the image.
- auto Param() const -> dip::uint
- Retrieve the parameter.
- auto PixelSize() const -> dip::FloatArray const&
- Retrieve the pixel size array. Note that this could be an empty array, or have any number of elements.
- void SetPixelSize(dip::PixelSize const& pixelSize)
- Sets the pixel size associated to the
Metric. Will overwrite an earlier defined pixel size. Note that when theMetricis defined by an image, the pixel size is ignored. - auto Type() const -> dip::Metric::TypeCode
- Retrieve the type code.
Enum documentation
Function documentation
Metric( dip::Metric::TypeCode type = TypeCode::CONNECTED, dip::uint param = 1)
The default metric is the city distance (L1 metric).
Metric( dip::String const& type, dip::uint param = 1, dip::PixelSize const& pixelSize = {})
A string implicitly converts to a metric.
Valid metrics are:
-
"connected": here,paramis the connectivity, see Connectivity for information on the connectivity parameter. A value of 1 corresponds to the city-block metric; a value of 0 indicates a connectivity equal to the image dimensionality, and corresponds to the chess-board metric. -
"chamfer": a chamfer metric.paramindicates the neighborhood size: A value of 1 gives a full 3x3 neighborhood (in 2D, or 3x3x3 in 3D, etc). A value of 2 gives the 5x5 chamfer neighborhood (i.e. the 3x3 neighborhood plus the pixels that are night’s move away from the origin). -
"city": L1 metric, equivalent to"connected"withparam=1. -
"chess": L∞ metric, equivalent to"connected"withparam= dimensionality. -
"4-connected"is equivalent to"connected"withparam=1. -
"8-connected"is equivalent to"connected"withparam=2. -
"6-connected"is equivalent to"connected"withparam=1. -
"18-connected"is equivalent to"connected"withparam=2. -
"28-connected"is equivalent to"connected"withparam=3.
The "chamfer" metrics (with param set to 1 or 2) for 2 and 3-dimensional images use optimized weights as
distances that lead to unbiased distance transforms (Verwer, 1991). All other metrics use Euclidean
distances.
The pixelSize parameter, if given, causes the neighbor’s distances to be scaled by the
pixel size. The units must be identical in all dimensions, and only the magnitude is used.
Metric( dip::Image const& image)
An image implicitly converts to a metric.
The image’s grey values are the metric distances. The image must have an odd size along each dimension, and be scalar and real-valued. The pixel in the middle of the image is the origin, and must have a value of 0.
For example, this 3 by 3 image:
+---+---+---+ | 0 | 2 | 0 | +---+---+---+ | 1 | 0 | 1 | +---+---+---+ | 0 | 2 | 0 | +---+---+---+
is equivalent to
dip::Metric( "city", 0, dip::PixelSize{ 1, 2 } )
If the image has a pixel size set, it is ignored. The SetPixelSize method has no effect on a Metric
defined in this way.
dip::Metric::TypeCode Type( ) const
Retrieve the type code.
dip::Image const& Image( ) const
Retrieve the image.
dip::FloatArray const& PixelSize( ) const
Retrieve the pixel size array. Note that this could be an empty array, or have any number of elements.
bool HasPixelSize( ) const
Returns true if the pixel size array is set (a non-empty array).
void SetPixelSize( dip::PixelSize const& pixelSize)
Sets the pixel size associated to the Metric. Will overwrite an earlier defined pixel size.
Note that when the Metric is defined by an image, the pixel size is ignored.