IDL 学习笔记
从基础到入门
2018-3 月 10 日
BAI90506@QQ.COM
郑永杰
目录
IDL 笔记 .............................................................................................................................................3
数学运算 ............................................................................................................................ 3
一、
1. 数组 .................................................................................................................................... 3
2. 等差等比数列 .................................................................................................................... 3
3. 数组使用 ............................................................................................................................ 3
4. 二维以上数组取值使用 ....................................................................................................4
5. 求大,求小,求余 ............................................................................................................4
6.
SIZE ....................................................................................................................................5
7. 查找字符类型及查找数组某些数的下标或数值 ............................................................5
8. 数组修改 ............................................................................................................................ 5
9. 适用于影像的调整 ............................................................................................................6
10. 重采样 ............................................................................................................................ 6
11. 反转、旋转 .................................................................................................................... 7
12. 排序和求唯一值 ............................................................................................................7
13. 数组运算 ........................................................................................................................ 8
14. 字符串 ............................................................................................................................ 9
15. 结构体 .......................................................................................................................... 10
16. 指针 .............................................................................................................................. 11
17. 链表 .............................................................................................................................. 11
18. 哈希表 .......................................................................................................................... 11
19. 高效编程 ...................................................................................................................... 12
IDL8.4 往后新增 ......................................................................................................... 13
20.
输入输出及读写..............................................................................................................14
FOMAT.............................................................................................................................14
1.
2. 写读修改 txt 文件 ............................................................................................................15
3. 读取 .................................................................................................................................. 17
4. 读取文件相对路径 ..........................................................................................................18
5. 写读修改二进制文件......................................................................................................18
6. 读取影像:...................................................................................................................... 18
7. 读取转换 bmp..................................................................................................................20
8. 读取 HDF 文件(读取其内部的太阳高度角)............................................................22
9. 读取 shapefile...................................................................................................................22
10. 读取 XML 文件 ........................................................................................................... 23
11. 搜索文件路径 ..............................................................................................................24
ENVI 格式读写 ........................................................................................................... 25
12.
IDL 可视化 ...................................................................................................................... 27
1. 加载获取颜色表..............................................................................................................27
2. 新建颜色表...................................................................................................................... 30
3. 显示窗口 .......................................................................................................................... 33
4. 绘制曲线 .......................................................................................................................... 33
5. 常见设置 .......................................................................................................................... 35
6. 字体系统 .......................................................................................................................... 35
二、
三、
1
四、
五、
六、
七、
八、
7. 绘制等值线...................................................................................................................... 36
8. 显示图像 .......................................................................................................................... 37
9. 地图投影 .......................................................................................................................... 38
图像处理 .......................................................................................................................... 39
用户界面构建 .................................................................................................................. 39
1. 单元组件界面 .................................................................................................................. 39
2. 界面创建 .......................................................................................................................... 39
3. 程序搭建 .......................................................................................................................... 40
打开图像的一个小程序 ..........................................................................................................40
对象图形法...................................................................................................................... 41
1. 创建对象 .......................................................................................................................... 41
2. 自定义类 .......................................................................................................................... 45
3. 快速可视化...................................................................................................................... 45
智能化编程工具..............................................................................................................49
ENVI+IDL ........................................................................................................................49
1. Bandmath..........................................................................................................................49
2.
ENVIClasscic 菜单定制 ..................................................................................................51
ENVIClassic 二次开发 ....................................................................................................51
3.
1) 图像显示 .................................................................................................................. 51
2) 计算波段最大值......................................................................................................52
3) 面向对象的分割......................................................................................................53
ENVI5 二次开发............................................................................................................. 53
4.
ENVI 扩展工具 ................................................................................................................53
5.
IDL 混合编程技术 .......................................................................................................... 59
6.
7.
IDL 输出助手 .................................................................................................................. 61
8. 遥感 GIS 一体化..............................................................................................................61
2
IDL 笔记
一、 数学运算
floor(10.8)=10 向下取整
ceil(10.8)=11 向上取值
round(10.8)=11 四舍五入
fix(10.8)=10 直接取整
1. 数组
IDL> bytarr(3,2)
IDL> bindgen(3,2)
全零数组(字节)
索引数组(字节)
0
0
0
3
5
5
0
0
2
5
5
5
IDL> make_array(3,2,value=5,/float)
5.0000000
5.0000000
5.0000000
5.0000000
5.0000000
5.0000000
IDL> make_array(3,2,value=5,type=1) 三列两行,值均为 5,1 是字节形
0
0
1
4
5
5
4
4
4
2. 等差等比数列
IDL> [1:13:3]
1
4
IDL> 3^indgen(6)
3
1
3. 数组使用
IDL> arr
2
IDL> arr[1]
4
6
IDL> arr[[1,2,3]] 结果是数列
8
IDL> arr[1:3]
7
9
6
使用下标
10
27
13
81
243
8
10
数值连续,可用冒号省略下标,结果是代表三个数
6
8
3
定义数组
4. 二维以上数组取值使用
IDL> arr=indgen(4,3)
IDL> arr
0
4
8
1
5
9
IDL> arr[[1,3],*]
2
6
10
取数组第 2 列和第 4 列(即取他们对应所有的行)
3
7
11
1
5
9
9
5
9
0
1
0
1
3
7
11
11
6
10
1
0
1
0
IDL> arr[[1,3],2]
IDL> arr[1:*,1:*]
1
4
7
10
5. 求大,求小,求余
IDL> arr=indgen(3,4)
IDL> arr
0
3
6
9
IDL> arr>0
0
3
6
9
IDL> arr>5
5
5
6
9
IDL> arr<5
0
3
5
5
5
5
7
10
1
4
7
10
1
4
5
5
IDL> arr mod 2
取数组第 2 列和第 4 列的第三行
取第二列,第二行往后所有值
7
11
2
5
8
11
2
5
8
11
5
5
8
11
2
5
5
5
0
1
0
1
4
默认情况:Size[维度,列,行,数据类型,元素
4
IDL> size(arr,/dimensions) 设置关键字
2
5
2
20
6. SIZE
IDL> arr=indgen(5,4)
IDL> size(arr)
个数]
5
4
IDL> size(arr,dimensions=1)
4
5
IDL> size(arr,/N_ELEMENTS)
20
1
3
7. 查找字符类型及查找数组某些数的下标或数值
IDL> arr=make_array(1,1,type=5)
IDL> typename(arr)
DOUBLE
IDL> arr=[1,2,3,4,5,6,5,4,3,2]
IDL> where(arr eq 2)
IDL> where(arr ge 4)
IDL> arr[where(arr ge 4)]
4
5
9
6
4
5
6
5
4
IDL> where(arr ge 4,count,com=com,ncom=ncom)
(大于等于 4 个数,满足下标,不满足个数)
3
4
5
6
7
7
8. 数组修改
IDL> arr=indgen(1,3,4) 三维
IDL> arr
0
1
2
3
4
5
6
7
8
9
5
10
11
IDL> arr=reform(arr) 二维
IDL> arr
0
3
6
9
1
4
7
10
2
5
8
11
9. 适用于影像的调整
IDL> data=indgen(3,600,400) 三个通道故三维
IDL> r=data[0,*,*]
这样还是三维
IDL> help,r
R
IDL> help,reform(r)
reform 成二维
= Array[600, 400]
INT
INT
= Array[1, 600, 400]
10. 重采样
IDL> arr=indgen(2,2)
IDL> arr
0
2
1
3
IDL> rebin(arr,4,4)
0
1
2
2
0
1
2
2
IDL> congrid(arr,3,4)
0
0
2
2
0
0
2
2
0
0
2
2
1
1
3
3
IDL> rebin(arr,4,4,/sample) 分块内插 (不过这两个数组只能是倍数内插)
双线性内插
1
2
3
3
1
1
3
3
1
2
3
3
1
1
3
3
最近邻域(随意内插)
1
1
3
3
6
IDL> congrid(arr,3,4,/int)
11. 反转、旋转
IDL> arr=indgen(3,2)
IDL> arr
0
3
1
4
IDL> reverse(arr)
5
2
2
5
3
4
5
1
4
IDL> rotate(arr,1)
0
1
2
IDL> rotate(arr,2)
4
1
IDL> rotate(arr,3)
5
4
3
IDL> rotate(arr,4)
3
4
5
0
1
2
2
1
0
2
5
0
3
3
0
数字是 90 度一转
任意角度旋转
IDL> rot(arr,180)
% Compiled module: ROT.
5
2
4
1
3
0
IDL> str='abcdef'
IDL> string(reverse(byte(str)))
Fedcba
12. 排序和求唯一值
IDL> arr=[2,3,2,3,4,8,7,5]
IDL> sort(arr)
2
0
5
IDL> arr[sort(arr)]
2
IDL> arr[uniq(arr)]
3
2
2
IDL> arr=[2,3,2,2,2,2]
IDL> uniq(arr)
0
IDL> arr[uniq(arr)]
排序下标
3
1
3
3
4
4
排序数列
3
2
1
4
5
8
7
6
7
7
8
5
求解唯一值(解决相邻一致问题)
7