zoukankan      html  css  js  c++  java
  • 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 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.

     

     

     

  • 相关阅读:
    四则运算2
    大二第二学期阅读计划
    第一周课堂练习
    《人月神话》读后感
    软件工程概论总结第十一章
    软件工程概论总结第十章
    软件工程概论总结第九章
    软件工程概论总结第八章
    软件工程概论总结第七章
    第五章、软件过程中的形式化方法
  • 原文地址:https://www.cnblogs.com/rockman/p/3946658.html
Copyright © 2011-2022 走看看