清晰度的计算

对于清晰度的计算,我查看了一些文献,其中涉及的算法原理基本相同,本日志主要是采用较早的一种算法是如何在idl中实现的,其中的一些参数的理解还需要深入研究,有什么不足之处请大家多多指教!
 

发表这篇文章主要是想给大家介绍一下3*3窗口的遍历运算过程,希望对大家所有帮助!

PRO Information

COMPILE_OPT idl2
ENVI, /restore_base_save_files
envi_batch_init
infile = ENVI_PICKFILE(title = '请选择要打开的文件:')
ENVI_OPEN_FILE, infile, r_fid=fid
IF (fid EQ -1) THEN BEGIN
    ENVI_BATCH_EXIT
    RETURN
ENDIF
ENVI_FILE_QUERY, fid, dims=dims, nb=nb ,nl=nl,ns=ns
pos = LINDGEN(nb)
;    proj = ENVI_GET_PROJECTION(FID = fid,pixel_size=Dx)
Dx = 1
; print,Dx
; data = indgen(nl,ns)
;
;;清晰度的计算
;
FOR g=0,nb-1 DO BEGIN
    data = ENVI_GET_DATA(DIMS=dims, FID=fid , POS=g)
    new_data = make_array(ns,nl)
    HELP,data
    Den = nl*ns
;    print,Den
    ;ns&nl写反了
    FOR i = 1,ns-2 DO BEGIN
      FOR j = 1,nl-2 DO BEGIN
        ;获取一个3*3的窗口
        t= data[[i-1]:[i+1],[j-1]:[j+1]]
        ;      help,t
        ;对每个窗口做计算
        d1=ABS((t[0,0]-t[1,1])/(Dx*1.414))
        d2=ABS(t[0,1]-t[1,1])/(Dx*1.0)
        d3=ABS(t[0,2]-t[1,1])/(Dx*1.414)
        d4=ABS(t[1,0]-t[1,1])/(Dx*1.0)
        d5=ABS(t[1,2]-t[1,1])/(Dx*1.0)
        d6=ABS(t[2,0]-t[1,1])/(Dx*1.414)
        d7=ABS(t[2,1]-t[1,1])/(Dx*1.0)
        d8=ABS(t[2,2]-t[1,1])/(Dx*1.414)
        ;计算每个窗口的df/dx
        new_data[i,j]=d1+d2+d3+d4+d5+d6+d7+d8
       
      ENDFOR
    ENDFOR
    dd = total(new_data)
;    print,dd
    utdata = (dd/Den)/1000
    print,outdata
    ;
    ;;保存文件
    ;
    utfile = infile+'_band'+StrTrim(g,2)+'.txt'
    ;    utfile = dialog_pickfile(title = '保存结果到TXT文档:',filter = '*.txt')
    print,outfile
    openw,lun,outfile,/get_lun
   
    printf,lun,'清晰度:',outdata
   
    free_lun,lun
   
ENDFOR

END


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值