# graydist

Gray-weighted distance transform of grayscale image

## Syntax

`T = graydist(A,mask)T = graydist(A,C,R)T = graydist(A,ind)T = graydist(...,method)`

## Description

`T = graydist(A,mask)` computes the gray-weighted distance transform of the grayscale image `A`. Locations where `mask` is `true` are seed locations.

`T = graydist(A,C,R)` uses vectors `C` and `R` to specify the row and column coordinates of seed locations.

`T = graydist(A,ind)` specifies the linear indices of seed locations using the vector `ind`.

`T = graydist(...,method)` specifies an alternate distance metric. `method` determines the chamfer weights that are assigned to the local neighborhood during outward propagation. Each pixel's contribution to the geodesic time is based on the chamfer weight in a particular direction multiplied by the pixel intensity.

## Input Arguments

`A`

Grayscale image.

`mask`

Logical image the same size as `A` that specifies seed locations.

`C,R`

Numeric vectors that contain the positive integer row and column coordinates of the seed locations. Coordinate values are valid `C`,`R` subscripts in `A`.

`ind`

Numeric vector of positive integer, linear indices of seed locations.

`method`

Type of distance metric. `method` can have any of these values.

MethodDescription

`'cityblock'`

In 2-D, the cityblock distance between (x1,y1) and (x2,y2) is │x1x2│ + │y1y2│.

`'chessboard'`

The chessboard distance is
max(│x1x2│,│y1y2│).

`'quasi-euclidean'`

The quasi-Euclidean distance is

Default: `'chessboard'`

## Output Arguments

 `T` Array the same size as `A` that specifies the gray-weighted distance transform. If the input numeric type of `A` is `double`, the output numeric type of `T` is `double`. If the input is any other numeric type, the output `T` is single.

## Class Support

`A` can be numeric or logical, and it must be nonsparse. `mask` is a logical array of the same size as `A`. `C`, `R`, and `ind` are numeric vectors that contain positive integer values.

The output `T` is an array of the same size as `A`. If the input numeric type of `A` is `double`, the output `T` is `double`. If the input is any other numeric type, the output `T` is `single`.

## Examples

Matrices generated by the `magic` function have equal row, column and diagonal sums. The minimum path between the upper left and lower right corner is along the diagonal. The following example demonstrates how the `graydist` function computes this path:

```A = magic(3) T1 = graydist(A,1,1); T2 = graydist(A,3,3); T = T1 + T2```
```A = 8 1 6 3 5 7 4 9 2 T = 10 11 17 13 10 13 17 17 10 ```

As expected, there is a constant-value minimum path along the diagonal.

collapse all

### Algorithms

`graydist` uses the geodesic time algorithm described in Soille, P., Generalized geodesy via geodesic time,, Pattern Recognition Letters, vol.15, December 1994; pp. 1235–1240

The basic equation for geodesic time along a path is:

${\tau }_{f}\left(P\right)=\frac{f\left({p}_{o}\right)}{2}+\frac{f\left({p}_{l}\right)}{2}+\sum _{i=1}^{l-1}f\left({p}_{i}\right)$