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