这几天在弄一个阈值分类的事情。比如当NDVI大于0的时候是属于植被的,小于0为其他,以前做的时候就采用ENVI的决策树或者掩膜处理,之后就会生成一个二值化的影像。现在,想弄个程序,批量的得出分类之后的二值化影像。当然这个适用于一系列的影像的阈值分类。废话不说了,看程序。我是在IDL中实现的。
pro yuzhi_class
;输出阈值分类过的二值化影像
compile_opt strictarr
COMPILE_OPT idl2
envi, /restore_base_save_files
envi_batch_init, log_file='batch.txt',/NO_STATUS_WINDOW
dir1='***************' ;输入路径。比如说我这里是NDVI的影像(也可以是其他的指数的影像)
out_dir='*************' ;输出路径
files1=file_search(dir1,'*.tif');我这里是tif影像,如果是其他的影像格式就可以写成其他的
for i=0,n_elements(files1)-1 do begin
ENVI_OPEN_FILE, files1[i], r_fid=fid, /no_realize
ENVI_FILE_QUERY, fid, nl=nl, ns=ns,dims=dims,nb=nb
mapinfo=envi_get_map_info(fid=fid)
mapinfo1=mapinfo
file1=ENVI_GET_DATA(fid=fid,dims=dims,pos=0)
low_row=N_elements(file1[0,*]);获取行数
low_col=N_elements(file1[*,0]);获取列数
ndvi=make_array(low_col,low_row,value=0.0)
for a=0,low_col-1 do begin;获取列数
for b=0,low_row-1 do begin;获取行数,应该是先列后行
if file1[a,b] GT 0.1 then begin;当影像大于0.1时,等于1,小于则等于0
ndvi[a,b]=1
endif else begin
ndvi[a,b]=0
endelse
endfor
endfor
outfile8=out_dir+'\'+strmid(file_basename(files1[i]),0,49)+'.RF.tif'
ENVI_WRITE_ENVI_FILE,ndvi,r_fid=fid,map_info=MapInfo1,out_name=outfile8
endfor
end
虽然不是复杂高级的代码,但是我个人认为这个还是很实用的。希望对各位有帮助!
长路漫漫…
唯有坚持…