首页 > 代码库 > Dist 函数详解

Dist 函数详解

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 idl2on_error,2              ;Return to caller if an error occursn1 = n[0]m1 = (n_elements(m) le 0) ? n1 : m[0]x=findgen(n1)        ;Make a rowx = (x < (n1-x)) ^ 2    ;column squaresa = FLTARR(n1,m1,/NOZERO)    ;Make arrayfor 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 ;Symmetricalendforreturn,aend

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.

 

 

 

Dist 函数详解