利用IDL输出影像快视图、拇指图

     大家做影像管理方面的业务,一定会需要针对影像生成快视图、拇指图,代码方面用的最多的应该是GDAL库了,其实如果安装了ENVI,利用IDL生成的话也很方便。下面我就测试数据(GF2(高分二号)影像)生成了快视图和拇指图,主要函数就是 stretch_doit、congrid。其中,快视图最大尺寸1024,拇指图最大尺寸128,影像按照321波段真彩色进行拉伸显示,输出格式为jpg,大家可以按照自己的业务自行设定。


Pro ResizeImg

  COMPILE_OPT idl2
  envi,/restore_base_save_files
  envi_batch_init
  
  imgFile='E:\Data\GF2\GF2_PMS2_E118.8_N32.0_20161103_L1A0001935273\GF2_PMS2_E118.8_N32.0_20161103_L1A0001935273-MSS2.tiff'
  quickFile='D:\Temp1\QuickView\quick.jpg'
  thumbFile='D:\Temp1\QuickView\thumb.jpg'
  
  ;设定快视图与拇指图的最大尺寸
  quickSize=1024
  thumbSize=128
  ;打开影像文件
  envi_open_file,imgFile,r_fid=fid
  if fid eq -1 then begin
    envi_batch_exit
    return
  endif
 ;查询文件信息 
 envi_file_query,fid,ns=ns,nl=nl,nb=nb,dims=dims 
 ;采用3、2、1 波段组合
 pos=[2,1,0]
 
 ;对影像进行对比度拉伸
 envi_doit,'stretch_doit',fid=fid,dims=dims,pos=pos,$
  r_fid=fid_stretched,/in_memory,method=1,out_dt=1,$
  range_by=0,i_min=2.0,i_max=98.0,out_min=0,out_max=255
  
 ;定义输出影像数组
 img=bytarr(3,ns,nl)
 ;对数组进行赋值 
 for i=0,2 do begin
  img[i,*,*]=envi_get_data(fid=fid_stretched,dims=dims,pos=i)
 endfor
 ;保持图像缩放比
 if ns GE nl then begin
   quickX = quickSize
   thumbX = thumbSize
   quickY= fix(float(nl/(ns/quickSize)))
   thumbY = fix(float(nl/(ns/thumbSize)))
 endif else  begin
   quickX = fix(float(ns/(nl/quickSize)))
   thumbX = fix(float(ns/(nl/thumbSize)))
   quickY = quickSize
   thumbY = thumbSize  
 endelse
 ;输出快视图
 quickImg = CONGRID(img,3,quickX, quickY, /INTERP)
 write_image,quickFile,'JPEG',quickImg,/order
 ;输出拇指图
 thumbImg = CONGRID(img,3,thumbX, thumbY, /INTERP)
 write_image,thumbFile,'JPEG',thumbImg,/order 
end

猜你喜欢

转载自blog.csdn.net/u013471015/article/details/80894197