400 likes | 728 Views
IDL 系统开发及 ENVI 功能扩展. 代课人 : 张锦水 Email:Zhangjsh@ires.cn Tel:13552203633. 内容介绍. 图形基本知识 图形用户界面开发 ENVI 扩展编程. 图像基本知识. 真彩色和假彩色 图形显示程序 TV 和 TVSCL 图像处理 其它知识. 真彩色和假彩色. 假彩色 与一个颜色表联系起来,由颜色表为每个图像像素定义显示的颜色 真彩色 每个图像像素综合红、绿和蓝的强度以决定显示的颜色. 假彩色显示方式. 颜色索引表. 二维数组. 真彩色显示方式. R. 显示结果. G. B.
E N D
IDL系统开发及ENVI功能扩展 代课人:张锦水 Email:Zhangjsh@ires.cn Tel:13552203633 1
内容介绍 • 图形基本知识 • 图形用户界面开发 • ENVI扩展编程
图像基本知识 • 真彩色和假彩色 • 图形显示程序 • TV和TVSCL • 图像处理 • 其它知识
真彩色和假彩色 • 假彩色 与一个颜色表联系起来,由颜色表为每个图像像素定义显示的颜色 • 真彩色 每个图像像素综合红、绿和蓝的强度以决定显示的颜色
假彩色显示方式 颜色索引表 二维数组
真彩色显示方式 R 显示结果 G B
数据提取 • 假彩色数据提取 Function GetPseudoColorData OpenR,Lun,FileName,/Get_Lun ImageArr = BytArr(ns,nl) ; 定义二维数组 ReadU,Lun,ImageArr ;读取二进制文件 Free_Lun,Lun Return,ImageArr End • 真彩色数据提取 Function GetPseudoColorData OpenR,Lun,FileName,/Get_Lun ImageArr = BytArr(ns,nl,3) ; BSQ格式定义3维数组 ReadU,Lun,ImageArr ; Free_Lun,Lun Return,ImageArr End
图像显示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
图像操作 • 改变图像尺寸 • 图像基本处理 • 图形分类
改变图像尺寸 4*4 2*2 5*5
图像处理 • 直方图均衡化 Hist_Equal和Histogram • 平滑图像 Smooth • 图像噪声Median • 图像边缘 Roberts和Sobel • 图像频域滤波FFT • 波段操作
图像分类 • 监督分类 • 最小距离分类法、多级别切割法、最大似然法等 • 非监督分类 (分级集群法、动态聚类法) • 分级集群法采用“距离”评价各样本(每个像元)在空间分布的相似程度,把他们的分布分割或者合并成不同的集群。每个集群的地理意义需要根据地面调查或者与已知类型的数据比较后方可确定。
图形用户界面开发 • GUI(Graphic User Interface)图形用户界面 • 基于组件式开发 • 事件驱动整个流程的进行
组件结构 Widget_Base WidgetID Widget_Label Widget_Textbox …… Widget_Tree
事件定制 Event Hander A 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 • 控制控件的所有状态属性 • 常用参数: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 保存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菜单文件 Event Caption
自定义函数 • 自定义函数 • Pro Proname,Event …… End • 存放到Save_Add目录下面,由系统编译,Envi自动调用其功能。
Questions? 谢 谢!