The MORPH_DISTANCE function estimates N-dimensional distance maps, which contain for each foreground pixel the distance to the nearest background pixel, using a given norm. Available norms include non-diagonal neighbors, chessboard, city block, and approximate Euclidean distance.
The distance map is useful for a variety of morphological operations: thinning, erosion and dilation by discs of radius r, and granulometry.
Examples
The following code reads a data file in the IDL Demo data directory containing a magnified image of grains of pollen. It then applies a threshold and the morphological distance operator. Thresholding the resulting distance operator with a value of “n” produces the equivalent of eroding the thresholded image with a disc of radius “n”.
DEVICE, DECOMPOSED=0
path=FILEPATH('pollens.jpg',SUBDIR=['examples','demo','demodata'])
READ_JPEG, path, img
WINDOW, 0, XSIZE=700, YSIZE=540
XYOUTS, 180, 525, 'Original Image', ALIGNMENT=.5, /DEVICE
TV, img, 20, 280
thresh = img GE 140B
XYOUTS, 520, 525, 'Thresholded Image', ALIGNMENT=.5, /DEVICE
TVSCL, thresh, 360, 280
edist = MORPH_DISTANCE(thresh, NEIGHBOR_SAMPLING = 3)
XYOUTS, 180, 265, 'Distance Function', ALIGNMENT=.5, /DEVICE
TVSCL, edist, 20, 20
XYOUTS, 520, 265, 'After erosion with disc of radius 5', $
ALIGNMENT=.5, /DEVICE
TVSCL, edist GT 5, 360, 20
Syntax
Result = MORPH_DISTANCE (Data [, /BACKGROUND] [, NEIGHBOR_SAMPLING={1 | 2 | 3 }] [, /NO_COPY] )
Return Value
The returned variable is an array of the same dimension as the input array.
Arguments
Data
An input binary array. Zero-valued pixels are considered to be part of the background.
Keywords
BACKGROUND
By default, the distance is computed for the foreground (non-zero) features in the Data argument. Set this keyword to compute the distance of the background features instead of the foreground features. If the keyword is set, elements of Result that are on an edge are set to 0.
NEIGHBOR_SAMPLING
Set this keyword to indicate how the distance of each neighbor from a given pixel is determined. Valid values include:
- 0 = default. No diagonal neighbors. Each neighbor is assigned a distance of 1.
- 1 = chessboard. Each neighbor is assigned a distance of 1.
- 2 = city block. Each neighbor is assigned a distance corresponding to the number of pixels to be visited when traveling from the current pixel to the neighbor. (The path can only take 90 degree turns; no diagonal paths are allowed.)
- 3 = approximate Euclidean distance. Each neighbor is assigned an approximate Euclidean distance, where the distances along the diagonals and the center row and column are correct, but for speed the off-diagonal elements are approximated by adding together the distances after the square root.
Default Two Dimensional Example
1
1 X 1
1
Chessboard Two-Dimensional Example
1 1 1
1 X 1
1 1 1
City Block Two-Dimensional Example:
2 1 2
1 X 1
2 1 2
Approximate Euclidean Distance Two-Dimensional Example
sqrt(2) 1 sqrt(2)
1 X 1
sqrt(2) 1 sqrt(2)
NO_COPY
Set this keyword to request that the input array be reused, if possible. If this keyword is set, the input argument is undefined upon return.
Version History
See Also
DILATE, ERODE, MORPH_CLOSE, MORPH_GRADIENT, MORPH_HITORMISS, MORPH_OPEN, MORPH_THIN, MORPH_TOPHAT