DIST Function
Standard Library function that generates a square array in which each element equals the Euclidean distance from the nearest corner.
Usage
Input Parameters
n — The size of the resulting array.
m — If this parameter is supplied, the function generates a rectangular Euclidean distance array.
Returned Value
result — The resulting floating-point array.
Keywords
None.
Discussion
DIST generates a square array in which each element is proportional to its frequency. A three-dimensional plot of this function displays a surface where each quadrant is a curved quadrilateral forming a common cusp at the center.
The result of the DIST function is an n-by-n single-precision floating-point array, as defined by:
where:
F(x) = x if 0 ≤ x < n/2
or:
F(x) = n – 1 – x if x ≥ n/2
The DIST function is particularly useful for creating arrays that can be used for frequency domain filtering in image and signal processing applications.
Note: DIST is an excellent choice when you need a two-dimensional array of any size for a fast test display. |
If the optional parameter m is supplied, the result is an n-by-m rectangular Euclidean distance array.
Example 1
Use the commands:
test_arr = DIST(60) LOADCT, 18 ; Display data as a 2D plot WINDOW, /Free PLOT, test_arr, Background=WoColorConvert(255), Color=WoColorConvert(0) ; Display data as a contour plot WINDOW, /Free CONTOUR, test_arr, Background=WoColorConvert(255), Color=WoColorConvert(0), $ Thick=2.0, Nlevels=9, $ C_Colors=WoColorConvert([50, 75, 100, 125, 150, 175, 200, 225, 250]) ; Display data as a surface WINDOW, /Free SURFACE, test_arr, Linestyle=2, Background=WoColorConvert(255), $ Color=WoColorConvert(0) ; Display data as a shaded surface WINDOW, /Free SHADE_SURF, test_arr, Background=WoColorConvert(255), Color=WoColorConvert(0) ; Display data as an image test_img = DIST(300) WINDOW, Xsize=300, Ysize=300, /Free TVSCL, test_img, 3
to create an array and display that array using multiple methods. The results are shown in the following images.
|
|
|
|
|
Example 2
This example shows how to use the DIST function to filter an image.
; Read the demo image. mandril = BYTARR(512,512) OPENR, unit, !Data_dir + 'mandril.img', /Get_lun READU, unit, mandril FREE_LUN, unit ; Use the DIST function to create a frequency image of the same ; size as the demo image. d = DIST(512) ; Set n, the order (steepness) of Butterworth filter to use, and ; d0, the cutoff frequency. n = 1.0 d0 = 10.0 ; Create a Butterworth low-pass filter to be applied to the image. filter = 1.0 / (1.0 + (d/d0)^(2.0 * n)) ; Filter the image by transforming it to the frequency domain, ; multiplying by the filter, and then transforming back to the ; spatial domain. filt_image = FFT(FFT(mandril, -1) * filter, 1) ; Display the original image. WINDOW, XSize=1024, YSize=512, /Free, $ Title='Original Image (left) - Filtered Image (right)' TVSCL, mandril, 2 ; Display the resulting image. TVSCL, filt_image, 1
See Also
For more information, see on frequency domain techniques, see the PV‑WAVE User Guide.