IDL 講習会 初級編 - NAO...IDL講習会 目次 1. IDL について • IDL とは?• 言語の特徴 • IDL の配列について • 開発元の歴史 • IDL の入手
IDL 系统开发及 ENVI 功能扩展
description
Transcript of IDL 系统开发及 ENVI 功能扩展
1
IDL 系统开发及 ENVI 功能扩展
代课人代课人 :: 张锦水张锦水Email:[email protected]:[email protected]:13552203633Tel:13552203633
图形基本知识图形基本知识 图形用户界面开发图形用户界面开发 ENVIENVI 扩展编程扩展编程
内容介绍
图像基本知识 真彩色和假彩色真彩色和假彩色 图形显示程序图形显示程序
TVTV 和和 TVSCLTVSCL 图像处理图像处理 其它知识其它知识
真彩色和假彩色 假彩色假彩色
与一个颜色表联系起来,由颜色表为与一个颜色表联系起来,由颜色表为每个图像像素定义显示的颜色每个图像像素定义显示的颜色
真彩色真彩色 每个图像像素综合红、绿和蓝的强度每个图像像素综合红、绿和蓝的强度
以决定显示的颜色以决定显示的颜色
假彩色显示方式
7070 4040 8080
7070 4040 8080
6060 5050 8181
IndexIndex RR GG BB
…………
8080 255 0 102
8181 255 51 0
…………
5050 204 0 153
6060 0 51 154
二维数组
颜色索引表
真彩色显示方式
70 40 80
70 40 80
60 50 81
105 40 100
70 40 80
60 50 81
20 40 0
60 40 80
60 50 81
20 40 0
60 40 80
60 50 81
R
GB
显示结果
数据提取 假彩色数据提取假彩色数据提取
Function Function GetPseudoColorDataGetPseudoColorDataOpenR,Lun,FileName,/Get_LunOpenR,Lun,FileName,/Get_LunImageArr = ImageArr = BytArr(ns,nl)BytArr(ns,nl) ; ; 定义二维数组定义二维数组ReadU,Lun,ImageArrReadU,Lun,ImageArr ;; 读取二进制文件读取二进制文件Free_Lun,LunFree_Lun,LunReturn,ImageArrReturn,ImageArr
EndEnd
真彩色数据提取真彩色数据提取Function Function GetPseudoColorDataGetPseudoColorData
OpenR,Lun,FileName,/Get_LunOpenR,Lun,FileName,/Get_LunImageArr = ImageArr = BytArr(ns,nl,3)BytArr(ns,nl,3) ; BSQ; BSQ 格式定义格式定义 33 维数组维数组ReadU,Lun,ImageArrReadU,Lun,ImageArr ;;Free_Lun,LunFree_Lun,LunReturn,ImageArrReturn,ImageArr
EndEnd
图像显示 IDL命令 假彩色显示假彩色显示
11 )) Device,Decomposed = 0 Device,Decomposed = 0 22 )) LodctCT,Index IndexLodctCT,Index Index 为颜色索引表为颜色索引表
或者或者 TvLCtTvLCt 手工设置颜色手工设置颜色33 )) TV,Image ImageTV,Image Image 为二维数组为二维数组 (TvScl)(TvScl)
真彩色显示真彩色显示11 )) Device,Decomposed = 1Device,Decomposed = 12) TVScl,Image,Band = Index Index2) TVScl,Image,Band = Index Index 为通为通
道道
图形显示窗口 WindowWindow ,Index ,Index 创建一个新的窗口创建一个新的窗口 ,, 窗口的索引号,窗口的索引号, /F/F
reeree 由系统自动生成一个索引号的窗口由系统自动生成一个索引号的窗口 WsetWset ,, Index Index 将将 IndexIndex 窗口设置为当前窗口窗口设置为当前窗口 WdeleteWdelete ,, Index Index 删除某一个窗口删除某一个窗口 WshowWshow,Index,Index ,设置某一个窗口是否可见,设置某一个窗口是否可见 Erase Erase 擦出窗口中的内容擦出窗口中的内容
图像显示范例 IDL>Device,Decomposed = 1IDL>Device,Decomposed = 1 IDL> Window,/FreeIDL> Window,/Free IDL> OpenR,Lun,’E:\IDLIDL> OpenR,Lun,’E:\IDL 教学教学 \iknos_mult_subset.img’,/Get_Lun\iknos_mult_subset.img’,/Get_Lun IDL> ImageData = BytArr(282,224,3)IDL> ImageData = BytArr(282,224,3) IDL> ReadU,Lun,ImageDataIDL> ReadU,Lun,ImageData IDL> TvScl,ImageData[*,*,0],Channel = 1,Order = 1IDL> TvScl,ImageData[*,*,0],Channel = 1,Order = 1 ;; 第一通道,红第一通道,红
色色 IDL> TvScl,ImageData[*,*,1],Channel = 2,Order = 1IDL> TvScl,ImageData[*,*,1],Channel = 2,Order = 1 ;; 第二通道,绿第二通道,绿
色色 IDL> TvScl,ImageData[*,*,2],Channel = 3,Order = 1IDL> TvScl,ImageData[*,*,2],Channel = 3,Order = 1 ;; 第三通道,蓝第三通道,蓝
色色 IDL> Free_Lun,LunIDL> Free_Lun,Lun
图像操作 改变图像尺寸改变图像尺寸 图像基本处理图像基本处理 图形分类图形分类
改变图像尺寸
0 22 44 66
88 1010 1212 1414
1616 1818 2020 2222
2424 2626 2828 3030
0 4
16 204*4
5*5
00 11 33 44 66
……
2424 2525 2727 2828 3030
2*2
图像处理 直方图均衡化 直方图均衡化 Hist_EqualHist_Equal 和和 HistogramHistogram 平滑图像 平滑图像 SmoothSmooth 图像噪声图像噪声 MedianMedian 图像边缘 图像边缘 RobertsRoberts 和和 SobelSobel 图像频域滤波图像频域滤波 FFTFFT 波段操作波段操作
图像分类 监督分类 监督分类
最小距离分类法、多级别切割法、最大似然法等最小距离分类法、多级别切割法、最大似然法等 非监督分类 非监督分类 ((分级集群法、动态聚类法分级集群法、动态聚类法))
分级集群法采用“距离”评价各样本分级集群法采用“距离”评价各样本(每个像元)在空间分布的相似程度,(每个像元)在空间分布的相似程度,把他们的分布分割或者合并成不同的把他们的分布分割或者合并成不同的集群。每个集群的地理意义需要根据集群。每个集群的地理意义需要根据地面调查或者与已知类型的数据比较地面调查或者与已知类型的数据比较后方可确定。后方可确定。
图形用户界面开发 GUI(Graphic User Interface)GUI(Graphic User Interface) 图形用户界图形用户界
面面 基于组件式开发基于组件式开发 事件驱动整个流程的进行事件驱动整个流程的进行
组件结构
Widget_Base
Widget_Label Widget_Textbox …… Widget_Tree
WidgetID
事件定制A
B C
D E F
G
Event Hander
Event Hander
语法: Xmanager,’Name’,ID
界面示例 IDL>Base = Widget_Base(Title = 'IDL>Base = Widget_Base(Title = ' 界面演示界面演示 ',mbar = mbar,column =1)',mbar = mbar,column =1) IDL>Base1 = Widget_Base(base,row = 1 )IDL>Base1 = Widget_Base(base,row = 1 ) IDL>Button1 = Widget_Label(Base1 ,Value = 'IDL>Button1 = Widget_Label(Base1 ,Value = ' 用户名用户名 ')') IDL>Text1= Widget_Text(Base1,Value = 'aaaa',/editable)IDL>Text1= Widget_Text(Base1,Value = 'aaaa',/editable) IDL>Base2 = Widget_Base(base,row = 1)IDL>Base2 = Widget_Base(base,row = 1) IDL>Button2 = Widget_Label(Base2 ,Value = ' IDL>Button2 = Widget_Label(Base2 ,Value = ' 密码密码 ')') IDL>base3 = widget_base(base,row = 1,/align_center)IDL>base3 = widget_base(base,row = 1,/align_center) IDL>ok = widget_button(base3,value = 'IDL>ok = widget_button(base3,value = ' 确定确定 ')') IDL>Text2= Widget_Text(Base2,Value = '****',/editable)IDL>Text2= Widget_Text(Base2,Value = '****',/editable) IDL>cancel = Widget_Button(BaMse3,value = 'IDL>cancel = Widget_Button(BaMse3,value = ' 取消取消 ')') IDL>Widget_Control,Base,/RealizeIDL>Widget_Control,Base,/Realize
常用函数 Widget_Control,WidgetIDWidget_Control,WidgetID
控制控件的所有状态属性控制控件的所有状态属性 常用参数:常用参数: Set_UValueSet_UValue 、、 Get_UvalueGet_Uvalue 、、 Get_ValueGet_Value 、、
Set_Value
Result = Widget_Info(WidgetID)Result = Widget_Info(WidgetID) 获得某个窗体或控件包含的子控件获得某个窗体或控件包含的子控件 Find_By_Uname Find_By_Uname buttonID = Widget_Info(BaseID,Find_BbuttonID = Widget_Info(BaseID,Find_B
y_Uname = ‘ButtonName’y_Uname = ‘ButtonName’ ))
应用实例 总体界面总体界面 读取遥感图像读取遥感图像 保存保存 JPEGJPEG 图像图像 基本图像处理基本图像处理 图像分类图像分类 波段操作波段操作 注意问题注意问题
总体界面菜单
工具条
图像显示
遥感影像读取 (1)
列
行
遥感影像读取 (2)
图像格式图像格式 BSQ BSQ 隔波段扫描隔波段扫描 m*n*3m*n*3 BIL BIL 隔行扫描隔行扫描 m*3*nm*3*n BIPBIP 隔像素扫描 隔像素扫描 3*m*n3*m*n
解析头文件,读取数据解析头文件,读取数据 定义三维数组 定义三维数组 arry = BytArr[m*n*3]arry = BytArr[m*n*3] 读取数据读取数据 ReadU,Lun,ArrReadU,Lun,Arr
保存 JPEG文件 提取屏幕数据提取屏幕数据
Wset Wset 确定当前活动窗口确定当前活动窗口 TVRD TVRD 提取当前窗口中的图像内容提取当前窗口中的图像内容
转换数据格式转换数据格式ReImageArr = Reverse(ImageArr,3) = Reverse(ImageArr,3)
输出输出 JPEGJPEG 图片图片 Write_JPEG,FileName,ReImageArrWrite_JPEG,FileName,ReImageArr
JPEG
基本图像处理 直方图直方图 图像光滑图像光滑 边缘增强边缘增强
RobertsRoberts 增强增强 SobelSobel 增强增强
去除噪声去除噪声
直方图 Hist_EqualHist_Equal HistogramHistogram
图像光滑 SmoothSmooth 光滑光滑
边缘增强 RobertsRoberts SobelSobel
去除噪声 MedianMedian
图像分类 Clust_WtsClust_Wts ClusterCluster
波段操作( +)
波段操作( /) Band2 / Band1Band2 / Band1 需要拉伸显示需要拉伸显示
注意问题 界面变量的存储界面变量的存储
定义存储结构体,保存当前的图像数据、界面变量定义存储结构体,保存当前的图像数据、界面变量 错误陷阱的设置错误陷阱的设置 ,, 标准处理模式标准处理模式
Catch,ErrIndex Catch,ErrIndex
If ErrIndex NE 0 Then BeginIf ErrIndex NE 0 Then Begin
Goto LablelpointGoto Lablelpoint
EndIf EndIf
ExitPro:ExitPro:
释放变量释放变量 ExitExit
Lablelpoint:Lablelpoint:
Goto ExitProGoto ExitPro 程序退出清空变量程序退出清空变量 定义 Clean_UP 事件清空变量,主要为指针变量
ENVI功能扩展 直接解压直接解压 ENVIENVI 函数,批处理函数,批处理pro example_envi_batch_exit pro example_envi_batch_exit envi, /restore_base_save_files envi, /restore_base_save_files envi_batch_init, log_file='batch.txenvi_batch_init, log_file='batch.txt' ; envi_batch_exit t' ; envi_batch_exit
end end 由由 ENVIENVI 直接调用自定义函数直接调用自定义函数
ENVI操作界面
ENVI菜单编辑环境
编辑 ENVI菜单文件
Caption Event
自定义函数 自定义函数 自定义函数
Pro Proname,EventPro Proname,Event
…………
EndEnd
存放到存放到 Save_AddSave_Add 目录下面,由系统编译,目录下面,由系统编译,EnviEnvi 自动调用其功能。自动调用其功能。
示例
Questions?
谢 谢!