mindspore.train.HausdorffDistance
- class mindspore.train.HausdorffDistance(distance_metric='euclidean', percentile=None, directed=False, crop=True)[source]
Calculates the Hausdorff distance. Hausdorff distance is the maximum and minimum distance between two point sets. Given two feature sets A and B, the Hausdorff distance between two point sets A and B is defined as follows:
\[\begin{split}\begin{array}{ll} \\ H(A, B) = \text{max}[h(A, B), h(B, A)]\\ h(A, B) = \underset{a \in A}{\text{max}}\{\underset{b \in B}{\text{min}} \rVert a - b \rVert \}\\ h(B, A) = \underset{b \in B}{\text{max}}\{\underset{a \in A}{\text{min}} \rVert b - a \rVert \} \end{array}\end{split}\]where \(h(A, B)\) is the maximum distance of a set A to the nearest point in the set B, \(h(B, A)\) is the maximum distance of a set B to the nearest point in the set A. The distance calculation is oriented, which means that most of times \(h(A, B)\) is not equal to \(h(B, A)\). \(H(A, B)\) is the two-way Hausdorff distance.
- Parameters
distance_metric (string) – Three distance measurement methods are supported:
"euclidean"
(Euclidean Distance) ,"chessboard"
(Chessboard Distance, Chebyshev Distance) or"taxicab"
(Taxicab Distance, Manhattan Distance). Default:"euclidean"
.percentile (float) – Floating point numbers between 0 and 100. Specify the percentile parameter to get the percentile of the Hausdorff distance. Default:
None
.directed (bool) – If True, it only calculates h(y_pred, y) distance, otherwise, max(h(y_pred, y), h(y, y_pred)) will be returned. Default:
False
.crop (bool) – Crop input images and only keep the foregrounds. In order to maintain two inputs' shapes, here the bounding box is achieved by (y_pred | y) which represents the union set of two images. Default:
True
.
- Supported Platforms:
Ascend
GPU
CPU
Examples
>>> import numpy as np >>> from mindspore import Tensor >>> from mindspore.train import HausdorffDistance >>> >>> x = Tensor(np.array([[3, 0, 1], [1, 3, 0], [1, 0, 2]])) >>> y = Tensor(np.array([[0, 2, 1], [1, 2, 1], [0, 0, 1]])) >>> metric = HausdorffDistance() >>> metric.clear() >>> metric.update(x, y, 0) >>> mean_average_distance = metric.eval() >>> print(mean_average_distance) 1.4142135623730951
- eval()[source]
Calculate the no-directed or directed Hausdorff distance.
- Returns
numpy.float64, the hausdorff distance.
- Raises
RuntimeError – If the update method is not called first, an error will be reported.
- update(*inputs)[source]
Updates the internal evaluation result with the inputs: 'y_pred', 'y' and 'label_idx'.
- Parameters
inputs – Input 'y_pred', 'y' and 'label_idx'. 'y_pred' and 'y' are a Tensor, list or numpy.ndarray. 'y_pred' is the predicted binary image. 'y' is the actual binary image. Data type of 'label_idx' is int or float.
- Raises
ValueError – If the number of the inputs is not 3.
TypeError – If the data type of label_idx is not int or float.
ValueError – If the value of label_idx is not in y_pred or y.
ValueError – If y_pred and y have different shapes.