IDL 计算TVDI

介绍请看:http://blog.sina.com.cn/s/blog_764b1e9d0100wdrr.html

源码:

IDL 源码PRO TVDI,NDVI,LST,NBINS,RES
  RES = -1
  
  SZ1 = SIZE(NDVI,/DIMENSIONS)
  SZ2 = SIZE(LST,/DIMENSIONS)
  IF N_ELEMENTS(SZ1) NE 2 OR N_ELEMENTS(SZ2) NE 2 THEN RETURN
  IF TOTAL(ABS(SZ1 - SZ2)) NE 0 THEN RETURN
  IF ~ISA(NDVI,/NUMBER) AND ~ISA(LST,/NUMBER) THEN RETURN
  
  ;FIND DYR WET PTS
  RANGE = [0.0,1.0]
  NPT_FILTER = 200
  PTS = 50
  DRY_PTS = [0]
  WET_PTS = [0]
  
  IDX = FLOOR(NDVI * NBINS)
  FOR I = 0, NBINS DO BEGIN
    PT = WHERE(IDX EQ I,CNT)
    IF(CNT GT NPT_FILTER) THEN BEGIN
      II = SORT(LST[PT])
      DRY_PTS = [ DRY_PTS,PT[II[INDGEN(PTS)]] ]
      WET_PTS = [ WET_PTS,PT[II[-INDGEN(PTS)]] ]
    ENDIF
  END
  
  IF N_ELEMENTS(DRY_PTS) LE 1 THEN RETURN
  
  DRY_PTS = DRY_PTS[1:*]
  WET_PTS = WET_PTS[1:*]
  
  WET = LINFIT(NDVI[WET_PTS],LST[WET_PTS])
  DRY = LINFIT(NDVI[DRY_PTS],LST[DRY_PTS])
  
  GOOD = WHERE(NDVI GE RANGE[0] AND NDVI LE RANGE[1],CNT)
  IF CNT LE 0 THEN RETURN
  
  RES = MAKE_ARRAY(SIZE = SIZE(NDVI))
  RES[GOOD] = (LST - POLY(NDVI[GOOD],WET)) / (POLY(NDVI[GOOD],DRY) - POLY(NDVI[GOOD],WET) )
  
END

说明:

  1. 主要是如何求得散点图上下两条边,我的策略是竖着切开散点,分作n个柱子。每个柱子如果总点数大于200,就统计最大最小的50个点作为干湿边的组成部分。

  2. sort排序函数,where查找满足条件的元素的下标和个数,linefit线性拟合,poly根据拟合结果和x求得y。具体的多看帮助,那里说的详细,还有例子。

转载于:https://www.cnblogs.com/wishmo/p/3445831.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值