IDL系统开发及ENVI功能扩展 代课人:张锦水 Email:Zhangjsh@ires.cn Tel:13552203633 1
内容介绍 图形基本知识 图形用户界面开发 ENVI扩展编程
图像基本知识 真彩色和假彩色 图形显示程序 TV和TVSCL 图像处理 其它知识
真彩色和假彩色 假彩色 与一个颜色表联系起来,由颜色表为每个图像像素定义显示的颜色 真彩色 每个图像像素综合红、绿和蓝的强度以决定显示的颜色
假彩色显示方式 颜色索引表 二维数组 Index R G B …… 80 255 102 81 51 50 204 153 60 154 102 81 51 50 204 153 60 154 70 40 80 60 50 81 二维数组
真彩色显示方式 R 显示结果 70 40 80 60 50 81 G 20 40 60 80 50 81 105 40 100 70 80 60 50 81 B 20 40 60 80 50 81
数据提取 假彩色数据提取 真彩色数据提取 Function GetPseudoColorData OpenR,Lun,FileName,/Get_Lun ImageArr = BytArr(ns,nl) ; 定义二维数组 ReadU,Lun,ImageArr ;读取二进制文件 Free_Lun,Lun Return,ImageArr End 真彩色数据提取 ImageArr = BytArr(ns,nl,3) ; BSQ格式定义3维数组 ReadU,Lun,ImageArr ;
图像显示IDL命令 假彩色显示 1)Device,Decomposed = 0 2)LodctCT,Index Index为颜色索引表 或者TvLCt手工设置颜色 3)TV,Image Image为二维数组(TvScl) 真彩色显示 1)Device,Decomposed = 1 2) TVScl,Image,Band = Index Index为通道
图形显示窗口 Window ,Index 创建一个新的窗口,窗口的索引号,/Free由系统自动生成一个索引号的窗口 Wset,Index 将Index窗口设置为当前窗口 Wdelete,Index 删除某一个窗口 Wshow,Index,设置某一个窗口是否可见 Erase 擦出窗口中的内容
图像显示范例 IDL>Device,Decomposed = 1 IDL> Window,/Free IDL> OpenR,Lun,’E:\IDL教学\iknos_mult_subset.img’,/Get_Lun IDL> ImageData = BytArr(282,224,3) IDL> ReadU,Lun,ImageData IDL> TvScl,ImageData[*,*,0],Channel = 1,Order = 1 ;第一通道,红色 IDL> TvScl,ImageData[*,*,1],Channel = 2,Order = 1 ;第二通道,绿色 IDL> TvScl,ImageData[*,*,2],Channel = 3,Order = 1 ;第三通道,蓝色 IDL> Free_Lun,Lun
图像操作 改变图像尺寸 图像基本处理 图形分类
改变图像尺寸 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 4 16 20 4*4 2*2 1 3 4 6 … 24 25 27 28 30 5*5
图像处理 直方图均衡化 Hist_Equal和Histogram 平滑图像 Smooth 图像噪声 Median 图像边缘 Roberts和Sobel 图像频域滤波 FFT 波段操作
图像分类 监督分类 非监督分类 (分级集群法、动态聚类法) 最小距离分类法、多级别切割法、最大似然法等 非监督分类 (分级集群法、动态聚类法) 分级集群法采用“距离”评价各样本(每个像元)在空间分布的相似程度,把他们的分布分割或者合并成不同的集群。每个集群的地理意义需要根据地面调查或者与已知类型的数据比较后方可确定。
图形用户界面开发 GUI(Graphic User Interface)图形用户界面 基于组件式开发 事件驱动整个流程的进行
组件结构 Widget_Base WidgetID Widget_Label Widget_Textbox …… Widget_Tree
事件定制 A Event Hander B C D E F Event Hander G 语法:Xmanager,’Name’,ID
界面示例 IDL>Base = Widget_Base(Title = '界面演示',mbar = mbar,column =1) IDL>Base1 = Widget_Base(base,row = 1 ) IDL>Button1 = Widget_Label(Base1 ,Value = '用户名') IDL>Text1= Widget_Text(Base1,Value = 'aaaa',/editable) IDL>Base2 = Widget_Base(base,row = 1) IDL>Button2 = Widget_Label(Base2 ,Value = ' 密码') IDL>base3 = widget_base(base,row = 1,/align_center) IDL>ok = widget_button(base3,value = '确定') IDL>Text2= Widget_Text(Base2,Value = '****',/editable) IDL>cancel = Widget_Button(BaMse3,value = '取消') IDL>Widget_Control,Base,/Realize
常用函数 Widget_Control,WidgetID Result = Widget_Info(WidgetID) 控制控件的所有状态属性 常用参数:Set_UValue、Get_Uvalue、Get_Value、 Set_Value Result = Widget_Info(WidgetID) 获得某个窗体或控件包含的子控件 Find_By_Uname buttonID = Widget_Info(BaseID,Find_By_Uname = ‘ButtonName’)
应用实例 总体界面 读取遥感图像 保存JPEG图像 基本图像处理 图像分类 波段操作 注意问题
总体界面 菜单 工具条 图像显示
遥感影像读取(1) 列 行
遥感影像读取(2) 图像格式 BSQ 隔波段扫描 m*n*3 BIL 隔行扫描 m*3*n BIP 隔像素扫描 3*m*n 解析头文件,读取数据 定义三维数组 arry = BytArr[m*n*3] 读取数据 ReadU,Lun,Arr
保存JPEG文件 提取屏幕数据 Wset 确定当前活动窗口 TVRD 提取当前窗口中的图像内容 转换数据格式 ReImageArr = Reverse(ImageArr,3) 输出JPEG图片 Write_JPEG,FileName,ReImageArr
基本图像处理 直方图 图像光滑 边缘增强 Roberts增强 Sobel增强 去除噪声
直方图 Hist_Equal Histogram
图像光滑 Smooth光滑
边缘增强 Roberts Sobel
去除噪声 Median
图像分类 Clust_Wts Cluster
波段操作(+)
波段操作(/) Band2 / Band1 需要拉伸显示
注意问题 错误陷阱的设置,标准处理模式 界面变量的存储 定义存储结构体,保存当前的图像数据、界面变量 程序退出清空变量 Catch,ErrIndex If ErrIndex NE 0 Then Begin Goto Lablelpoint EndIf ExitPro: 释放变量 Exit Lablelpoint: Goto ExitPro 程序退出清空变量 定义Clean_UP事件清空变量,主要为指针变量
ENVI功能扩展 直接解压ENVI函数,批处理 pro example_envi_batch_exit envi, /restore_base_save_files envi_batch_init, log_file='batch.txt' ; envi_batch_exit end 由ENVI直接调用自定义函数
ENVI操作界面
ENVI菜单编辑环境
编辑ENVI菜单文件 Event Caption
自定义函数 自定义函数 存放到Save_Add目录下面,由系统编译,Envi自动调用其功能。 Pro Proname,Event …… End 存放到Save_Add目录下面,由系统编译,Envi自动调用其功能。
示例
Questions? 谢 谢!