IDL将ENVI ROI生成的TXT转为CSV

7 篇文章 0 订阅

由于ENVI选取ROI后可以导出一个TXT但是并不是CSV,所以希望生成一个仅有各个特征值和类序号的一个CSV。

参看了之前的一个博客,但是我这个可以自动识别特征值有几个构成的,就是ROI输出的波段有几个。

希望给大家一点参考吧


PRO GETROI
  ;读取ENVI导出训练区的txt文件

  filename = dialog_pickfile(path = 'H:\IceClassification\sentinel\Strait\download\Baseimage\GLCM\txt\',filter = '*txt', /MULTIPLE_FILES)
;  if file_test(filename[0]) eq 0 then return
  for filen=0,n_elements(filename)-1 do begin
  file=filename[filen]
  temp = ''
  class = 0  ;类数
  result=0
  ;获取文件数据
  openr,lun,file,/get_lun
  readf,lun,temp
  ;读取训练样本的类别数
  readf,lun,temp
  reslt = strsplit(temp,/extract)
  class = long(reslt[n_elements(reslt)-1])
  ;读取两行空
  readf,lun,temp
  readf,lun,temp
  ;  print,class
  ;颜色存储
  clor = make_array(class,3,/long)
  classnum = make_array(class,/LONG)
  ;读取每个样本的像元数大小和颜色值
  reslt_n=0 ;数据段个数
  for i = 0, class-1 do begin
    readf,lun,temp
    readf,lun,temp

    reslt = strsplit(temp,/extract)

    tempr = reslt(n_elements(reslt)-3)
    r = long(strmid(tempr,1,strlen(tempr)-2))
    tempg = reslt(n_elements(reslt)-2)
    g = long(strmid(tempg,0,strlen(tempg)-1))
    tempb = reslt(n_elements(reslt)-1)
    b = long(strmid(tempb,0,strlen(tempb)-1))

    clor[i,0] = r
    clor[i,1] = g
    clor[i,2] = b

    readf,lun,temp
    reslt = strsplit(temp,/extract)
    classnum[i] = long(reslt[n_elements(reslt)-1])
    readf,lun,temp
    if i eq class-1 then begin
      reslt = strsplit(temp,/extract)
      reslt_n=n_elements(reslt)-3 ;减一是因为这一行有;号以及Map X和Map Y分开计数了
    endif
  endfor

  ;读取数据段
  ;  data = make_array(4,class)
  classmean = make_array(class,4)

  for i = 0, class-1 do begin
    data = make_array(reslt_n-7+1,classnum[i],value = 0d)
    ;    readf,lun,temp
    for j = 0, classnum[i]-1 do begin
      readf,lun,temp
      reslt = strsplit(temp,/extract)
      for z=0, reslt_n-7-1 do begin
        data[z,j] = FLOAT(reslt[z+7]);导入数据信息
      endfor
;      data[0,j] = FLOAT(reslt[n_elements(reslt)-4]);
;      data[1,j] = FLOAT(reslt[n_elements(reslt)-3]);
;      data[2,j] = FLOAT(reslt[n_elements(reslt)-2]);
;      data[3,j] = FLOAT(reslt[n_elements(reslt)-1]);
      data[reslt_n-7,j] = i;为类别序号
    endfor
    if i eq 0 then begin
      result=data
    endif else begin
      result=[[result],[data]]
    endelse
    ;求获取数据的特征值
    ;1、均值向量求取
    for k = 0L , 3 do $
      classmean[i,k] = mean(data[k,*])
    ;2、求得
    if (EOF(lun) eq 0) then $
      readf,lun,temp
  endfor
  free_lun,lun
  
  outname='H:\IceClassification\sentinel\Strait\download\Baseimage\GLCM\csv\'+file_basename(file,'.txt')+'.csv'
  print,outname
    WRITE_CSV,outname,result
    ;'H:\IceClassification\sentinel\new_year\20180922145343\select_no_m.csv'
    ;H:\IceClassification\sentinel\new_year\20180107220948\roi\25_25_1_0_32.csv
   endfor
END

 

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

就是一只白

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

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

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

打赏作者

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

抵扣说明:

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

余额充值