利用ENVI的ROI统计影像信息

7 篇文章 0 订阅
这篇博客介绍了如何在ENVI环境下利用ROI进行影像处理。首先创建ROI并保存为XML格式,接着通过代码读取并导出ROI对应的影像信息到CSV。内容涉及到波段统计、ROI像素值提取,并利用READ_CSV读取CSV文件数据。通过对数据的处理,计算平均值并按特定条件组织结果,最终将统计结果分别写入两个CSV文件。
摘要由CSDN通过智能技术生成

首先在ENVI当中建立ROI,然后保存成XML格式

利用下面代码的

raster = e.OpenRaster(file)和

raster.ExportRois,infilepath+'incidence_angle_sample.csv' , rois, 'CSV'

就可以实现按照ROI统计的影像信息的CSV

打开生成的CSV后得到

 RO1 #1 类别 npts(像素个数): 320

 RO1 #2 类别 npts(像素个数): 320

B1、B2、B3为影像的波段1、2和3的像素值

最后用READ_CSV打开该文件

hh=roicsv.FIELD7; 读取B1
hv=roicsv.FIELD8;读取B2
angle=roicsv.FIELD9;

pro data_select_by_roi
  COMPILE_OPT IDL2
  ; Start the application
  e = ENVI(/HEADLESS)
  
  ys=2016;
  ye=2021;
  ms=1;
  me=4;

  for yr=ys,ye do begin
    for mon=ms,me do begin
      infilepath='H:\Lead\data\sample\'+STRING(yr, FORMAT='(I04)')+'\'+STRING(mon, FORMAT='(I01)')+'\'
      cd,infilepath
      tifdata = file_search('S1*.tif',count = num);infilepath,
      if num eq 0 then begin
        print,infilepath,' has no tif file.'
        continue
      endif
      
      ; Open an input raster
      file = FILEPATH(tifdata[0], ROOT_DIR=infilepath);
      raster = e.OpenRaster(file)
       
      ; Open an ROI file
;      roiname=infilepath+'incidence_angle_sample.xml'
      file = FILEPATH('incidence_angle_sample.xml', ROOT_DIR=infilepath);, SUBDIRECTORY = ['data']
      rois = e.OpenRoi(file)
      if file_test(infilepath+'incidence_angle_sample.csv') eq 0 then begin
        raster.ExportRois,infilepath+'incidence_angle_sample.csv' , rois, 'CSV'
        print,'文件新建'
      endif
      
      roicsv = READ_CSV( infilepath+'incidence_angle_sample.csv' ,N_TABLE_HEADER=13,TYPES='Float')
      
      filenum=N_elements(roicsv.FIELD1);
      x=roicsv.FIELD1;
      y=roicsv.FIELD2;
      hh=roicsv.FIELD7;
      hv=roicsv.FIELD8;
      angle=roicsv.FIELD9;


      flag=0
      for i=0,filenum-1 do begin
        ;搜集数据
        if i eq 0 or ((i mod 16) eq 0) then begin
          temp1=[hh[i]]
          temp2=[hv[i]]
          temp3=[angle[i]]
        endif else begin
          temp1=[temp1,hh[i]]
          temp2=[temp2,hv[i]]
          temp3=[temp3,angle[i]]
        endelse
        ;判断是否需要提交结果
        if i ne 0 and  (N_elements(temp1) eq 16) then begin ;判断是否与前一个不为同ROI  abs(x[i-1]-x[i]) gt 5 and abs(y[i-1]-y[i])
          if flag eq 0 then begin ;判断是否第一次建立结果数组
            result1=mean(temp1)
            result2=mean(temp2)
            result3=mean(temp3)
            flag=1
          endif else begin
            result1=[result1,mean(temp1)]
            result2=[result2,mean(temp2)]
            result3=[result3,mean(temp3)]          
          endelse      
        endif   

      endfor
      if yr gt 2017 or (yr eq 2017 and mon ge 3) then begin
        final_ice=[[result1[0:19]],[result2[0:19]],[result3[0:19]]]
        final_ice=Transpose(final_ice)
        final_ow=[[result1[20:-1]],[result2[20:-1]],[result3[20:-1]]]
        final_ow=Transpose(final_ow)
      endif else begin
        
        final_ow=[[result1[0:19]],[result2[0:19]],[result3[0:19]]]
        final_ow=Transpose(final_ow)
        final_ice=[[result1[20:-1]],[result2[20:-1]],[result3[20:-1]]]
        final_ice=Transpose(final_ice)
        
      endelse
      
      WRITE_CSV,infilepath+'HH_HV_incidence_angle_statistics_ow.csv',final_ow
      WRITE_CSV,infilepath+'HH_HV_incidence_angle_statistics_ice.csv',final_ice
      print,'hello',infilepath+'HH_HV_incidence_angle_statistics.csv'
    endfor
  endfor
    

end

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

就是一只白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值