1、Dist函數的算法如下(很顯然該算法的本質就是常說的歐氏距離算法)
R(i,j) = SQRT(F(i)^2 + G(j)^2) where:
F(i) = i IF 0 <= i <= n/2
= n-i IF i > n/2
G(i) = i IF 0 <= i <= m/2
= m-i IF i > m/2
圖解:tvscl,dist(200)
擴展:SURFACE, DIST(20), /SAVE
IDL實現源碼:
; $Id: //depot/Release/ENVI51_IDL83/idl/idldir/lib/dist.pro#1 $ ; ; Copyright (c) 1982-2013, Exelis Visual Information Solutions, Inc. All ; rights reserved. Unauthorized reproduction is prohibited. ; ;+ ; NAME: ; DIST ; ; PURPOSE: ; Create a rectangular array in which each element is proportional ; to its frequency. This array may be used for a variety ; of purposes, including frequency-domain filtering and ; making pretty pictures. ; ; CATEGORY: ; Signal Processing. ; ; CALLING SEQUENCE: ; Result = DIST(N [, M]) ; ; INPUTS: ; N = number of columns in result. ; M = number of rows in result. If omitted, N is used to return ; a square array. ; ; OUTPUTS: ; Returns an (N,M) floating array in which: ; ; R(i,j) = SQRT(F(i)^2 + G(j)^2) where: ; F(i) = i IF 0 <= i <= n/2 ; = n-i IF i > n/2 ; G(i) = i IF 0 <= i <= m/2 ; = m-i IF i > m/2 ; ; SIDE EFFECTS: ; None. ; ; RESTRICTIONS: ; None. ; ; PROCEDURE: ; Straightforward. The computation is done a row at a time. ; ; MODIFICATION HISTORY: ; Very Old. ; SMR, March 27, 1991 - Added the NOZERO keyword to increase efficiency. ; (Recomended by Wayne Landsman) ; DMS, July, 1992. - Added M parameter to make non-square arrays. ; CT, RSI, March 2000: Changed i^2 to i^2. to avoid overflow. ;- function dist,n,m ;Return a rectangular array in which each pixel = euclidian ;distance from the origin. compile_opt idl2 on_error,2 ;Return to caller if an error occurs n1 = n[0] m1 = (n_elements(m) le 0) ? n1 : m[0] x=findgen(n1) ;Make a row x = (x < (n1-x)) ^ 2 ;column squares a = FLTARR(n1,m1,/NOZERO) ;Make array for i=0L, m1/2 do begin ;Row loop y = sqrt(x + i^2.) ;Euclidian distance a[0,i] = y ;Insert the row if i ne 0 then a[0, m1-i] = y ;Symmetrical endfor return,a end
2、用法:
Dist(20,20)生成一個20×20的數組,當用戶輸入Dist(20),則默認行與列都是20。
3、IDL幫助的解釋:
DIST
The DIST function creates an array in which each array element value is proportional to its frequency. This array may be used for a variety of purposes, including frequency-domain filtering.
This routine is written in the IDL language. Its source code can be found in the file dist.pro in the lib subdirectory of the IDL distribution.
Examples
; Display the results of DIST as an image:
TVSCL, DIST(100)
Syntax
Result = DIST(N [, M])
Return Value
Returns a rectangular array in which the value of each element is proportional to its frequency.
Arguments
N
The number of columns in the resulting array.
M
The number of rows in the resulting array. If M is omitted, the resulting array will be N by N.
Keywords
None.