通过ENVI从遥感影像中随机取点

from Soe: IDL/ENVI 程序,在idl里面compile再运行。
左边是256*256的图像,取500个点去除重复的随机位置
window20070926.jpg

程序如下:
pro randompoints
 COMPILE_OPT IDL2 envi,/restore_base_save_files
 envi_batch_init

 envi_select,fid=fid,dims=dims,title=’打开影像文件’,/BAND_ONLY
 if fid eq -1 then return

 nl=dims[4]-dims[3]+1  & ns=dims[2]-dims[1]+1

 pic=envi_get_data(fid=fid, dims=dims,pos=0)
 window,XSIZE=ns*2, YSIZE=nl
 tv,pic,0

;设定点数量N
 N=500

;取图片的随机下标
 sample=round(RANDOMU(seed,N)*ns*nl)
;去除重复点
 sample=sample[sort(sample)]
 sample=sample[where(sample ne shift(sample,1),count)]

;点值
 samp_val=pic[sample]

 samp_loc=intarr(ns,nl)
 samp_loc[sample]=255
 tv,samp_loc,1

 file = DIALOG_PICKFILE(/WRITE, FILTER = ‘*.txt’, /OVERWRITE_PROMPT,DEFAULT_EXTENSION=’txt’)
 if file eq ” then return
 openw,outf,file,/get_lun
 printf, outf,”实取点数”,count
 printf, outf,”X”,sample mod ns
 printf, outf,”Y”,sample/ns
 printf, outf,”值”,samp_val
 free_lun,outf

 ENVI_BATCH_EXIT
end

Share with:

  • email
  • LinkedIn
  • Twitter
  • Facebook
  • del.icio.us
  • StumbleUpon
  • Reddit
  • Digg
  • 豆瓣

Related posts: