ASCII文件进行均值滤波

;**************************读取光谱数据*********************
Pro READ_ASCII
  fn=dialog_pickfile();用对话框打开文件并获得文件名
  openr,lun,fn,/get_lun;读取光谱数据
  data=fltarr(2,10000);创建一个浮点型数组,每个元素的初始值为0
  i =  0
  while eof(lun) ne 1 do begin;循环读取一行数据
    tdata=fltarr(2)
    readf,lun,tdata ;readf读取的数据存储到temp中
    data[*,i]=tdata ;进行每一行的存储
    i=i+1
    endwhile
    free_lun,lun ;不再对文件进行操作 
  nb=i
  data=data[*,0:i-1];去除空行
  wv = transpose(data[ 0 ,*]);波长
  ref = transpose(data[ 1 ,*])*0.01;反射率
  ;************************绘制原始光谱曲线*******************
 
  plot,wv,ref,xtitle='Wavelength(nm)',ytitle='reflectance',background='FFFFFF'xl,color='000000'xl,/nodata,$
  xrange=[min(wv),max(wv)],xstyle=1,ystyle=16
  oplot,wv,ref,color='FFFF00'xl
  ;************************进行均值滤波***********************
  ref_smooth=ref
  width=5;滤波窗口尺寸 
  for i = width/2,nb-1-width/2 do ref_smooth[i]=mean(ref[i-width/2:i+width/2])
  oplot,wv,ref_smooth,color='0000FF'xl
 ;****************************保存文件***********************
   o_fn=dialog_pickfile();选择打开的文件名,进行保存
   openw,lun,o_fn,/get_lun
   printf ,lun,['Wavelength','Origin_Ref','Smoothed_ref'],format='(3a15)';
   printf ,lun,[transpose(wv),transpose(ref),transpose(ref_smooth)],format='(i15,2f15.4)'
   free_lun,lun
end
        
  
  
  
    
  
  
  
  
  
  

 

你可能感兴趣的:(IDL)