envi二次开发,IDL调用ENVI函数

IDL 调用envi函数进行几何重定位时,处理后的图像是黑色的怎么回事啊??

代码如下:

pro envi_Georeference_MODIS,event
  t1=systime(1)

;1.打开MODIS数据文件
 
  fn=dialog_pickfile(title='选择',get_path=work_dir)
  cd,work_dir
  ;再读取MODIS地理定位数据,即纬度经度波段
  envi_open_data_file,fn,r_fid=fid_lat,/hdf_sd,hdfsd_dataset=0
  envi_open_data_file,fn,r_fid=fid_lon,/hdf_sd,hdfsd_dataset=1
  envi_file_query,fid_lat,ns=ns0,nl=nl0,dims=dims0
  ;分别读入MODIS的1~2和3~7波段
  envi_open_data_file,fn,r_fid=fid1,/hdf_sd,hdfsd_dataset=6
  envi_open_data_file,fn,r_fid=fid2,/hdf_sd,hdfsd_dataset=9
  envi_file_query,fid1,ns=ns1,nl=nl1,nb=nb1,dims=dims1,$
  data_type=data_type1
  envi_file_query,fid2,nb=nb2

;2.构建控制点列表PTS
 
  ;读取经纬度数据
  Lat=envi_get_data(fid=fid_lat,dims=dims0,pos=0)
  Lon=envi_get_data(fid=fid_lon,dims=dims0,pos=0)
  envi_file_mng,id=fid_lat,/remove
  envi_file_mng,id=fid_lon,/remove
  ;从经纬度波段中提取50*50个像元做控制点
  pts_nx=50   ;X方向控制点数目
  pts_ny=50   ;Y方向控制点数目
  ;经纬度波段ptx点的x、y下标
  interval_x=float(ns0)/pts_nx
  interval_y=float(ns0)/pts_nx
  pts_x=round(indgen(pts_nx)*interval_x)        ;经纬度波段中pts点的X方向下标
  pts_y=round(indgen(pts_ny)*interval_y)        ;经纬度波段中pts点的y方向下标
 
  ;提取各pts点的经纬度坐标值及对应的MODI数据文件坐标值(从0开始)
  ;MODIS的LIB数据,每5*5个像元(中心点)对应一个经纬度波段的坐标值
  pts=fltarr(4,pts_nx*pts_ny)
  ii=0
  for ix=0,pts_nx-1 do begin
    for iy=0,pts_ny-1 do begin
      pts[0,ii]=Lon[pts_x[ix],pts_y[iy]]
      pts[1,ii]=Lon[pts_x[ix],pts_y[iy]]
      pts[2,ii]=pts_x[ix]*5+2.5
      pts[3,ii]=pts_y[iy]*5+2.5
      ii=ii+1
    endfor
  endfor
  
;3.对MODIS1-7波段进行地理重定位

;合并MODIS的前7个波段,并写入成一个文件
  data=make_array(ns1,nl1,nb1+nb2,type=data_type1)
  for i=0,nb1-1 do begin
    data[*,*,i]=envi_get_data(fid=fid1,dims=dims1,pos=i)
  endfor
  for i=0,nb2-1 do begin
    data[*,*,nb1+i]=envi_get_data(fid=fid2,dims=dims1,pos=i)
  endfor
  envi_enter_data,data,r_fid=fid_data,ns=ns1,nl=nl1,nb=nb1+nb2,$
    interleave=0,data_type=data_type1
  envi_file_mng,id=fid1,/remove
  envi_file_mng,id=fid2,/remove

;进行地理重定位
  o_fn='MODIS_georeferenced'  ;地理重定位后的输出文件名
  pos=indgen(nb1+nb2)
  proj=envi_proj_create(/geographic, datum='WGS_84')
  pixel_size=[0.01,0.01]
  envi_doit, 'envi_register_doit',w_fid=fid_data,w_dims=dims1,$
    w_pos=pos,r_fid=fid_result,out_name=o_fn,pts=pts,$
    proj=proj,method=7,pixel_size=pixel_size
  envi_file_mng,id=fid_data,/remove
  t2=systime(1)   ;获取程序结束时的系统时间
  print,'时间',(t2-t1)/60.0
  
 end

参考GPT和自己的思路:

可能是地理重定位算法导致处理后的图像变成了黑色。可以尝试调整算法的参数,比如控制点的数量、投影方式等,看看是否有改善。此外,也可以检查代码中是否存在其他可能导致问题的错误。