IDL基础学习资料+监督分类

学习资料

IDL和ENVI的详细文档:查询具体的函数和接口

Documentation Centerhttps://www.l3harrisgeospatial.com/docs/home.html

ENVI-IDL技术殿堂的博客

IDL程序发布exe清晰步骤_ENVI-IDL技术殿堂_新浪博客IDL程序发布exe清晰步骤_ENVI-IDL技术殿堂_新浪博客,ENVI-IDL技术殿堂,http://blog.sina.com.cn/s/blog_764b1e9d0102xn80.html

IDL帮助文档(官方),不太好用,还是我不会用呢

IDL中类定义
IDL中类定义_极天下真_新浪博客IDL中类定义_极天下真_新浪博客,极天下真,http://blog.sina.com.cn/s/blog_16009545f0102xovx.htmlexe封装,传参及使用

ENVI-IDL学习总结_qq_41627642的博客-CSDN博客1、IDL编写代码时如何显示行号2、 新建工程PROAlt+?号可以实现自动补全功能Ctrl+Shift+F实现缩进添加链接描述?+函数名进行帮助查询IDL的帮助界面ENVI的帮助界面3、新建过程函数以及调用常用IDL函数功能介绍 IDL读取显示保存图像ENVI二次开发(代码:初始化,定标,大气校正,融合,镶嵌,裁剪,监督与非IDL实现遥感影像融合(批量)TASK(三)基于IDL用户函数的波段运算ENVI下的图像融合方法4、 面向对象开发模式学习5、pro工程代码怎么打https://blog.csdn.net/qq_41627642/article/details/108546853

Java调用 
IDL学习记录和Java调用IDL方法_回首1949-CSDN博客先记录一下最近的IDL学习经历。IDL指的是ENVI、IDL的那个IDL,和我老婆吹牛,说是处理火星数据用的,事实可能就是如此。从2018年1月7日开始,迫于项目的压力,需要在10号前学会IDL,并且把两个博士写的遥感数据处理IDL代码集成到项目中,压力还是很大的。大学的时候就有了解过IDL,只是一直没有机会去耐心的学。这下也了却了自己多年的心愿,并用4天的时间完成任务。IDL的资...https://blog.csdn.net/u010214568/article/details/79033685

一个很完整的小项目

利用IDL二次开发编写Envi扩展工具进行河流边滩提取的实验操作_flytodream1的博客-CSDN博客河流边滩提取该实验是学长学姐比赛的,老师给我们试试手,纯粹为学用,不为任何商业用途[/滑稽]河流边滩:指与河岸相连的,枯水期裸露出来,丰水期淹没的泥沙淤积体实验思路:利用枯水期和丰水期光学遥感影像进行预处理,再计算MNDWI(修正归一化水体差异指数),再确定阈值,对MNDWI二值化,水体为1,非水体为0,因为部分水洼等与河流反射特性相同,所以值为1的既有河流也有陆地上的水,因此再利用面向对象分类提取河道,形态学滤波过滤细碎像元,最后将丰水期河道与枯水期河道相减,得到河流边滩,最后矢量化,完成。Crhttps://blog.csdn.net/flytodream1/article/details/107938387

监督分类

pro classfication
  COMPILE_OPT IDL2
  
  ; envi,/restore_base_files 会默认弹出envi老版的窗口,但是注释掉又会报错
  ENVI,/restore_base_files
  
  ;读入影像
  ;file='C:\Users\z6q6k6\Desktop\arcpy\3band_20190408_Zhoushan.tif'
  ENVI_OPEN_FILE,file,r_fid=fid
  IF fid EQ -1 THEN BEGIN
    RETURN
  ENDIF
  ;envi_open_file,file,r_fid=fid
  envi_file_query,fid,ns=ns,bl=nl,nb=nb,dims=dims
  pos=indgen(nb)
  
  ;读入roi文件
  ;file_roi='C:\Users\z6q6k6\Desktop\arcpy\1.roi'
  envi_restore_rois,file_roi
  roi_ids=envi_get_roi_ids(fid=fid,roi_colors=roi_colors,roi_names=roi_names)
  
  ;添加未识别的一类,并自动赋予黑色
  class_names=['Unclassified',roi_names]
  num_classes=n_elements(roi_ids)
  lookup = BYTARR(3,num_classes+1)
  lookup[0,1] = roi_colors


  means=fltarr(nb,num_classes)
  stdv=fltarr(nb,num_classes)
  cov=fltarr(nb,nb,num_classes)
  for j=0,num_classes-1 do begin
    roi_dims=[envi_get_roi_dims_ptr(roi_ids[j]),0,0,0,0]
    envi_doit,'envi_stats_doit',fid=fid,dims=roi_dims,pos=pos,comp_flag=4,mean=c_mean,stdv=c_stdv,cov=c_cov
    means[0,j]=c_mean
    stdv[0,j]=c_stdv
    cov[0,0,j]=c_cov
  endfor

  ; 默认输出路径
  out_file='C:\Users\z6q6k6\Desktop\result.tif'
  
  envi_doit,'class_doit',fid=fid,dims=dims,pos=pos,$
    r_fid=r_fid,out_name=out_file,method=1,$
    mean=means,stdv=stdv,cov=cov,num_classes=num_classes,lookup=lookup,$
    class_names=class_names
  
  ;method:
  ;0:平行六面体(监督)
  ;1:最小距离(监督)
  ;2:最大似然(监督)
  ;3:SAM(监督)
  ;4:ISODATA(无监督)
  ;5:马哈拉诺比斯(监督)
  ;6:二进制编码(监督)
  ;7:K-Means(无监督)
  ;8:SID(监督)

END

pro classfication_5
;,file,roi_file,out_all,out_ship;
  COMPILE_OPT IDL2
  ;COMPILE_OPT STRICTARR
  
  args = Command_Line_Args(Count=c)
  file = args[0]
  roi_file = args[1]
  out_all = args[2]
  out_ship = args[3]
  
  
 
  ;如果在参数里加/headless 关键字,为不显示ENVI软件
  e = ENVI(/headless)
  path= routine_filepath('classfication_5')
  dir=file_dirname(path)
  RESTORE,dir + '\ENVIRandomForestClassification\ENVIRandomForestClassification_V5.3_3\extensions\ENVIRandomForestClassification.sav'
  
  task = ENVITASK('RandomForestClassification')
  
  ;file='G:\newdata\2019_Zhoushan.dat'
  raster = e.OpenRaster(file)
  task.INPUT_RASTER = raster
  
  ;roi_file = 'G:\newdata\roi.roi'
  roi = e.OpenRoi(roi_file)
  task.input_Rois= roi
  
  OutFile_1 = e.GetTemporaryFilename()
  Task.OUTPUT_RASTER_URI = OutFile_1
 
  ; 错误
  catch, error
  if error ne 0 then begin
    catch, /cancel
    print, 'A normal error occured: ' + !error_state.msg
    
    ;out_all = 'G:\newdata\all.dat'
    raster_1 = e.OpenRaster(OutFile_1)
    Task_1 = ENVITask('ClassificationAggregation')
    Task_1.INPUT_RASTER = raster_1
    Task_1.Minimum_Size =  200
    Task_1.OUTPUT_RASTER_URI = out_all    ;第一种保存方法,设置输出路径,保存数据
    Task_1.Execute
    
    
    ; 水体第一步
    OutFile_2 = e.GetTemporaryFilename()
    Raster_2 = e.OpenRaster(out_all)
    fid = ENVIRasterToFID(Raster_2)
    ENVI_File_Query, fid, DIMS=dims
    ENVI_Doit, 'Math_Doit', $
      FID = [fid], $
      DIMS = dims, $
      POS = [0], $
      EXP = 'b1*(float(b1) eq 3)', $
      out_name=OutFile_2

    ; 水体第二步
    OutFile_3 = e.GetTemporaryFilename()
    Raster_3 = e.OpenRaster(OutFile_2)
    fid = ENVIRasterToFID(Raster_3)
    ENVI_File_Query, fid, dims=dims
    ENVI_Doit, 'Math_Doit', $
      FID = [fid], $
      dims = dims, $
      POS = [0], $
      EXP = 'b1 * float(b1 ne 0) / (b1 ne 0)', $
      out_name= OutFile_3
     
    ; 建筑第一步
    OutFile_4 = e.GetTemporaryFilename()
    ;OutFile_4 = 'G:\newdata\building_1.dat'
    Raster_4 = e.OpenRaster(OutFile_1)
    fid = ENVIRasterToFID(Raster_4)
    ENVI_File_Query, fid, DIMS=dims
    ENVI_Doit, 'Math_Doit', $
      FID = [fid], $
      DIMS = dims, $
      POS = [0], $
      EXP = 'b1 * (float(b1) eq 1)', $
      out_name=OutFile_4
      
    ; 建筑第二步
    OutFile_5 = e.GetTemporaryFilename()
    ;OutFile_5 = 'G:\newdata\building_2.dat'
    Raster_5 = e.OpenRaster(OutFile_4)
    fid = ENVIRasterToFID(Raster_5)
    ENVI_File_Query, fid, dims=dims
    ENVI_Doit, 'Math_Doit', $
      FID = [fid], $
      dims = dims, $
      POS = [0], $
      EXP = 'b1 * float(b1 ne 0 ) / (b1 ne 0)', $
      out_name= OutFile_5
      
    ; 结果
    
    raster_6 = e.OpenRaster(OutFile_3)
    raster_7 = e.OpenRaster(OutFile_5)
    fid = ENVIRasterToFID(raster_6)
    ENVI_File_Query, fid, dims=dims
    fid1 = fid
    fid = ENVIRasterToFID(raster_7)
    ENVI_File_Query, fid, dims=dims
    ENVI_Doit, 'Math_Doit', $
      FID = [fid1, fid], $
      dims = dims, $
      POS = [0,0], $
      EXP = 'float(b1) - b2', $
      out_name=out_ship


    print,'yes!'
    return
  endif
  task.EXECUTE
  
  
  e.close
  
END

  • 7
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
第一章 起步篇 8 本章概述 8 书写本书的背景 8 运用本书 9 IDL所需的版本 9 IDL运行期间所需颜色的数量 9 本书的风格习惯 10 本书中所用的IDL程序和数据文件 12 获取更多的帮助 14 使用IDL命令 14 IDL命令解析 14 创建变量 17 使用IDL图形窗口 22 第二章 简单的图形显示 25 本章概述 25 IDL中简单的图形显示 25 创建线画图 25 定制线画图 28 改变线条的线型和粗细 28 用符号代替线条显示数据 29 用不同的颜色绘制线画图 31 限定线画图的范围 31 改变线画图的风格 32 在线画图上绘出多种数据集 34 在多个轴的图上显示数据 35 创建曲面图 36 定制曲面图 38 旋转曲面图 38 为曲面赋色 39 修改曲面图外观 40 创建阴影曲面图 41 改变阴影处理参数 41 用其它数据集为阴影处理提供参数 42 创建等值线图 43 选择等值线数目 45 修改等值线图 46 改变等值线图的外观 47 给等值线图赋色 48 创建填充的等值线图 49 在显示窗口定位图形输出 51 设置图形边缘 52 设置图形位置 52 设置图形区域 53 创建多个图形 53 给图形显示添加文本 57 找出可用字体的名称 58 用XYOutS命令添加文本 58 用矢量字体使用XYOut 59 排列文本 60 删除文本 61 改变文本的方向 61 给图形显示添加线和符号 61 图形显示添加色彩 62 第三章 图像数据处理 65 本章概要 65 图像处理 65 显示图像 65 调整图像数据 67 显示24位图像 69 控制图像显示顺序 70 改变图像尺寸 70 在显示窗口中定位图像 72 从显示器中读取图像 75 IDL中基本的图像处理 75 直方图均衡化 76 平滑图像 77 增强图像棱边 79 图像的频域滤波 80 第四章 图形显示技术 83 本章概要 83 IDL的颜色运用 83 使用索引颜色模式和RGB颜色模式 83 在24位显示设备上装载色谱表 88 获得色谱表的拷贝 88 修改和创建色谱表 89 保存自己的色谱表 90 创建自己的轴标注 91 调整轴刻度间隔 91 格式化轴的标注 92 用IDL处理残缺的数据 95 用IDL建立三维坐标系 97 建立三维散点图 97 从图形原点定位3D坐标轴 99 组合简单图形显示 100 IDL中的动画数据 102 建立动画工具 103 装载动画缓冲区 103 运行动画工具 103 动画的控制 103 存储动画的像素映射图 104 其它类型图形数据的动画 104 网格化数据以便图形显示 105 德洛内三角形法网格化 106 数据的球形网格化 108 第五章 图形显示技巧 110 本章概要 110 将光标用于图形显示 110 什么时候返回的光标位置? 110 哪一个鼠标键和光标共同作用呢? 111 用光标标注图形输出 111 在图像上使用Cursor命令 113 在循环中使用Cursor命令 113 从显示中删除注释 114 删除注释的异或法 114 删除注释的设备拷贝法 116 Z图形缓冲区中的图形显示技巧 120 Z图形缓冲区的实现 121 一个Z图形缓冲区实例:两个曲面 121 用Z图形缓冲区使图像变形 123 Z图形缓冲区中的透明效果 126 将Z图形缓冲区效果与体数据着色相结合 127 第六章 在IDL中读写数据 129 本章概要 129 打开文件进行读写 129 查找和选择数据文件 130 获取逻辑设备号 131 读写格式化数据 132 写自由格式文件 133 读写自由格式文件的实例 136 用确定的文件格式写入 139 从字符串中读取格式数据 141 读写非格式化数据 141 读取非格式化图像数据文件 142 写非格式化图像数据文件 142 非格式化数据文件的一些问题 144 用关联变量存取非格式化数据文件 144 读写常用文件格式的文件 147 创建彩色GIF文件 147 创建彩色JPEG文件 148 查询图像文件信息 150 第七章 图形硬拷贝输出 151 本章概要 151 选择图形硬拷贝输出设备 151 配置图形硬拷贝输出设备 152 常用的Device命令关键字 153 创建PostScript文件 154 将图形送到硬拷贝设备中 154 打印PostScript文件 155 在运行MacOS系统的计算机上打印PostScript文件 156 在Windows计算机上打印PostScript文件 156 生成封装的PostScript文件输出 156 封装PostScript图形的预览 157 生成彩色的PostScript输出 157 PostScript中的彩色图像与灰度图像 158 在PostScript设备上创建高质量的输出 159 显示设备和PostScript设备之间的相同点 159 显示设备与PostScript设备之间的不同点 159 在横向输出模式中计算PostScript的偏移量 172 用PS_Form配置PostScript设备 173 配置和使用打印设备 174 用打印设备定位图形 175 第八章 IDL编程基础 178 本章概述 178 编写IDL批处理文件 178 编写IDL主程序 179 过程和与函数中变量的作用范围 181 创建定位参数 181 定义可选的或必须的定位参数 182 定义关键字 183 创建输出型参数 186 编写IDL函数 189 方括号和函数的调用 190 使用程序控制语句 191 IDL中表达式的真和假 191 将多个语句处理成单个语句 192 If…Then…Else控制语句 192 条件表达式 194 FOR循环控制语句 194 WHILE循环控制语句 194 REPEAT...UNTIL 循环控制语句 194 CASE控制语句 195 GOTO控制语句 195 错误处理控制语句 196 编译和执行IDL程序模块 198 程序编译规则: 198 程序编译和自动运行规则 199 特殊编译命令 199 第九章 编写 IDL 程序 201 本章概述 201 基本的ImageBar程序 201 给程序ImageBar增加一个“先擦除”功能 205 向ImageBar程序增加颜色敏感功能 205 给ImageBar中的命令传递关键字 207 根据窗口大小改变字符大小 209 程序ImageBar的最终代码 210 在图形用户界面中包装ImageBar 211 第十章 编写简单的组件程序 212 本章概述 212 组件程序的结构 212 组件程序如何对事件作出反应 213 编写组件定义模块 213 定义和创建程序组件 214 在屏幕上实现组件 216 使绘图组件成为当前图形窗口 216 在绘图组件窗口上显示图形 216 保存程序运行时所需要的信息 216 创建事件循环和注册程序 217 运行程序 218 创建无阻塞组件程序 219 编写事件处理模块 219 事件结构中的公共字段 219 事件处理函数 220 将事件处理程序和组件联系起来 221 编写Quit按钮的事件处理程序 222 编写改变图形窗口大小的事件处理程序 223 进行小量地修改 224 添加颜色敏感 224 采用更高效的内存管理 225 第十一章 组件编程技巧 229 本章概述 229 改变颜色表 229 保护公共块 230 一个可选择颜色表的工具 230 指定Group Leader 233 给组件程序增加Group Leader 234 在24位显示器上改变颜色表 235 在组件程序中使用指针 237 使用Cleanup过程防止内存泄露 238 使用伪事件进行程序通信 239 创建一个具有“记忆功能”的程序 240 保护组件程序的颜色 243 通过组件跟踪事件来保护颜色 244 通过绘图组件事件来保护颜色 245 保存或者发布程序的图形 245 第十二章 对话框程序 249 本章概述 249 创建模式对话框 249 阻塞的组件程序 249 模式组件程序 250 编写模式对话框的定义模块 250 编写模式对话框的事件处理模块 254 测试模式对话框程序 255 创建非模式的对话框 256 编写非模式对话框程序 256 编写非模式对话框的事件处理模块 258 测试非模态对话程序 259 附录A 组件的事件结构 261 事件结构的定义 261 公共字段的定义 261 基本组件的事件结构 261 base组件 261 按钮组件 261 绘图组件 262 下拉式列表组件 262 标签组件 262 列表组件 262 滑动条组件 262 表单组件 263 文本组件 264 复合组件的事件结构 265 CW_Animate 265 CW_Arcball 265 CW_BGroup 265 CW_Clr_Index 265 CW_Color_Sel 265 CW_DefROI 266 CW_Field 266 CW_Form 266 CW_Flisder 266 CW_Orient 266 CW_PDMenu 266 CW_RGBSlider 266 CW_Zoom 267 组件程序的事件结构 267 Xcolors 267 其他组件的事件结构 267 键盘焦点事件 267 组件退出请求事件 267 组建计时器事件 268 组件跟踪事件 268 附录B 数据文件描述 269

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

z6q6k6

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

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

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

打赏作者

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

抵扣说明:

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

余额充值