IDL开发——计算植被覆盖度
一、实现功能
输入多波段tif影像,计算NDVI指数,按照5% 95%划分土壤和植被的NDVI值。计算植被覆盖度
二、IDL代码
1.主窗体
在主窗体中写明各base成分,标注event。
wButton3=WIDGET_BUTTON(wtemp2,value='植被覆盖度',event_pro='FVC'
2.event 事件
pro FVC,ev
COMPILE_OPT IDL2
ENVI,/RESTORE_BASE_SAVE_FILES
ENVI_Batch_init
filename=ENVI_PICKFILE(title='pick a file',filter='*.tif')
ENVI_OPEN_FILE,filename,r_fid=fid,/no_realize
ENVI_FILE_QUERY,fid,ns = numSample,nl = numLine,nb = numBand,$
data_type=dataType,dims = dims
mapInfo = ENVI_GET_MAP_INFO(FID=fid)
imageData = FLTARR(numSample,numLine,numBand)
NIR= FLTARR(numSample,numLine,1)
RED= FLTARR(numSample,numLine,1)
NDVI= FLTARR(numSample,numLine,1)
FVC1= FLTARR(numSample,numLine,1)
FOR i = 0,numBand-1 DO BEGIN
imageData[*,*,i] = ENVI_GET_DATA(fid = fid,dims = dims,pos = i)
ENDFOR
NIR=imageData[*,*,4]*1.0
RED=imageData[*,*,3]*1.0
NDVI=(float(NIR)-float(RED))/(float(NIR)+float(RED)+0.00001)
;*************************************************计算植s被覆盖度**************************************************
w=where(NDVI ge 0,count)
ht=histogram(NDVI[w],nbins=200,locations=locations)
ht_acc=total(ht,/cumulative)/count
w1=where(ht_acc gt 0.05)
NDVI_soil=locations[w1[0]]
print,NDVI_soil
w2=where(ht_acc gt 0.95)
NDVI_veg=locations[w2[0]]
print,NDVI_veg
FVC1=(NDVI-NDVI_soil)/(NDVI_veg-NDVI_soil+0.00000001)
w=WHERE(NDVI LE NDVI_soil or NDVI le 0)
FVC1[w]=0
w=WHERE(NDVI GE NDVI_veg)
FVC1[w]=1
DELVAR,imageData
o_file=dialog_pickfile(title='图像文件保存为')
write_image,o_file,'tiff',FVC1
end