首页 《可视化软件》教案

《可视化软件》教案

举报
开通vip

《可视化软件》教案《可视化软件》教案 侯太平 编写 2009.8 审批 理工大学 气象学院 侯 太 平 教员姓名 单 位 信息处理教研室 课程名称 气象可视化软件 总 学 时 30学时 06级雷达工程 本科 适用对象 06级雷达,信息,工程 本科 授课学期 第7学期 理工大学训练部制表 《气象可视化软件》课程教学设计 一、课程定位 气象可视化软件是一门专业工具类课程。通过本课程的学习~学员可以掌握常用的气象可视化软件的使用方法~能够利用气象可视化软件显示、分析气象数据。本课程的先修课程为《C程序设计语言》、《面...

《可视化软件》教案
《可视化软件》教案 侯太平 编写 2009.8 审批 理工大学 气象学院 侯 太 平 教员姓名 单 位 信息处理教研室 课程名称 气象可视化软件 总 学 时 30学时 06级雷达 工程 路基工程安全技术交底工程项目施工成本控制工程量增项单年度零星工程技术标正投影法基本原理 本科 适用对象 06级雷达,信息,工程 本科 授课学期 第7学期 理工大学训练部制表 《气象可视化软件》课程 教学设计 散步教学设计免费下载洗衣歌教学设计免费下载汽车材料教学设计下载爱护水资源教学设计下载一师一优课教学设计下载 一、课程定位 气象可视化软件是一门专业工具类课程。通过本课程的学习~学员可以掌握常用的气象可视化软件的使用方法~能够利用气象可视化软件显示、分析气象数据。本课程的先修课程为《C程序设计语言》、《面向对象程序设计》、《计算机图形学》、《计算机图像学》。 二、教学对象 《科学计算》课程的授课对象是四年级生长干部本科学员~他们文化基础扎实~思维敏捷~接受能力强。在学员后期课程学习和今后的工作中会大量遇到编程和科学计算问题~因此学习本课程对他们来说是非常有帮助的。学员在学习本课程之前已经先期学习过《C语言程序设计》~通常在开课之前~需要告知学员复习和回顾《C语言》的有关内容~以便在本课程中对照比较。 三、课程教学目标 总体目标:通过本课程的学习~使学员了解气象数据可视化的基本原理和常用的数据可视化方法~学会常用可视化软件的操作使用方法~能够利用气象可视化软件显示、分析气象、水文数据~具备二维数据的显示和分析能力。 分类目标: 1(理论知识:掌握气象数据规范~了解气象数据可视化的基本原理和常用的数据可视化方法~学会常用可视化软件的操作使用方法~具备二维数据的显示和分析能力~初步掌握三维数据的可视化显示方法。培养学员认识数据可视化技术的重要性~掌握常用可视化软件的操作使用~具有较强的实际操作能力。 - i - 2(实践能力:熟练掌握IDL操作能力和编程能力~能熟练运用IDL显示各种气象数据~能够根据气象工作的实际要求~运用IDL编程解决实际问题。 3(学习方法:培养学员的自学能力、主动获取知识能力以及通过讨论寻求解决问题的方法的能力。 4(优等生应具有以下能力:具有较强的软件操作能力~能够通过编程实现复杂的数据显示和分析能力,具有较强的三维数据显示、分析能力。 四、课程教学内容设计 《气象可视化软件》是一门实践性很强的课程。教学中以提高学员的实际操作能力为目标~按照先易后难~先简单后复杂的思路进行讲解~采用启发式和研讨式的教学方法~抓住“设疑”、“质疑”、“小结”、“指定型实验”、“设计型实验”、“小论文”和“分组讨论”等生动有效的形式开展教学。讲解时要点明问题的思路~突出重点~以点带面~以缓解教学内容多学时少的矛盾。 五、课程教学模式设计 课堂教学采用多媒体课件结合传统教学进行授课~形象直观~提高学员学习积极性~积极培养学员实际动手的能力。实验结合实际~理论和实践紧密结合。使学员既学到知识~又增强动手能力。通过自主型实验培养学员的综合素质和创新能力。 在教学方法上~采用引导、启发、研究、讨论、问题驱动等多种形式~充分发挥学员的主体作用~激发每个学员的特长和潜能~培养学员的想象力和创新能力。 在教学手段上~采用多媒体和板书相结合的形式~全方位、多角度地阐述教学内容。利用多媒体动画~揭示理论知识的内涵~使理论更为形象、直观~提高学生的学习兴趣和求知欲。 - ii - 教学中充分利用学生的C语言基础~对比C语言和IDL语言的不同~一方面防止学生把两种语言弄混淆了~另一方面可以帮助学生回顾以前学过的C语言。 六、可能产生的影响课程目标实现的情况与问题分析 本课程的很多概念建立在《计算机图形学》、《计算机图像学》的基础上~如果学员对上述课程掌握不精~可能影响本课程的学习~学员前期学习过《C语言》、《面向对象程序设计》等编程课程~如果对编程,尤其是面向对象编程,掌握不深也会影响到本课程的编程部分的学习。因此~教学过程中~要根据学员的基础情况~适当复习补充部分基本知识和基本概念。教学中以培养学员操作能力为主~对可视化技术本身不宜作深入探讨。 - iii - 教学进度安排 第01讲 IDL基本概念与数据类型 ........................................ 2学时 第02讲 IDL程序设计基础.................................................... 2学时 第03讲 IDL的图形系统 ....................................................... 2学时 第04讲 IDL一维数据可视化 ................................................ 2学时 第05讲 上机练习1 ................................................................ 2学时 第06讲 IDL二维数据可视化 ................................................ 2学时 第07讲 上机练习2 ................................................................ 2学时 第08讲 图形用户界面GUI ................................................... 2学时 第09讲 上机练习3 ................................................................ 2学时 第10讲 面向对象程序设计 ................................................... 2学时 第11讲 上机练习4 ................................................................ 2学时 第12讲 IDL的图像处理 ....................................................... 2学时 第13讲 上机练习5 ................................................................ 2学时 第14讲 IDL智能工具和地图可视化 .................................... 2学时 第15讲 复习........................................................................... 2学时 - iv - 《气象可视化软件》课程教案 讲课题目: 第1讲 IDL基本概念与数据类型 目的要求: 介绍IDL基本概念和IDL数据类新。 重点难点: 1、IDL基本操作和常用命令 2、IDL数据类型 方法步骤: 对照C语言的相关内容~简要介绍IDL的数据类型~重点强调矩阵运算 和一般标量运算的区别。 器材保障: 电脑、投影仪 教学内容与时间安排(2学时) ?1-1 IDL概述 ????????????????????????????????????????????????????????????????????????????????????? 10分钟 ? 第四代语言 介绍过程中强 调软件的实用 IDL(Interactive Data Language)交互式数据语言是进行二维及多维性。 数据可视化分析及应用开发的理想软件工具。作为面向矩阵、语法简单 的第四代可视化语言,IDL致力于科学数据的可视化和分析,是跨平台 应用开发的最佳选择。它集可视、交互分析、大型商业开发为一体,为 用户提供了完善、灵活、有效的开发环境。 ? 矩阵运算 IDL语言面向矩阵的特性带来了快速分析超大规模数据的能力,是和其它高级编美国RSI(Research System Inc.)公司的旗舰产品。具有高级图像处理能程语言对 力、交互式二维和三维图形技术、面向对象的编程方式、OpenGL图形 加速功能、集成数学分析与统计软件包、完善的信号处理和图像处理功 能、灵活的数据输入输出方式、跨平台图形用户界面工具包、连接ODBC 第 1 页 兼容数据库及多种外部程序连接工具。 ? 应用广泛 IDL—交互式数据语言,是数据分析、可视化和跨平台应用开发的大型科学计算最佳选择,其用户函盖NASA、ESA、NOAA、Siemens、GE Medical、中的应用 Army Corps of Engineers、MacDonald Dettwiler等大公司及研究机构。其 中,早在1982年,NASA(美国航空航天局)还将其选用为进行火星飞 越航空器研究的开发工具,并且,这一事件列为其四十年来技术发展的 里程碑之一。 ? 可视化和分析 IDL为用户提供了可视化数据分析的解决方案,既可以让科学研究对照高级语言人员交互式浏览和分析数据,又为程序员提供了快速程序原型开发并跨绘图的编程复平台发布的高级编程工具。IDL使科学家无需写大量的传统程序就可直杂性。 接研究数据。IDL还被广泛应用于地球科学、医学影像、图像处理、软 件开发、大学教学、实验室研究、测试技术、天文、信号处理、防御工 程、数学分析、统计等诸多领域。 ?1-2 安装与卸载 ???????????????????????????????????????????????????????????????????????????????? 10分钟 安装过程时间? 软件的安装 较长~可穿插 对其它可视化 软件的介绍 ? 软件注册 ? 软件卸载 软件卸载布置 学生自学和实 习 第 2 页 ?1-3 IDL的启动与退出 ???????????????????????????????????????????????????????????????????????5分钟 ?1-4 IDL操作界面 ????????????????????????????????????????????????????????????????????????????? 10分钟 对照IDL软件 菜单栏:全部操作命令 介绍~便于学 工具栏:常用功能按钮 生更直观了解 工程窗口:项目管理 软件界面。 编辑器窗口:编程环境 结果输出窗口:运行结果 变量监控窗口:变量值、属性 命令输入窗口:命令输入 状态栏:状态信息 ?1-5 语法规范???????????????????????????????????????????????????????????????????????????????????? 15分钟 ? 大写: IDL对字母的大小写并不敏感,但与操作系统打交道的命令(例如:提问:哪些语UNIX操作系统对IDL所打开的文件名的大小写敏感)和执行字符串比言大小写敏较命令时除外。 感,哪些语言 大写可以有助于记住命令和关键字名,并且一目了然地知道命令行大小写不敏中哪些单词是函数名。 感, ? 注释: 在IDL命令中,分号(“;”)右边的任何文本都被视为是注释,IDL注释的作用 解释器将忽略它。简言之,可在IDL的程序中写入注释。 ? 续行符 第 3 页 IDL中的续行符是表示美元的符号“$”。这表示IDL语句延续到下 一语句行。建议在IDL命令行中不使用续行符,应该在IDL命令行输入 完整的IDL命令。IDL命令行将忽略续行符。 课间休息期间 了解学生学习 基础。 ?1-6 IDL命令 ????????????????????????????????????????????????????????????????????????????????????? 50分钟 ? IDL命令概述 IDL是一种程序语言。但是从命令行键入IDL命令中能学到很多东 西。特别是能学会画出和测试一些东西,并且可以用数据文件做实验, 这些被称为“循序渐进”,是学习IDL的最好方法之一。 ? 位置参数 位置参数在命令名的右边有其确定的顺序。一般情况下,命令的位举例: 置参数必须给定参数。 Counter命令 ? 关键字参数 与位置参数不同,关键字参数能以任何顺序出现在命令名右边。它 们甚至能出现在位置参数中间而不影响位置参数之间的相对位置。换句 话说,关键字参数不能像位置参数那样对待。 ? IDL过程和函数 命令Contour是一个IDL过程。IDL命令要么是过程,像这个命令一样,要么是函数。如下的IDL命令BytScl就是一个函数: scaled=BytScl(image, Top=199, Min=0, Max=maxValue) 注意Contour过程和BytScl函数的不同。 首先,在函数命令中,位置参数和关键字放在一对圆括号中的。在 第 4 页 过程命令中,参数和关键字仅排列在一个命令行上。 其次,最重要的区别是IDL函数会返回一个值,等号左边的一个变量用于返回该值。这是IDL中函数命令和过程命令根本的区别。 函数命令总是返回一个值,这个数值必须赋给一个变量。函数返回值可能是任一种IDL变量,包括数值、数组或结构。 有时可以看到一个函数和过程写在一起,例如,考虑一下这两个命令: scaled=BytScl(image,Top=199,Min=0,Max=maxValue) TV,scaled 第一个命令是一个函数命令,另一个是过程命令,此过程使用函数的返回值作为其位置参数,两个命令写成如下形式在IDL中很常见: TV, BytScl(image,Top=199,Min=0,Max=maxValue) 在这种情况下,BytScl命令首先被执行并得到一个返回值,此返回值作为TV命令的位置参数。 ? IDL命令帮助 IDL有全面的在线帮助系统,能为读者提供有关IDL命令和参数的非常有帮助的信息。 可以通过在IDL命令行中输入一个问号,或在IDL开发环境下拉菜单中选择Help菜单项获得在线帮助。IDL文档集中的大部分信息都可通过在线帮助获得。为了获得IDL在线系统帮助,仅仅需要在IDL的命令行中输入一个问号。 IDL>? ? 创建命令日志 如果希望将在命令行里面输入的命令保存为日志或记录,则需要创建一个日志文件。 日志文件是一个IDL批处理文件。在IDL中用Journal命令打开一个日志文件,并指定想打开的文件名。该文件将是一个用于写信息的新文件。从IDL命令行不能添加日志文件。 第 5 页 当想关闭日志文件时,再次在IDL命令行键入Journal命令,如下: IDL>Journal 日志文件是能编辑的一个简单的ASCII文本文件。可用任何一个文本编辑,包括由IDL的PC版本附带的编辑器。 当想再次执行日志文件中的命令时,在IDL命令行键入@作为开头字母。 确定创建的每个日志文件有惟一的名称,不能添加日志到这些日志文件。所以,如果第二次建立的日志文件名和第一次相同,许多操作系统将会毫无警告地覆盖第一个日志文件 如果每次建立日志文件时都想要一个惟一文件名,可用下列的IDL程序完成: PRO Journal_Unique Journal, String('journal_',Bin_Data(SysTime()),'.pro', Format='(A,I4,5I2.2,A)') END 然后,用Journal_Unique代替Journal,就可以建立每次都具有惟一文件名的日志文件。 ? 举例 一个例子 peak=shift(dist(40),25,15) peak=exp(-(peak/15)^2) x=findgen(40)/8+5 y=findgen(40)*2.5 Contour,peak,x,y,XStyle=1,YStyle=1, /Follow, $ NLevels=20, C_Label=[1,0,1,0,0,1,1,0] Surface, peak shade_Surf, peak 回顾与小结: 本章介绍了IDL的基本知识,包括IDL的特点、书写格式、命令格式、获取联系帮 助、命令日志等。通过本章的学习,使学生对IDL有基本的了解。 第 6 页 作业与思考题: 作业:安装、卸载IDL,熟悉IDL的工作环境。 参考资料: 1、《IDL可视化工具入门与提高》闫殿武,机械工业出版社 2、 应急 预案 社区应急预案下载社区应急预案下载社区应急预案下载应急救援预案下载应急救援预案下载 : 1、如果遇到停电或者计算机故障等意外情况导致不能正常播放幻灯片,可以通过增加板书的方法解决问题,由于板书比较耗时,可以适当减少举例的数量。 2、这是第一节课,应将课件用不同的介质存放,避免课件不能使用的情况发生。 本次课教学体会: 第 7 页 《气象可视化软件》课程教案 讲课题目: 第02讲 IDL程序设计基础 目的要求: 掌握IDL的数据类型和变量的特性~掌握IDL的矢量和数组的使用。 重点难点: 动态变量类型 矢量和数组的使用 方法步骤: 通过实例操作演示~将一些难以理解的概念以直观的形式展示给学生~从 而帮助学生理解。 器材保障: 电脑、投影仪 教学内容与时间安排(2学时) ?2-1 变量和数据类型 ???????????????????????????????????????????????????????????????????????? 10分钟 1. 变量名 变量名必须以字母开头。它们可以包括其他字母、数字、下划线、美元符号。一个变量名最长可达255个字符。 变量名有两个重要属性:数据类型和组织结构。 , 数据类型指出属于数据类型中的哪一种。在IDL中有14种基 本数据类型。 , 有效的组织结构有标量(例如单个数值)、矢量(真正的一维 数组)、数组(最高可达八维)和IDL结构(能包含各种数据 类型的变量和组织结构,结构中独立的组成部分称为字段)。 2. 数据类型 字节型、16位有符号整型、32位有符号长整型、64位有符号整型、16位无符号整型、32位无符号长整型、64位无符号整型、浮点型、双精度浮点型、复数、双精度复数、字符串、指针、对象。 第 8 页 3. 数组 IDL擅长于处理矢量或数组数据,有大量的IDL命令用于创建不同数据类型的矢量和数组。IDL有许多创建各类数据类型的数组的函数。 IDL函数可以创建矢量和多维数组,并将其每个元素初始为0或为它们本身的索引号码。 数据类型 初始化函数 产生索引值的函数 字节型 BytArr BIndGen 16位有符号整型 IntArr IndGen 32位有符号长整型 LonArr LIndGen 64位有符号整型 Lon64Arr L64IndGen 16位无符号整型 UIntArr UIndGen 32位无符号长整型 ULonArr ULIndGen 64位无符号整型 ULon64Arr UL64IndGen 浮点型 FltArr FIndGen 双精度浮点型 DblArr DIndGen 复数 ComplexArr CIndGen 双精度复数 DComplexArr DCIndGen 字符串 StrArr SIndGen 指针 PtrArr None 对象 ObjArr None ?2-2 动态改变变量的属性 ???????????????????????????????????????????????????????????????? 20分钟 1. 动态改变变量的属性 IDL最强大的功能之一是大多数过程或函数都能在任何数据类型或组织结构上生效。在IDL中,本质上讲变量类型是毫无意义的,因为这种变量的数据类型很容易改变。 2. 不同类型数据的运算结果 另一个例子: result=4*x 第 9 页 变量的数据类型和组织结构主要取决于变量x的数据类型和数据结构。如果x是10个元素的浮点矢量,结果将会是10个元素的浮点矢量。如果它是100 x 200的长整数数组,结果也将是100 x 200的长整数数组。 注意,如果x有一个字节的数据类型,那么结果将是一个整数数据类型。这是由于和整数相乘的结果。 3. 赋值语句 记住等号右边的表达式总是在将数据类型和组织结构赋予等号左边的变量前计算的。 IDL将变量提升到能保持表达式的计算精度的数据类型。 ?2-3 整型变量的有关问题 ???????????????????????????????????????????????????????????????? 20分钟 IDL的一个整型只有两个字节长。整型在其他程序语言中有四个字节。两个字节的整数只能大到32767。大于这个值通常由于“溢出”而被IDL当作为负数。 首先,在循环中没有考虑到短整数的因素,例如,假如想读一个数据文件,但不知道有多少行。可以写入如下代码: count=0 WHILE NOT EOF(lun) DO BEGIN READF,lun, temp data(count)=temp count=count+1 ENDWHILE 如果数据文件多于32768行,这个代码就失败了。因为count变量初始为短整数,更好的写法如下: count=0L WHILE NOT EOF(lun) DO BEGIN READF,lun, temp data(count)=temp count=count +1L ENDWHILE 另外一个常犯这种错误的地方是在For循环中。最好是按如下写法 第 10 页 来写出For循环命令: FOR j=0L,num-1 DO... 第二种在使用短整型时可能会遇到麻烦是在读取用其他编程语言生成的数据时(或者反过来)。如果读取用C或Fortran程序生成的整型数据,应该确保在IDL中用长整型来读这些数据。同样,应该用长整型数据来写那些将被C或Fortran程序视为整型来读入的文件。 ?2-4 矢量和数组 ???????????????????????????????????????????????????????????????????????????????? 50分钟 1. 创建矢量 在IDL命令行中,可以用一对方括号创建一个矢量(矢量是指一维的数组)或一个数组,如下: IDL>vector=[1,2,3] 用Help命令可以获取关于数据类型和变量结构的信息,如下: IDL>Help,vector VECTOR INT =Array[3]? 如果想从第四个元素增加到矢量中,在IDL中可以很轻松地完成。只需键入: IDL>vector=[vector, 4] 2. 数组下标的应用 在IDL中矢量和数组下标的起始值是0,而不是1,使用方括弧来引用数组下标。假设打算在数组的第二和第三个元素之间添加另外一个元素,数组下标可以帮助完成: IDL>vector=[vector[0:1],5,vector[2:3]] 矢量也可用表2中讲到的数组来创建函数。例如,建立一个值在0到50之间的6个元素浮点矢量,可键入: IDL>vector=FIndGen(6)*10 3. 数组的建立 数组也可以在IDL命令行中建立。例如: IDL>array=[[1,2,3],[4,5,6]] 第 11 页 以上等同于先建立一个矢量,然后用Reform命令将此变形为一个三行二列的数组: IDL>vector=IndGen(6)+1 IDL>array=Reform(vector,3,2) 这表明矢量和数组均是以行的顺序存储在IDL中的。 4. 数组中元素的存取 假设想读出刚才建立的数组中位于第一列第二行的元素,可以键入: IDL>Print,array[0,1] 下标的顺序先是列标,后是行标。这正好与已习惯的线性代数中的矩阵或行列式相反。可以使用一维下标来存取该数组中的每一个元素。获得数组中的第四个元素可以键入以下语句来存取: IDL>Print, array[3] 也可以用一维向量来做数组的下标。例如,要存取数组中的第一,二,四和第六个元素,可键入: IDL>indices=[0,1,3,5] 很容易从数组内提取出矢量和子数组。例如: IDL>data = RandomU(seed, 10, 20) 提取出第6-10列和第12,15行的数据可键入: IDL>subarray = data[5:9, 11:14] 要将第8列的数据画出来,可以使用下标“*”代表所有的行,如下所示: IDL>Plot, data[7,*] 要取出一个第14行的矢量,键入: IDL>vector = data[*,13] 5. 矢量和子数组的提取 要提取出一个数据为数组中最后5行的数组,键入: IDL>subarray = data[*,15:19] 现在可以看到子数组是一个10列x 5行的数组。同样可以用“*” 第 12 页 代表剩下的所有数据。例如,用数组的最后5列建立一个子数组,也可键入: IDL>subarray = data[5:*,*] 回顾与小结: 本章介绍了IDL中的数据类型和变量的使用,重点介绍了数组和矢量的定义、构造和使用。通过本章的学习,使学生对IDL的数据结构有初步的了解。 作业与思考题: 思考:IDL的数据类型和其他高级语言相比有什么特色, 参考资料: 1、《IDL可视化工具入门与提高》闫殿武,机械工业出版社 2、 应急预案 办公室装修施工应急预案 下载公司关于消防应急预案火灾的应急预案防汛防洪应急预案施工生产安全应急预案 : 如果遇到停电或者计算机故障等意外情况导致不能正常播放幻灯片,可以通过增加板书的方法解决问题,由于板书比较耗时,可以适当减少举例的数量。 本次课教学体会: 第 13 页 《气象可视化软件》课程教案 讲课题目: 第03讲 IDL的图形系统 目的要求: 掌握IDL图形绘制窗口的使用~掌握在IDL中绘制线画图的方法。 重点难点: 图形窗口的使用 绘制各种风格的线画图 方法步骤: 基本原理概念部分以对照 ppt 关于艾滋病ppt课件精益管理ppt下载地图下载ppt可编辑假如ppt教学课件下载triz基础知识ppt 课件讲授为主~涉及IDL具体操作的部分~ 通过打开IDL软件~现场操作为主。 器材保障: 电脑、投影仪 教学内容与时间安排(4学时) ?3-1 图形窗口的使用 ???????????????????????????????????????????????????????????????????????? 50分钟 ? 图形窗口的建立 可直接用Window命令建立一个图形窗口,或是在没有窗口打开的情况下,间接通过运行图形显示命令来打开。 例如,可以建立并启动一个窗口,只须键入: IDL>Window 窗口的标题栏中有一个0,这是窗口的索引号。当图形窗口建立后,每个图形窗口都有惟一的一个图形窗口索引号。 Window命令如果没有任何位置参数总是创建出索引号为0的图形窗口,被称为“窗口0”。在IDL的一次运行中,最少可同时打开128个图形窗口,可以为0到31号图形窗口指定一个索引号。对于32到127号图形窗口,可以用Window命令带上Free关键字来创建,IDL将赋予为它们索引号。 倘若某个索引号图形窗口的窗口已经存在,再用Window命令创建 第 14 页 相同索引号图形窗口,Window命令将首先删除旧窗口,然后建立一个带有此索引号的新窗口。 可以用一个未用的索引号或者已经打开但是空白窗口的索引号来创建新的图形窗口。关键字Free即为此目的而设,如下所示: IDL>Window, /Free 用关键字Free建立的图形窗口,将会具有一个大于31的索引号。关键字Free是建立索引号大于31的常规图形窗口的惟一途径。 ? 确定当前图形窗口 显示器上可以打开多个图形窗口,但只有一个是当前图形窗口。当前图形窗口用于接受图形命令的输出结果。当前图形窗口的索引号总是存储在!D.Window系统变量中。如果没有创建和打开图形窗口,系统变量!D.Window的值为,1。可以创建一个图形窗口,并存储其图形窗口索引号,以便以后删除该窗口或使其成为活动窗口。可键入: IDL,Window, /Free IDL> thisWindowIndex = !D.Window ? 使图形窗口成为当前窗口 为使一个窗口成为当前图形窗口,可使用Wset命令和图形窗口索引号来设定。例如,希望当前图形窗口为10号窗口时,键入: IDL,Wset, 10 随后所有的图形命令的结果都将显示到10号窗口内。 注意,当一个图形窗口创建完成后,该窗口即成为当前窗口。为了在某个窗口内绘制图形,该窗口必须是当前图形窗口。 ? 删除图形窗口 可用Wdelete命令和图形窗口的索引号删除图形窗口。被删除的图形窗口不必是当前图形窗口。例如,删除窗口10,键入: IDL,WDelete, 10 删除当前显示器上的所有图形窗口有一个技巧: 第 15 页 IDL,WHILE !D.Window NE –1 DO $ Wdelete, !D.Window ? 图形窗口的位置和尺寸 在创建图形窗口时,图形窗口的位置和尺寸是根据内部运算规则确定的。 在Window命令中,用关键字可以设置图形窗口的位置和尺寸。例如,用关键字XSize 和YSize创建一个宽200像素,高300像素的窗口,键入: IDL,Window, 1, XSize=200, YSize=300 可用相对于显示器左上角的像素坐标或设备坐标来确定窗口位置。例如,用关键字XPos 和YPos将窗口的左上角位置于显示器(75,150)处,键入: IDL>Window, 2, XPos=75, YPos=150 ? 将图形窗口设置到显示器最前面 创建一个图形窗口时,该窗口拥有输入焦点,同时也成为当前图形窗口。在不改变窗口输入焦点的情况下,要将一个图形窗口显示在前面,可用Wshow命令和图形窗口索引号来完成。 IDL,Wshow, 1 光标和窗口焦点仍在键入IDL命令的命令输入窗口或其他窗口内。用Wshow命令将窗口显示在前面但并不将窗口改变为当前窗口。如果既想将该窗口拖到前面,又想将其变为当前窗口,那么可同时键入Wshow 和Wset命令: IDL,Wshow, 2 IDL,Wset, 2 输入不带参数的Wshow命令,可以将使当前窗口被拖到前面。当不清楚哪个是当前图形窗口和只想将当前窗口拖到前面而不从IDL命令窗口移动开焦点时,这个命令是非常有用的。 IDL,Wshow 在PC机和Macintosh机器上,可以用Alt-Tab键或者OPTION-TAB 第 16 页 键来循环选择已经在显示器上打开的窗口,让其可见并拥有窗口焦点。 ? 在图形窗口上设置标题 如果希望在图形窗口上设置标题,而不仅仅是图形窗口索引号。可以使用Title关键字将标题设置到窗口上,键入: IDL,Window, Title=’Example IDL Graphics Commands’ ? 清除图形窗口内容 可以使用Erase命令清除当前图形窗口内容: IDL,Erase 如果想用一种特定的颜色索引号,去清除当前图形显示,可以用color关键字。例如,可以用以下命令实现用炭灰色清除当前图形显示: IDL>TVLCT, 70, 70, 100 IDL>Erase, Color=100 想清除非当前图形窗口(系统变量!D.Window指向的窗口)的内容,必须使该窗口成为当前图形窗口,接着使用Erase命令。 ?图形窗口举例 pro test WHILE( !D.window NE -1) DO BEGIN WDelete, !D.Window ENDWHILE window, 1, XSize=400, YSize=400, XPos=0, YPos=0, Title='等值线' window, 5, XSize=400, YSize=400, XPos=500, YPos=0 window, XSize=400, YSize=400, XPos=0,YPos=500, /free wnum = !D.Window peak = shift(dist(40,40),25,15) peak = exp(-(peak/15)^2) lab = IntArr(10)+1 wset, 1 contour, peak, NLevel=10, C_Label=lab wset, 5 surface, peak wset, wnum 第 17 页 shade_surf, peak end ?3-2 绘制线画图 ???????????????????????????????????????????????????????????????????????????????? 50分钟 ? 创建线画图 生成线画图最简单的方法是绘出一个矢量。 为了绘制曲线,先生成一组模拟数据。 x = 2*!pi*FIndGen(91)/91.0 y = sin(0.63*x)-0.71*sin(x)+0.91*sin(2.3*x) 要绘出该矢量,可键入: IDL>Plot, y IDL试图用少量的信息尽可能地绘出漂亮的线画图。在这种情况下,x轴或水平轴被标识为从0到90,这与矢量中的元素个数相对应。而y轴或垂直轴则是用数据坐标来标识。 线画图一般用于显示一组数据相对另外一组数据的关系。例如,上面的曲线可能代表在某段时间内采集数据的信号。可能需要绘制某个时刻的信号值。在这种情况下,需要一条与该曲线矢量具有相同元素个数的矢量,并将该矢量转换为实验中所用的时间单位。例如,可以创建一个时间矢量,并绘出它与上述曲线矢量的关系图: IDL>t=FIndGen(91)*(6.0/91) IDL>Plot, t, y 图上设置标题只要用XTitle和YTitle关键字即可实现。例如,为此曲线图加标题,可键入: IDL>Plot, t, y, XTitle='t Axis', $ YTitle='Signal Strength' 可以用Title关键字对整个图形设置标题,键入: IDL>Plot,t,y,XTitle='t Axis', $ YTitle='Signal Strengh',Title='Experiment 35M' 图形标题比坐标轴的标题稍大(1.25倍) 。可以用CharSize关键字改变所有图形注记的大小。例如: IDL>Plot, t, y, XTitle='t Axis', CharSize=1.5 $ YTitle='Signal Strength', Title='Experiment 35M' 如果希望所有的图形显示的字符比正常情况下大,可以通过绘图系 第 18 页 统变量上设置CharSize的大小,如下: IDL>!P.CharSize=1.5 所有后续的图形显示都将用较大的字符,除非用CharSize关键字在图形输出命令中特别地控制。 可以用[XYZ]CharSize关键字单独改变每个轴的标识字符的大小。例如: IDL>Plot, t, y, XTitle=‘t Axis’, XCharSize=1.0, $ YTitle='Signal Strength', YCharSize=2.0 [XYZ]Charsize关键字使用当前字符的大小作为基础计算出各自的大小。当前字符的大小一般储存在!P.CharSize系统变量中。这意味着,如果设置XCharSize关键字为2,当!P.CharSize系统变量也被设置为2时,字符将比平常大4倍。 ? 改变线条的线型和粗细 用不同的线型画出数据,如画一条线型为长虚线的线条,可以这样实现: IDL>Plot, t, y, LineStyle=5 对于线画图来说,可通过LineStyle关键字选用表3,1中列出的索引号确定不同的线型。例如,想使用虚线画出曲线,可以把LineStyle关键字的值设置为2: IDL>Plot, t, y, LineStyle=2 线型索引号: 索引号 线型 实线 0 点线 1 虚线 2 划点线 3 划点点线 4 长虚线 5 线画图中线的粗细同样能够被改变。如: IDL>Plot, t, y, LineStyle=2, Thick=3 第 19 页 ? 用符号代替线条表示数据 用符号代替线条表示数据,可以通过PSym关键字实现。如:用星号来绘图命令如下: IDL>plot, t, y, Psym=2 表3-2给出PSym关键字的取值。 索引号 绘图符号 无符号,通过线条连接点 0 加号 1 星号 2 点 3 菱形 4 三角形 5 方形 6 7 X 用户自定义符号(用UserSym过程来定义) 8 未用 9 绘图符号为负值时表示用线条来连接相应的符号。赋予PSym关键字一个负值就可以用线条将图形符号连接起来。例如,可用实线与三角形符号绘出数据,键入: IDL>Plot, t, y, PSym=-5 为创建一个更大的符号,可用SymSize关键字。下面的语句画出的符号为正常的两倍。符号值为4时符号的大小为正常值的4倍,依此类推。 IDL>Plot, t, y, PSym=-5, SymSize=2.0 创建自定义图形符号。在创建一个特殊的图形符号后通过设置PSym关键字为8来选择它。一个创建五角星符号的例子。 u,v矢量定义五角星的顶点,它们的值为偏离原点(0,0)的位置。可以用UserSym命令通过设置关键字Fill创建一个填充的图形符号: IDL>u=[0.0, 0.5, -0.8, 0.8, -0.5, 0.0] IDL>v=[1.0, -0.8, 0.3, 0.3, -0.8, 1.0] IDL>TvLCT, 255, 255, 0, 150 IDL>UserSym, u, v, Color=150, /Fill 第 20 页 IDL>Plot, t, y, PSym=-8, SymSize=2.0 ? 用不同的颜色绘制线画图 可以用不同的颜色绘制线画图。 IDL>device,decompose=0 IDL>TvLCT, [70,255,0], [70,255,255], [70,0,0], 1 该语句表示装载了三个颜色矢量,每个矢量的三个分量分别代表颜色的三个组成部分红、绿、蓝。 在碳灰背景下绘黄色图,键入: IDL>Plot, t, y, Color=2, Background=1 可以用不同颜色绘制线条:首先必须将NoData关键字打开来绘图;然后用OPlot命令覆盖该图。如,在碳灰色背景上绘制黄色外框,数据用绿色显示: IDL>Plot, t, y, Color=2, Background=1, /NoData IDL>OPlot, t, y, Color=3 ? 限定线画图的范围 可以用关键字限定绘图的数据量。如只绘出位于X轴上2至4之间的数据: IDL>Plot, t, y, XRange=[2, 4] 例如,只绘出Y值在10至20之间,X值在2至4之间的部分数据图形: IDL>Plot, t, y, YRange=[0, 2], XRange=[2, 4] 可以通过给定关键字数据范围来反转数据的方向。如,可将Y轴的0点设置为图形的顶端: IDL>Plot, t, y, YRange=[2, 0] ? 改变线画图的风格 可以改变线画图的许多特性,包括它们的外观形式。 可以用[XYZ]Style这些关键字改变线画图的特性。例如,不显示线画图的方框。表3-3给出了可通过这些关键字来改变线画图风格的值。 第 21 页 例如,除去方框线,只留下X轴或Y轴: IDL>Plot, t, y, XStyle=8, YStyle=8 表3-3 [XYZ]Style关键字参数取值 值 对坐标轴的影响 精确的坐标轴范围 1 扩展坐标轴范围 2 不显示整个坐标轴 4 不显示外框(只画坐标轴) 8 屏蔽Y轴起始值为0的设置(只有Y轴有此属性) 16 这些值可以累加从而设置坐标轴的多个属性,例如,强制使用精确 的坐标轴范围的参数值为1,删除方框线的参数值为8。让X轴显示精 确的范围又隐藏方框线,可将两个参数值相加: IDL>plot, t, y, xstyle=8+1 可以完全隐藏一个轴。如,仅显示Y轴: IDL>Plot, t, y, XStyle=4, YStyle=8 可以用Y轴和Y方向的网格线来显示同一幅图: IDL>Plot, t, y, XStyle=4, YTickLen=1, YGridStyle=1 在线画图上创建网格线,通常可用TickLen关键字来完成。 IDL>Plot, t, y, TickLen=1 将[XYZ]TickLen关键字设置为一个负值可以创建向外的刻度标记。 IDL>Plot, t, y, TickLen=-0.03 在某个轴上创建向外的刻度标记,可将[XYZ]TickLen关键字设置为 一个负值。 IDL>Plot, t, y, XTickLen=-0.03 可以用[XYZ]Ticks和[XYZ]Minor关键字在一个轴上选择主要的和 次要的刻度标记的个数。 IDL>Plot, t, y, XTicks=2, XMinor=10, XStyle=1 ? 在线画图上绘出多种数据集 用OPlot命令可以在同一套坐标轴内显示任意多套数据。 IDL>Plot, y IDL>OPlot, y/2.0, LineStyle=1 第 22 页 IDL>OPlot, y/5.0, LineStyle=2 初始的Plot命令为以后的绘图建立数据比例。要确保初始图形有足够的轴长,以便包容以后绘制的所有图形,否则数据将被裁剪掉。可在第一个Plot命令中用XRange和YRange关键字来创建一个足够大的数据范围。为区别不同的数据集,可用不同的线型,不同的颜色,不同的图形符号等。Oplot命令接受很多被Plot命令接受的关键字。 IDL>TvLCT, [255,255,0], [ 0,255,255], [ 0, 0, 0], 1 IDL>Plot, y, /NoData IDL>OPlot, y, Color=1, LineStyle=0 IDL>OPlot, y/2.0, Color=2,LineStyle=1 IDL>OPlot, y/5.0, Color=3,LineStyle=2 ? 在多个轴的图上显示数据 用Axis命令可以在同一个线画图上显示两个或多个数据集,并用不同的y轴表示不同的数据集。使用Axis命令的关键是使用save关键字来存储正确的绘图比例参数,以便后续图形的调用。用带Save关键字的Axis命令建立第二个Y轴。OPlot命令中的曲线将调用通过Axis命令保存的比例因子,以确定其在图形中的位置。 IDL>Plot, y, YStyle=8, YTitle='Solid Line', $ Position=[0.15, 0.15, 0.85, 0.95] IDL>Axis, YAxis=1, YRange=[0, Max(y*5+1)], $ /Save, YTitle='Dashed Line' IDL>OPlot, y*5, LineStyle=2 Position关键字用来确定第一个图形在页面内的位置。 ????????????????????????????????????????????????????????????????????????????? 100分钟 第 23 页 回顾与小结: 本章介绍了IDL中图形窗口的使用以及绘制线画的方法,介绍了对线画图的各种输出效果的控制法。通过本章的学习,使学生掌握在IDL中绘制各种风格的线画图方法。 作业与思考题: 作业:查阅资料,了解在IDL中如何控制绘图的颜色。 参考资料: 1、《IDL可视化工具入门与提高》闫殿武,机械工业出版社 2、 应急预案: 如果遇到停电或者计算机故障等意外情况导致不能正常播放幻灯片,可以通过增加板书的方法解决问题,由于板书比较耗时,可以适当减少举例的数量。 本次课教学体会: 第 24 页 《气象可视化软件》课程教案 讲课题目: 第04讲 IDL一维数据可视化 目的要求: 掌握绘制网格曲面、渲染曲面和等值线的方法。 重点难点: 渲染曲面的颜色映射 等值线的绘制 方法步骤: 基本原理概念部分以对照PPT课件讲授为主~涉及IDL具体操作的部分~ 通过打开IDL软件~现场操作为主。 器材保障: 电脑、投影仪 教学内容与时间安排(2学时) ?4-1 绘制网格曲面图 ???????????????????????????????????????????????????????????????????????? 50分钟 ?创建网格曲面图 在IDL程序中,任何二维的数组都可以用Surface命令生成一个曲面图(经过自动消隐)。 先生成一组模拟二维数据: IDL>z=randomu(522L, 81, 81) IDL>for i=0,3 do z=smooth(z, 15, /edge) IDL>z=(z-min(z)) * 1500.0 + 100.0 绘制曲面: IDL>Surface, z, CharSize=1.5 如果仅用单个数组作为变量调用Surface命令,它将把该数组作为其元素个数的函数来绘图。 和Plot命令一样,可以指定X和Y轴的物理含义,如:假设X和Y轴的数值是经纬度(Longitude 、Latitude)坐标。(这里,设纬度范围为从24度到48度,经度范围为-122度到-72度: 第 25 页 IDL>lon=FIndGen(81)*(24.0/81)+24 IDL>lat=FIndGen(81)*(50.0/81)-122 IDL>Surface, z, lon, lat, XTitle='Longitude', $ YTitle='Latitude', ZTitle='Elevation', CharSize=1.5 上例中lon和lat参数是单调递增并且是规则的,它们描述了曲面网格线的地理位置。如果使经度数据点不规则分布会出现什么情况,下面的命令模拟随机分布的经度点: IDL>seed=-1L IDL>newlon=RandomU(seed, 81)*81 IDL>newlon=newlon[Sort(newlon)]*(24./81)+24 观察newlon的值,和lon比较,可以发现经度X值(newlon)是没有规则分布的。 IDL> Device, Decompose=0 IDL> TvLCT, [255,255,0], [ 0,255,255], [ 0, 0, 0], 1 IDL> Plot, lon, /NoData IDL> OPlot, lon, Color=1, Thick=3 IDL> OPlot, newlon, Color=2, Thick=3 此时绘出的图形会是什么样子, IDL>Surface, z, lon, lat, XTitle='Longitude', $ YTitle='Latitude', ZTitle='Elevation', CharSize=1.5 IDL>window,/free IDL>Surface, z, newlon, lat, XTitle='Longitude', $ YTitle='Latitude', ZTitle='Elevation', CharSize=1.5 可以看出,IDL不是对图像重新采样而是使用不均匀数据直接绘制了图像。 ? 定制网格曲面图 Surface命令有70多个关键字可以用来定制曲面图,许多关键字和Plot命令相同。 用Title关键字时,标题被旋转到XY平面内: IDL>surface, z, lon, lat, XTitle='Longitude', $ YTitle='Latitude', Title='Mt.Elbert', Charsize=1.5 如果希望标题位于与显示窗口平行的平面内,就必须用XYOutS命 第 26 页 令显示标题 IDL>Surface, z, lon, lat, Xtitle='Longitude', $ Ytitle='Latitude', Charsize=1.5 IDL>XYOutS, 0.5, 0.90, /Normal, Size=2.0, Align=0.5, 'Mt.Elbert' ? 旋转网格曲面图 曲面图可以用Ax关键字使其绕X轴或用Az关键字使其绕z轴旋转。当从轴上的正值向原点观察时,曲面图以逆时针方向,按某个角度值旋转。当Az和Ax关键字被忽略时其缺省值是30度。例如,使曲面图绕Z轴旋转60度,绕X轴旋转35度: IDL> Surface, z, lon, lat, Az=60, Ax=35, $ Charsize=1.5 ? 为网格曲面赋色 给曲面图着色只需使用在线画图中用过的赋色关键字即可。例如,在碳灰色背景上创建一个黄色的曲面图: IDL>TvLCT, [70, 255, 0], [70, 255, 255], [70, 0, 0], 1 IDL>Surface, z, Color=2, Background=1 如果想使曲面图的底面的颜色不同于顶面,可以使用Bottom关键字来实现: IDL> Surface, z, Color=2, Background=1, Bottom=3 如果想将轴以不同的颜色显示,必须键入两个命令。第一个命令使用NoData关键字,只将轴绘出。第二个命令是在关闭轴线后绘出曲面本身。 IDL>Surface, z, Color=3, /NoData IDL>Surface, z, /NoErase, Color=2, Bottom=1,XStyle=4, YStyle=4, ZStyle=4 可以用不同的颜色画出曲面的格网线。这是需要用到两个数据集,一个用于绘制网格,另一个数据集用于对第一个数据集进行着色。 IDL>LoadCT, 5 IDL> colr=randomu(2006L, 81, 81) IDL> for i=0,3 do colr=smooth(colr, 15, /edge) IDL> Surface, z, Shades=BytScl(colr, Top=!D.Table_Size-1) 考虑如下的情况(给数据自身着色): 第 27 页 IDL>Surface, z, Shades=BytScl(z, Top=!D.Table_Size-1) 必须用BytScl命令将着色数据集调整到IDL颜色数范围。如果调整失败,只能看到一套坐标轴,看不到曲面显示。 ? 修改网格曲面图外观 有很多关键字可以用来修改曲面图的外观或形式。例如,可以使用Skirt关键字来指定边缘该画到何处。试试下面命令: IDL>Surface, z, Skirt=0 IDL>Surface, z, Skirt=500, Az=60 如果仅绘出水平线,获得一种层叠线形图,比如,键入: IDL>Surface, z, /Horizontal 可以通过关键字来只显示曲面的底面或顶面: IDL>Surface, z, /Upper_Only IDL>Surface, z, /Lower_Only 有时可能只想显示曲面本身,而不需要轴线。可键入: IDL>Surface, z, XStyle=4, YStyle=4, ZStyle=4 ?4-2 绘制渲染曲面图 ???????????????????????????????????????????????????????????????????????? 50分钟 ?创建渲染曲面图 Shade_Surf命令用于创建阴影(渲染)曲面图,IDL采用Gouraud光源阴影算法创建曲面图。 IDL> loadct,2 IDL>Shade_Surf, z Shade_Surf命令接受大多数被Surface命令接受的关键字,如旋转阴影曲面: IDL>Shade_Surf, z, lon, lat, Az=45, Ax=30 ? 改变渲染处理参数 用Set_Shading命令可以改变Shade_Surf命令所使用的阴影处理参数,如将光源的光线的方向从平行Z轴的默认值[0,0,1]改变为平行X轴的方向[1,0,0]: 第 28 页 IDL>Set_Shading, Light=[1, 0, 0] IDL>Shade_Surf, z 可以从彩色表中挑选某种颜色索引号用作阴影处理。例如,想把红色彩色表(彩色表3)装载到颜色索引号100到199之中,并将之用于阴影处理,可键入: IDL>LoadCT, 3, NColors=100, Bottom=100 IDL>Set_Shading, Values=[100, 199] IDL>Shade_Surf, z 注意将光源位置和颜色参数恢复原值,否则可能会造成混乱。 IDL>LoadCT,5 IDL>Set_Shading, Light=[0,0,1], Value=[0,!D,Table_Size-1] ? 用其他数据集作为渲染参数 和Surface命令一样,可以用其他数据集作为本数据集的阴影颜色值。用Shades关键字为曲面上各点指定颜色索引号。每个像素点的阴影处理都是根据该点周围数据值通过插值求出。 IDL>Shade_Surf, colr 现在用这个数据集来对最初的高程数据集进行阴影处理: IDL>Shade_Surf,z,lon,lat, Shades=BytScl(colr, Top=!D.Table_Size) 可以用数据点的高程值作为曲面阴影颜色值: IDL>Shade_Surf, z, Shades=BytScl(z, Top=!D.Table_Size) 将另一数据集覆盖在曲面图上是一种给数据升维的方法。例如,可将一组数据集覆盖在一个三维曲面图上,就可以直观的获得四维的信息。如果同时让两组数据集合随时间活动起来,就可以直观的获得五维信息。 有时只是想将原始曲面覆盖在经过阴影处理的曲面图上,通过结合使用Shade_Surf命令和Surace命令可轻松的做到。例如: IDL>Shade_Surf, z IDL>Surface, z, /NoErase ?4-3 绘制等值线图 ???????????????????????????????????????????????????????????????????????????? 50分钟 ? 创建等值线图 第 29 页 在IDL中,任意二维数组都可以用一个Contour命令显示为等值线图。首先生成一组二维模拟数据: IDL>z=randomu(526L, 81, 81) IDL>for i=0,3 do z=smooth(z, 15, /edge) IDL>z=(z-min(z)) * 1500.0 + 100.0 这个数据集通过一个简单的命令即可显示为等值线图。 IDL>Contour, z, CharSize=1.5 如果仅用单个二维数组作为参数调用Contour命令,IDL把该数组作为其元素个数的函数来绘图。如前述所用Surface命令一样,可以指定X轴和Y轴的数值,以便使其具有实际意义。例如,可以象前述一样使用经度和纬度矢量。 IDL>lat=FIndGen(81)*(24.0/80)+24 IDL>lon=FindGen(81)*(50.0/80)-122 IDL>Contour, z, lon, lat, XTitle='Longitude', YTitle='Latitude' 注意,轴被自动缩放了。从很多地方可以看到这一点。首先,等值线没有延伸到等值线图的边缘,其次,可以发现轴上的标记与lon矢量和lat矢量的最小值和最大值不同。 IDL>Print, Min(lon), Max(lon) IDL>Print, Min(lat), Max(lat) 为了防止轴的自动缩放,可以设置XStyle和YStyle关键字,如下: IDL>Contour, z, lon, lat, XTitle='Longitude', $ YTitle='Latitude', XStyle=1, YStyle=1 在早期的IDL版本中,Contour命令使用单元画法来计算并绘出数据的等值线。在这种方法中,等值线图是从图底画到图顶。这种方法是有效的,但是它不允许选项,比如标注等高线。 单元跟踪法被用来完整地画出围绕等值线图的每一条等值线。这种算法需要的时间较长,但可以允许对等值线作更多的控制。例如,等值线可以断开用于等值线的标注。 单元跟踪法可以用Follow关键字来调用: IDL>Contour, z, lon, lat, XStyle=1, YStyle=1, /Follow 从IDL5版本开始,Contour命令一般都使用单元跟踪法来绘制等值线图。所以,Follow关键字已经过时了。但该关键字仍然被使用,是因 第 30 页 为它在自动标注其他每条等值线时的作用。 ? 选择等值线数目 缺省情况下,IDL选择6条匀称的等值线间隔(即有5条等值线)绘制等值线图。但是,可以用几种不同的方法改变缺省值。例如,可以用Nlevels关键字告诉IDL需要绘制多少条等值线。IDL将计算出等间隔的等值线间隔数。例如,要绘制具有12条等间隔的等值线图: IDL>Contour, z, lon, lat, Xstyle=1, Ystyle=1, /Follow, Nlevels=12 尽管IDL文档称IDL采用给定的等间隔的等值线间隔数,但事实上不是这样。NLevels关键字的值在IDL中只能作为等值线选择算法中的一个“建议”。 可以自己计算等值线数目,精确规定哪条等值线应该画,并用Levels关键字传给Contour命令。 IDL>vals=[100, 110, 120, 130, 140, 150, 160, 170, 175, 180, 190, 200, 210] IDL>Contour, z, lon, lat, XStyle=1, YStyle=1, /Follow, Levels=vals 要选择12个间距相等的等值线间隔,可编写如下代码: IDL>nlevels=12 IDL>step=(Max(z)-Min(z))/nlevels IDL>vals=Indgen(nlevels)*step+Min(z) IDL>Contour, z, lon, lat, XStyle=1, YStyle=1, /Follow, Levels=vals 可以用C_Labels关键字精确的指定哪一根等值线应该标注。这个关键字是一个其元素与等值线数目相等的矢量。如果某元素的值是1,相应的等值线就给予标注;如果某元素的值是0,相应的等值线就不予标注。如果某条等值线没有元素值与之对应时,那么这条等值线就不标注。例如: IDL>Contour, z, lon, lat, XStyle=1, YStyle=1, /Follow, Levels=vals, $ C_Labels=[1, 1, 1, 0, 0, 1, 1, 0, 0] 要标注所有的等值线,可以使用Replicate命令来将1复制所需要的次数。 IDL>Contour, z, lon, lat, XStyle=1, YStyle=1, /Follow, Levels=vals, $ C_Labels=Replicate(1, nlevels) 第 31 页 或者 IDL>lbls=BytArr(nLevels)+1 IDL>Contour, z, lon, lat, XStyle=1, YStyle=1, /Follow, Levels=vals, $ C_Labels=lbls ? 修改等值线图 等值线图可用与Plot命令和Surface命令中相同的关键字进行修改。但是仍然还有许多仅适用于Contour命令的关键字。它们中的大部分经常用于修改等值线本身。例如,用坐标轴标题注释等值线图: IDL>contour, z, lon, lat, Xstyle=1, Ystyle=1, /Follow, Xtitle='Longitude', $ Ytitle='Latitude', Charsize=1.5, Title='Contour', Nlevels=10 也可以用C_Annotation关键字在等值线上标注释。可以用字符串标记每一条等值线: IDL>contour, z, Xstyle=1, Ystyle=1, /Follow, Xtitle='Longitude', $ Ytitle='Latitude', Charsize=1.5, Title='Contour', $ C_annotation=['Low', 'Middle', 'High'], Levels=[125, 165, 198] ? 改变等值线图的外观 使用C_LineStyle可以改变等值线的线型,例如: IDL>Contour, z, lon, lat, Xstyle=1, Ystyle=1, /Follow, C_LineStyle=2 如果需要隔二条等值线有一条虚线,可以用C_LineStyle 关键字指定一个线型索引矢量,假如等值线数比索引号多,那么这些索引号将被循环使用或被重复使用。 IDL>contour, z, lon, lat, XStyle=1, Ystyle=1, /Follow, Nlevels=9, $ C_LineStyle=[0, 0, 2] 使用C_Thick关键字可以改变等值线的宽度。例如,要使等值线具有双倍的宽度: IDL>Contour, z, lon, lat, Xstyle=1, Ystyle=1, Nlevels=12, C_Thick=2, /Follow 通过指定一个线宽矢量,可以间隔修改等值线的宽度: IDL>Contour, z, lon, lat, Xstyle=1, Ystyle=1, Nlevels=12, C_Thick=[1, 2], $ /Follow 使用Downhill关键字可以很容易地看到等值线图的下坡方向。 第 32 页 IDL>Contour, z, lon, lat, Xstyle=1, Ystyle=1, Nlevels=12, /Follow, /Downhill ? 给等值线图赋色 使用Color和Background关键字可以为等值线图设置颜色。 IDL>Device, Decompose=0 IDL>TvLCT, [70, 255], [70, 255], [70, 0], 1 IDL>Contour, z, lon, lat, XStyle=1, YStyle=1, NLevels=10, Color=2, $ Background=1, /Follow 也可以用C_Color关键字给等值线本身单独添上颜色。如果需要将上图的等值线变为绿色 ,键入: IDL>TvLCT, 0, 255, 0, 3 IDL>Contour, z, lon, lat, Xstyle=1, Ystyle=1, /Follow, Nlevels=10, Color=2, $ Background=1, C_Colors=3 可以用C_Color关键字表示等值线颜色为彩色表索引号的矢量,并以循环的方式绘制等值线。 IDL>Tek_Color IDL>TvLCT, [70, 255], [70, 255], [70, 0], 1 IDL>Contour, z, lon, lat, XStyle=1, YStyle=1, Nlevels=10, Color=2, $ Background=1, C_Colors=IndGen(10)+2, /Follow 可以很容易地用C_Colors关键字使每间隔二条等值线有一条蓝色的等值线,其余的等值线为绿色。键入: IDL>Contour, z, lon, lat, Xstyle=1, Ystyle=1, NLevels=12, Color=2, $ Background=1, C_Colors=[3, 3, 4], /Follow ? 创建填充的等值线图 使用关键字Fill可以填充等值线图。色彩索引号由关键字C_Colors给出。 IDL>LoadCT, 0 IDL>LoadCT, 4, NColors=12, Bottom=1 IDL>Contour, z, lon, lat, Xstyle=1, Ystyle=1, /Fill, NLevels=12, $ /Follow, C_Colors=Indgen(12)+1 用这种方法填充颜色在等值线图上有一个以背景颜色填充的”洞”。将背景色与图形颜色交换一下可以看得更清楚一些。 第 33 页 IDL>Contour, z, lon, lat, Xstyle=1, Ystyle=1, /Fill, NLevels=12, /Follow, $ C_Colors=Indgen(12)+1, Background=!P.Color, Color=!P.Background “洞”产生的原因是由于IDL用第一种颜色填充了第一和第二条等 值线间的空间。 解决的办法是指定等值线的数目和颜色矢量,并用关键字Levels传 送给Contour命令。 IDL>nLevels=12 IDL>step=(Max(z)-Min(z))/nLevels IDL>lvls=IndGen(12)*step+Min(z) 现在,就得到了正确的等值线填充颜色。 IDL>Contour, z, lon, lat, Xstyle=1, Ystyle=1, /Fill, Levels=lvls, /Follow, $ C_Colors=Indgen(12)+1, Background=!P.Color, Color=!P.Background 有时候,需要填充有丢失数据的等值线图或者是等值线超出了图形 边界的等值线图,这种情况称为“开放的等值线”。 先故意破坏二维数组: IDL> z[40:50, *]=!VALUES.F_NAN 等值线绘制如下: IDL> Contour, z, lon, lat, Xstyle=1, Ystyle=1, NLevels=12, /Follow, $ C_Colors=Indgen(12)+1 使用/Fill关键字绘制开放的等值线会产生错误的结果。 IDL> Contour, z, lon, lat, Xstyle=1, Ystyle=1, /FILL, NLevels=12, /Follow, $ C_Colors=Indgen(12)+1 解决的办法:使用关键字Cell_Fill IDL>Contour, z, lon, lat, Xstyle=1, Ystyle=1, Levels=lvls, $ C_Colors=Indgen(12)+1, /Cell_Fill 使用关键字Cell_Fill强制IDL使用单元填充算法绘制等值线,这种 算法没有Fill关键字使用的算法效率高。 单元填充算法有时会破坏等值线图的坐标轴。可以通过不带数据的 等值线图的重新绘制来修复。 IDL>Contour, z, lon, lat, Xstyle=1, Ystyle=1, Levels=lvls, /NoData, /NoErase, $ /Follow 用Overplot关键字可以在已填充好颜色的等值线图上绘制等值线。 IDL>Contour, z, lon, lat, Xstyle=1, Ystyle=1, Levels=lvls, /Cell_Fill, $ 第 34 页 C_Colors=IndGen(12)+1 IDL>Contour, z, lon, lat, Xstyle=1, Ystyle=1, /Follow, Levels=lvls, /overplot 注意,不要混淆Overplot和NoErase关键字。它们是相似的,但确切地说是不一样的。在等值线图上,Overplot关键字仅仅绘出等值线,而不绘出等值线图的坐标轴。 NoErase关键字则是绘出完整的等值线图,而不删除在屏幕上已显示的内容。 回顾与小结: 本章介绍了网格曲面、渲染曲面和等值线的绘制方法。通过本章的学习,使学生能够将气象数据以各种直观的形式绘制出来。 作业与思考题: 思考:如何以最直观的形式在等气压面上迭加等温信息, 参考资料: 1、《IDL可视化工具入门与提高》闫殿武,机械工业出版社 2、 应急预案: 1、如果遇到停电或者计算机故障等意外情况导致不能正常播放幻灯片,可以通过增加板书的方法解决问题,由于板书比较耗时,可以适当减少举例的数量。 2、这是第一节课,应将课件用不同的介质存放,避免课件不能使用的情况发生。 本次课教学体会: 第 35 页 《气象可视化软件》课程教案 讲课题目: 第06讲 IDL二维数据可视化 目的要求: 掌握输出图形的定位方法和图形的输出修饰。 重点难点: 一个窗口显示多幅图形 文本的信息的图形化显示 方法步骤: 基本原理概念部分以对照PPT课件讲授为主~涉及IDL具体操作的部分~ 通过打开IDL软件~现场操作为主。 器材保障: 电脑、投影仪 教学内容与时间安排(2学时) ?5-1 输出图形的定位 ???????????????????????????????????????????????????????????????????????? 50分钟 概述 为了后面的操作方便,先生成一些绘图数据。 一维数据的生成: IDL> x = 2*!pi*FIndGen(91)/91.0 IDL> y = sin(0.63*x)-0.71*sin(x)+0.91*sin(2.3*x) 假设X轴的物理含义为时间t: IDL> t = FIndGen(91)*(6.0/91) 二维数据的生成: IDL>z=randomu(529L, 81, 81) IDL>for i=0,3 do z=smooth(z, 15, /edge) IDL>z=(z-min(z)) * (1500.0/(max(z)-min(z))) + 100.0 假设X和Y轴的数值是经纬度坐标,设纬度范围为从24度到48度,经度范围为-122度到-72度: IDL>lon=FIndGen(81)*(24.0/81)+24 IDL>lat=FIndGen(81)*(50.0/81)-122 第 36 页 图形位置是指在显示窗口上被图形坐标轴框起来的部分中的位置。图形位置不包括坐标轴标识、坐标轴标题或其他注释。 图形区域是显示窗口的一部分,包括图形位置,也包括环绕图形位置的空间,用来注明坐标轴标识,坐标轴标题和图标题等。 图形边界定义为在显示窗口内不包括图形位置的区域 图形区域与图形位置类似,但它还包括图形标题和其他注释的区域。 图形边缘正好与图形位置相反。图形边缘由字符的单位确定,而图形位置和图形区域是由归一化的坐标单位确定。 图形位置可以用!P.Position系统变量设置,或者用Position关键字对Plot, Surface, Contour或其他IDL图形命令进行设置。图形区域可以用!P.Region系统变量设置,或者通过!X, !Y和!Z系统变量的Region字段来设置单个坐标轴的区域。图形边界可以用[XYZ]Margin关键字来对Plot, Surface, Contour或IDL的其他图形命令进行设置,或者通过!X, !Y和!Z系统变量的Margin字段来设置。 在缺省值情况下,IDL是在将图形输出到显示窗口的时候设置图形边界的。有时,使用图形定位来定位图形显示会更好,尤其是当您在一个显示窗口中显示多个命令的输出结果时。 ? 设置图形边缘 图形边缘可以用图形命令中的[XYZ]Margin关键字设置,或者通过!X,!Y和 !Z系统变量的Margin字段来设置,单位根据字符尺寸来确定。 X方向的边缘是用两元素矢量来设置的,这两个元素分别规定左右的偏移量。Y方向的边缘用同样的方法确定底部和顶部的偏移量。缺省边缘值是X轴方向为10和3,Y轴方向为4和2。 查看当前图形边缘设置: IDL> Print, !X.Margin, !Y.Margin, !Z.Margin 查看当前字符尺寸的设备坐标值或像素坐标值: 第 37 页 IDL> Print, !D.X_Ch_Size, !D.Y_Ch_Size 缺省的字符尺寸在X方向上为7个像素,在Y方向上为13个像素。因此,一张等值线图的边缘就被确定为图形的左边为70个像素,右边为21个像素。如果CharSize关键字在 Contour命令中设置为2,那么将会出现图形的左边边缘为140个像素,而图形的右边边缘为42个像素。 例如,将图形四周边缘都改变为3个缺省的字符宽度: IDL> Plot, t, z, Xmargin=[3, 3], Ymargin=[3, 3] 如果同时改变字符尺寸,图形将出现非常大的差异。因为图形边界是由字符的尺寸确定的。 IDL> !X. Margin = [3, 3] IDL> !Y. Margin = [3, 3] IDL> Contour, z, CharSize=2.5 IDL> Contour, z, CharSize=1.5 假如改变字符尺寸就会发现,字符尺寸越大,字符将变得很大并且图形部分将变得很小。 将图形边界已恢复为缺省值: IDL> !X.Margin = [10, 3] IDL> !Y.Margin = [4, 2] ? 设置图形位置 设置图形位置需要设置一个四个元素的矢量,该矢量依次给定图形在显示窗口中的左下角和右上角坐标[X0,Y0,X1,Y1]。这些坐标值通常为归一化的值,其范围在0至1之间(0代表显示窗口的左下角,1常常代表显示窗口的右上角。)设想如果需要将图形输出结果在显示窗口的上半部分显示,可以按如下设置!P.Position系统变量并显示图形: IDL> !P.Position = [0.1, 0.5, 0.9, 0.9] IDL> Plot, t, y 将!P.Position系统变量复位——以便后面的图形输出能正常地显示在窗口中: IDL> !P.position = 0 第 38 页 假如仅想给一张图形窗口定位,可以用图形命令的Position关键字规定一个图形位置。例如在整个显示窗口的左半部分显示等值线图: IDL> Contour, z, Position=[0.1, 0.1, 0.5, 0.9] Position关键字可以用来在同一显示窗口输入多幅图形。在输入第二幅图形和所有的后续图形时应使用NoErase关键字以防止在显示图形时删除前面已显示的图形。 例如:在一张等值线图上加入一条线画图: IDL> Plot, t, y, Position=[0.1, 0.55, 0.95, 0.95] IDL> Contour, z, Position=[0.1, 0.1, 0.95, 0.45], /NoErase ? 设置图形区域 图形区域也是由归一化坐标值确定的,可以通过设置!P.Region系统变量指定。如果希望后续图形能正常显示在整个窗口,必须复位系统变量。 例如,在显示窗口上方三分之二的部分区域中显示一幅图形: IDL> !P.Region = [0.1, 0.33, 0.9, 0.9] IDL> Plot, t, y 复位系统变量!P.Region: IDL> !P.Region = 0 ? 创建多个图形 通过使用图形位置和图形区域系统变量以及相关关键字可以在一个显示窗口中显示并定位多个图形(绘制后续的图形时应使用NoErase关键字)。系统变量!P.Multi可以使在显示窗口内创建多个图形更加容易。 !P.Multi由一个五个元素进行矢量定义。 第 39 页 剩下的要在显示窗口上绘制的图形数目。通常设置为0,意思!P.Multi[0] 是,没有剩下要在显示窗口输出的图形。接下来的图形命令将 删除显示的图形,并且开始绘制新的多个图形中的第一个。 显示窗口上图形的列数。 !P.Multi[1] 显示窗口上图形的行数。 !P.Multi[2] 在Z方向上叠加的图形数目(仅适用已经建立了三维坐标系的!P.Multi[3] 情况下)。 !P.Multi[4]=0:先按行显示图形; !P.Multi[4] !P.Multi[4]=1:先按列显示图形。 例如将!P.Multi参数设置为按两行两列在显示窗口内显示四幅图形, 且先按列显示图形: IDL> !P.Multi = [0, 2, 2, 0, 1] 如果要求每个图形占据窗口的四分之一位置: IDL> window, Xsize=800, Ysize=600 IDL> Plot, t, y, LineStyle=0 IDL> Contour, z, lon, lat, Xstyle=1, Ystyle=1, Nlevels=10 IDL> Surface, z, lon, lat IDL> shade_Surf, z, lon, lat 可以通过使用!X、!Y和!Z系统变量的“外边缘”字段为多幅图形 留出空间,用于显示图形标题或者其他类型的注释。外边缘字段仅仅在 P.Multi系统变量被使用时有效。它们与正常的图形边缘一样,也是按字 符单位来计算的。 例如为刚刚创建好的四个图形的总图加上一个标题: IDL> !P.Multi = [0, 2, 2, 0, 1] IDL> !Y.Omargin = [2, 4] IDL> Plot, t, y, LineStyle=0 IDL> Contour, z, lon, lat, Xstyle=1, Ystyle=1, Nlevels=10 IDL> Surface, z, lon, lat IDL> Shade_Surf, z, lon, lat IDL> XYOuts, 0.5, 0.9, /Normal, 'Four Graphics Plots', Alignment=0.5,$ Charsize=2.5 将!P.Multi复位,以便在一页上显示单个图形。象许多系统变量一 第 40 页 样, !P.Multi可以通过设置!P.Multi=0重新设置为它的缺省值。 IDL> !P.Multi = 0 ?5-2 输出图形的修饰 ???????????????????????????????????????????????????????????????????????? 50分钟 IDL字体概述 图形窗口中可以通过多种方式添加图形注释和其他文本。最常用的方法是通过图形显示命令的关键字。 文本字体可以分三种:矢量字体、TrueType字体、硬字体。字体类型通过设置!P.Font系统变量或者在图形输出命令中设置 Font关键字来加以选择。矢量字体由矢量坐标描述,独立于平台并且极易在三维空间旋转,是直接图形命令的缺省字体。对于高质量的硬拷贝输出来说,矢量字体太“瘦”了。为此,需要更丰满的字体。 通过设置!P.Font系统参数为-1或者在输出命令上设置Font关键字为-1,就选择了矢量字体。如: IDL> Plot, t, y, Font=-1, Xtitle='Time', Ytitle='Signal', Title='Experiment 35F3a' TrueType字体也称为轮廓字体,这种字体是由一系列的外形轮廓描述的,这些轮廓通过创建一系列的多边形来填充。IDL有四种TrueType字体家族系列:Times, Helvetica, Courier, 和Symbol。 TrueType字体渲染需要花更长的时间,因为这种字体首先必须刻绘出来,然后创建相应的填充多边形,最后填充。TrueType字体是IDL对象图形系统的一种缺省字体,具有可以旋转的优点,并且在硬拷贝输出上较美观。但在低分辨率显示器上用小磅值时显示效果不好。 用缺省的TrueType字体的外形来绘制图形,须设置Font关键字为1。如: IDL> Plot, t, y, Font=1, Xtitle='Time', Ytitle='Signal', Title='Experiment 35F3a' TrueType字体可以用Device命令通过Set_Font和TT_Font关键字来选择。 IDL> Device, Set_Font='Courier', /TT_Font IDL> Plot, t, y, Font=1, Xtitle='Time', Ytitle='Signal', Title='Experiment 35F3a' 硬字体通过设置!P.Font系统变量或 Font关键字为0来加以选择。 第 41 页 通常硬字体并不用于图形显示中,而是在当内容被输出到硬拷贝输出设备(如 PostScript打印机)时使用。硬字体不能很好地在三维空间内旋转。因此,在使用类似于Surface等三维命令时,一般都不使用硬字体。 IDL> Plot, t, y, Font=0, Xtitle='Time', Xtitle='Signal', Title='Experiment 35F3a' ? 列出可用字体的名称 可以用以下Device命令列出可用的硬字体名: Device, Font='*', Get_FontNames=fontNames For j=0, N_Elements(fontNames)-1 DO Print, fontNames[j] 使用TT_Font关键字,TureType字体名称可用类似的方法列出。 Device, FONT='*', Get_FontNames=fontnames, /TT_Font For j=0, N_Elements(fontnames)-1 DO Print, fontnames[j] 可用的矢量字体名称 数值 描述 数值 描述 !3 Simplex Roman !12 Simplex Script !4 Simplex Greek !13 Complex Script !5 Duplex Roman !14 Gothic Italian !6 Complex Roman !15 Gothic German !7 Complex Greek !16 Cyrillic !8 Complex Italian !17 Triplex Roman !9 Math Font !18 Triplex Italian !10 Special Characters !20 Miscellaneous 回到刚进入时的字体 !11 Gothic English !X ? 用XYOutS命令添加文本 命令XYOutS用来在窗口的特定位置(xy处)输出一个文本字符串。XYOutS 的第一个位置参数是X的位置,第二个位置参数是Y的位置。例如,给线画图加上一个较大的标题: IDL> Plot, t, y, Position=[0.15, 0.15, 0.95, 0.85] IDL> XYOutS, 0.8, 2.2, 'Results: Expe riment 35F3a', Size=2.0 在缺省的情况下,XYOutS过程使用数据坐标系统。但是,如果选用适当的关键字,设备坐标系统和归一化的坐标系统也可使用。 第 42 页 三种坐标系统: , 数据坐标系统由数据自身的大小所描述(/DATA)。 , 设备坐标有时称为像素坐标,设备坐标系统经常和图像一起使 用(/Device)。 , 归一化的坐标系统在每个方向从0到1。当需要用独立于设备 输出图形时,经常使用归一化坐标(/Normal)。 使用归一化坐标把标题加在线画图上: IDL> Plot, t, y, Position=[0.15, 0.15, 0.95, 0.85] IDL> XYOutS, 0.2, 0.92, 'Results: Experiment 35F3a', Size=2.0, /Normal ? 用XYOut加注矢量字体 XYOutS命令可使用矢量字体、TureType字体或硬字体,只需设置Font关键字值即可。在直接图形命令中,矢量字体系统使用最频繁,可以通过索引号来选择的特定字体。例如,可以用Triplex Roman字体输出上图的标题: IDL> Plot, t, y, Position=[0.15, 0.15, 0.95, 0.85] IDL> XYOutS, 0.2, 0.92, '!17Results: Experiment 35F3a!X', Size=2.0, /Normal 标题串末端的!X将使字体恢复为原来的字体。否则,缺省设置将变为Triplex Roman,并且所有接下来的串标记都将使用Triplex Roman字体。使用 Greek字符集作为X轴的标题,并且按下面输出下图的标题: IDL> Plot, t, y, Xtitle='!7w', Position=[0.15, 0.15, 0.95, 0.85] IDL> XYOutS, 0.2, 0.92, 'Experiment 35F3a', size=2.0, /Normal 可以看出:即使没有规定该图的标题字符集,标题也是用Greek字符集输出的。恢复为缺省项Simplex Roman的惟一办法是用显式地使用 Simplex Roman字体输出另一个字符串,例如: IDL> XYOutS, 0.5, 0.5, '!3Junk', /Normal, CharSize=-1 关键字CharSize值为-1时,字符串被隐藏,不在窗口显示。 ? 排列文本 可以用XYOutS命令的Alignment关键字设置文本对齐方式。 第 43 页 , 当Alignment的值为0时,字符串居左排列(这是缺省值); , 当Alignment的值为1时,字符串居右排列; , 当Alignment的值为0.5时,居中排列。 IDL> Window, Xsize=300, Ysize=250 IDL> XYOutS, 150, 55, 'Research', Alignment=0.0, /Device, CharSIZE=2.0 IDL> XYOutS, 150, 110, 'Research', Alignment=.5, /Device, CharSIZE=2.0 IDL> XYOutS, 150, 170, 'Research', Alignment=1.0, /Device, CharSize=2.0 IDL> Plots, [0.5,0.5], [1.0,0.0], /Normal ? 删除文本 用XYOutS书写的文本有时可以通过用背景色书写同样的文本来删除。Color关键字与!P.Background系统变量一起使用可以达到这个目的。 IDL> window, Xsize=300, Ysize=250 IDL> XYOutS, 150, 110, 'Research', Alignment=0.50, /Device, CharSize=2.0 IDL> XYOutS, 150, 110, 'Research', Alignment=0.50, /Device, CharSize=2.0, Color=!P.Background ? 改变文本的方向 用XYOutS命令输出的文本可以通过Orientation关键字相对于水平方向上的角度来定向。Orientation关键字可确定文本基线从水平基线开始旋转的度数。 IDL> Window, Xsize=300, Ysize=250 IDL> XYOutS, 150, 110, 'Research', Alignment=0.5, /Device, CharSize=2.0, Orientation=45 IDL> XYOutS, 150, 180, 'Research', Alignment=0.5, /Device, CharSize=2.0, Orientation=-45 ? 给图形显示添加线和符号 给图形添加注释的另一个有效程序是PlotS命令,它可以用来在图形显示上添加符号或线条。PlotS命令可在二维或三维空间中使用。用PlotS程序画线,只需简单地提供含有X和Y坐标的矢量即可,矢量中的X、Y值是需要连接的点的X、Y坐标值: 第 44 页 IDL> Window, XSize=500, YSize=400 IDL> Plot, t, y IDL> PlotS, [0, 6], [1.5, 1.5], LineStyle=2 PlotS程序可以用来在任何位置标上符号。下面是在曲线上每五个点处标注一个菱形符号的实例。 IDL> Device, Decompose=0 IDL> TvLCT, [70, 255, 0], [70, 255, 250], [70, 0, 0], 1 IDL> Plot, t, y, Background=1, Color=2 IDL> index = IndGen(20)*5 IDL> Plots, t[index], y[index], Psym=4, Color=3, SymSize=2 PlotS命令也可以用来在图上重要信息的周围画出一个方框。通过PlotS命令与其他图形命令组合,如XYOutS命令,可以有效地注释图形显示。使用XYOutS和PlotS命令还可以为图形显示创建图例。例: IDL> device, Decomposed=0 IDL> TvLCT, [70, 255,0], [70,255,255], [70, 0, 0],1 IDL> Plot, t, y, Background=1, Color=2 IDL> box_x_coords = [0.4, 0.4, 0.6, 0.6, 0.4] IDL> box_y_coords = [0.4, 0.6, 0.6, 0.4, 0.4] IDL> PlotS, box_x_coords, box_y_coords, Color=3, /Normal IDL> XYOutS, 0.5, 0.3, 'Critical Zone', Color=3, Size=2, Alignment=0.5,$ /Normal ? 图形显示添加色彩 PolyFill命令是一个低级的图形显示命令,它可用特殊的颜色或图案填充任意形状的多边形(无论是在二维或还是在三维环境中)。例如: IDL> TvLCT, 255, 0, 0 ,4 IDL> Erase, Color=1 IDL> PolyFill, box_x_coords, box_y_coords, Color=4, /Normal IDL> Plot, t, y, Background=1, Color=2, /NoErase IDL> PlotS, Box_x_coords, box_y_coords, Color=3, /Normal IDL> XYOutS, 0.5, 0.3, 'Critical Zone', Color=3, Size=2, Alignment = 0.5, $ / Normal 颜色有时代表一个数据集的另外一维的特性。例如,可以用二维圆形显示XY数据,而设置圆的颜色就可表现出数据的某些附加特性,比 第 45 页 如温度和人口密度等。IDL没有构建圆的函数,下面的代码来创建Circle功能。 FUNCTION CIRCLE, xcenter, ycenter, radius Points = (2 * !PI / 99.0) * FindGen(100) x = xcenter + radius * Cos(points) y = ycenter + radius * Sin(points) RETURN,[Transpose(x), Transpose(y)] END 组成圆周的X和Y值将以2*100数组形式返回。可以将该数组输入到PolyFill命令中。以Circle.pro保存该程序,并通过键入如下命令进行编译: IDL> .Compile circle 然后,创建随机分布的X和Y数据: IDL> seed = -3L IDL> x = RandomU(seed, 30) IDL> y = RandomU(seed, 30) 将Z值设为这些X值和Y值的函数。键入: IDL> z = (3 * ( (x-0.5)^2) + 5*((y-0.25)^2)) * 1000 打开窗口绘制XY位置,就可以看到这些数据是怎样以随机形式分布的。键入: IDL> Window, Xsize=400, Ysize=350 IDL> Plot, x, y, Psym=4, Position=[0.15, 0.15, 0.75, 0.95], Xtitle='X Locations',$ Ytitle='Y Locations' 将以不同颜色的圆显示与XY位置相关的Z数据。需要加入一张颜色表,并且使Z数据缩放至可获得的颜色数的范围内: IDL> LoadCT, 2 IDL> zcolors = Bytscl(z, Top=!D.Table_Size-1) 在这个例子里使用的Circle程序有许多弱点。主要缺点是它并非总是生成圆。假如用数据坐标系统来给定圆的坐标,圆形可能将以椭圆的形式显示,主要取决于图形长宽比例以及其他影响因素。为避免Circle程序中的这种不足,可用Convert_Coord命令将数据坐标转换为设备坐标: IDL> coords = Convert_Coord (X, Y, /Data, /To_Device) 第 46 页 IDL> x = coords(0, *) IDL> y = coords(1, *) 最后使用PolyFill命令画出表示Z数据的彩色圆: For j=0, 29 Do Polyfill, Circle(x(j), y(j), 10),Circle(x(j), y(j), 10), /Fill,$ Color=zcolors(j), /Device x = RandomU(-3L, 30) y = RandomU(-3L, 30) z = (3 * ( (x-0.5)^2) + 5*((y-0.25)^2)) * 1000 Window, XSize=400, YSize=350 Plot, x, y, Psym=4, Position=[0.15, 0.15, 0.75, 0.95], Xtitle='X Locations',$ Ytitle='Y Locations' LoadCT, 2 zcolors = Bytscl(z, Top=!D.Table_Size-1) coords = Convert_Coord (X, Y, /Data, /To_Device) x = coords(0, *) y = coords(1, *) For j=0, 29 Do PolyFill, Circle(x(j), y(j), 10), /Fill, Color=zcolors(j), /Device ????????????????????????????????????????????????????????????????????????????? 100分钟 回顾与小结: 本章介绍了控制IDL图形窗口中图形输出位置的方法和修饰图形窗口输出效果的方 法。通过本章的学习,使学生掌握根据实际输出需求绘制图形的方法。 第 47 页 作业与思考题: 作业:检查计算机中安装有哪些字体,如何使用它们,如何安装新字体, 参考资料: 1、《IDL可视化分析与应用》韩培友,西北工业大学出版社 2、《IDL可视化工具入门与提高》闫殿武,机械工业出版社 应急预案: 1、如果遇到停电或者计算机故障等意外情况导致不能正常播放幻灯片,可以通过增加板书的方法解决问题,由于板书比较耗时,可以适当减少举例的数量。 2、这是第一节课,应将课件用不同的介质存放,避免课件不能使用的情况发生。 本次课教学体会: 第 48 页 《气象可视化软件》课程教案 讲课题目: 第08讲 图形用户界面GUI 目的要求: 了解图像文件的格式~掌握读取各种图像文件的方法和图像处理方法。 重点难点: 无格式文件的读取 图像处理方法 方法步骤: 基本原理概念部分以对照PPT课件讲授为主~涉及IDL具体操作的部分~ 通过打开IDL软件~现场操作为主。 器材保障: 电脑、投影仪 教学内容与时间安排(2学时) ?6.1 图像读取与显示 ???????????????????????????????????????????????????????????????????????? 50分钟 ? 读取图像数据 无格式图像的读取: 指定图像文件路径(下面三种格式均可) file='D:\RSI62\IDL62\examples\data\people.dat' file=FilePath('people.dat', SUBDIR=['examples\data']) file=FilePath('people.dat', SUBDIR=['examples', 'data']) 用Read_binary命令读取图像 Img=read_binary(file, DATA_DIMS=[192,192]) Read_binary的主要关键字 , DATA_DIMS:指定图像的空间大小(最多8维) , DATA_START:起始位置 读取多幅图像中的某一幅图像 Img=read_binary(file, DATA_DIMS=[192,192,2]) Img=img[*,*,1] 或者 第 49 页 img=read_binary(file, DATA_START=192*192L, DATA_DIMS=[192,192]) 或者 Img=read_binary(file, DATA_DIMS=[192, 384]) Img=img[*, 192:*] 用readu读取图像 openr, lun, file, /get_lun Img,bytarr(192, 192) readu, lun, Img Close, lun free_lun, lun 有格式图像的读取: 使用Dialog_Read_Image函数 Success=Dialog_Read_Image(FILTER='jpg', IMAGE=Img, PATH=!dir) 使用read_jpeg命令 filters = ['*.jpg', '*.tif', '*.png'] file = DIALOG_PICKFILE(/READ, FILTER = filters, PATH=!dir) read_jpeg, file, img 其他格式图像文件 READ_IMAGE:常用的各种图像; READ_BMP:BMP图像 READ_DICOM:医学图像 READ_GIF: READ_PICT: READ_PNG: READ_TIFF: „„ ? 显示图像 可用TV和TVScl两个IDL命令中的任一个来显示图像。这两个命令几乎在各个方面都是一样的,包括能与之一起使用的关键字。仅仅在一个方面不同:TVScl将图像数据调整为与IDL运行时所用颜色数目相适应的字节型数值。 第 50 页 打开一个显示窗口,装上灰度颜色表,用TV命令显示图像: Device, Decompose=0 Window, 0, XSize=192, YSize=192 LoadCT,0 TV, Img 另一方面,TV命令取图像数据本身的值,仅仅将其作为字节型数值直接传送到显示设备上。如果图像数据以整型或更多位数表示,则图像数据将被截断以符合字节型数值。如果图像数据不被调整到0,255之间,图像将很可能显示不正确。 TV和TVScl命令在显示图像之前不删除窗口中已显示的内容。一般情况下这个问题影响不大,但有时候也会产生一些麻烦。如果想要一个空白的显示窗口来显示图像数据,无论当前窗口上的显示内容是什么,都可用一个简单的命令Erase来删除。 Erase 如果在一个8位显示设备上工作,可能没有全部使用在显示器上可用的256种颜色。如果需要了解正在使用多少种颜色,可键入: IDL>Print,~D.Table_Size 使用的是TV命令,所以数据没有经过拉伸就被送到显示器中显示。尽管看不出来,但图像上所有大于IDL运行时的颜色数目的像素值都被设为同样的值。也就是说,比~D.Table_Size-1值大的像素被以相同的颜色显示。 如果用TVScl命令显示图像,可以看出一些差别。打开另一个窗口并将其移到第一个窗口的旁边。用TVScl命令显示图像: IDL>window, 1, XSize=192,YSize=192 IDL>TVScl, Img ? 调整图像数据域值 图像灰度映射 TVScl命令可以将图像的灰度值调整到色表颜色数范围之内,但是给不同图像的比较带来了麻烦。 颜色数不同带来的问题 第 51 页 解决方法: 用BytScl命令调整数据,并用TV命令显示。 通过BytScl命令的关键字Top、Min和Max实现灰度映射。 sImg=BytScl(Img, Min=15, Max=245, Top=99) 用颜色表分段表示图像 如果想用两个看上去不同的颜色表来显示同一幅图像。在用IDL打开一个图形窗口后,能通过测试系统变量~D.Table_Size的值知道在IDL运行时颜色表中有多少种颜色。如果将这个数目一分为二,就知道每个图像该用多少种颜色: half=!D.Table_Size/2 为了在同一窗口用看上去不同的两个颜色表显示图像数据Img,必须将图像数据调整为适应两个颜色空间范围的值。 首先,用BytScl命令调整图像数据为适应第一个部分颜色表的值,生成一个新的图像img1: img1=BytScl(Img,Top=half-1) 将图像数据调整为适应第二个部分颜色表的值,生成第二个图像img2: img2=BytScl(Imge,TOP=half-1)+Byte(half) 将两个已调整的图像肩并肩地放在同一个窗口。注意,在使用TV命令。明白这是为什么吗? Window,XSize=192*2,YSize=192 TV, img1 TV, img2,192,0 可以用不同的颜色表显示左右两幅图像。 用一个灰度颜色表将左边的图像显示出来。 LoadCT, 0, NColors=half, Bottom=0 用XLoadCT命令交互式地为右边的图像选择想要的任何颜色表,将颜色装入颜色表的第二部分。 XLoadCT,NColors=half,Bottom=half TV,img1 TV,img2,192,0 第 52 页 在24位显示器上用不同的颜色表显示图像 在16位或24位显示器上运行时,使用不同的颜色表和装入颜色并显示图像非常简单。 Window,1,Title='Gray Scale Image', XSize=192, YSize=192 LoadCT,0 TV,img Window,2,Title='Color Image', XSize=192, YSize=192 LoadCT,5 TV,img ? 显示24位图像 真彩色(或24位)图像也能用TV命令显示。 24位图像总是由一个3维数据集构成,它的3个维数中的一个值设为3。 , 如果图像是一个m*n*3的数组,则图像是隔波段扫描 (band-interleaved); , 如果图像一个是m*3*n的数组,则图像是隔行扫描 (row-interleaved); , 如果图像是一个3*m*n的数组,则图像是隔像素扫描 (pixel-interleaved)。 装载一幅24位图像 filters=['*.jpg', '*.tif', '*.png'] file=DIALOG_PICKFILE(/READ, FILTER = filters, PATH=!dir) read_jpeg, file, rose 这个数据组是一个按像素扫描的图像。通过键入如下命令可知道这点: Help,rose ROSE BYTE =Array[3,227,149] 要在一个8位显示器上显示一幅24位的图像,仅仅需要用关键字True来说明其用的是哪种扫描方式。 第 53 页 , True=1为隔像素扫描; , True=2为隔行扫描; , True=3为隔波段扫描。 显示图像 LoadCT, 0 Window,XSize=227,YSize=149 TV,rose,True=1 24位图像在8位显示器上显示将表现为灰度级。要在这样的显示器上看到真彩色的图像,需要用命令Color_Quan创建一幅2维图像以及伴随该24位图像数据的红色、绿色、蓝色颜色表,并使用TVLCT装入颜色表,构造伪彩色。 rose8=Color_Quan(rose,1,r,g,b) TVLCT,r,g,b TV,rose8 如果使用的是24位的显示器,为了正确显示一幅24位图像,必须打开颜色分解关键字。 Device, Decomposed=1 TV, rose 在一台24位显示器上,要将8位图像进行彩色显示则必须要用到颜色表。一个8位图像的像素值被作为一个索引号,该索引号为给定的像素查找特定的红色,绿色和蓝色。如果在使用IDL时改变了颜色表,必须重新显示该2维图像来看新的颜色是否生效。必须关上颜色分解关键字,否则将忽视颜色表矢量,并总是用灰度色彩来显示8位图像。 如果用的是一个24位显示器,键入如下命令: file=FilePath('worldelv.dat', SUBDIR=['examples', 'data']) world=read_binary(file, DATA_DIMS=[360, 360]) Window,XSize=360, YSize=360 LoadCT,5 Device,Decomposed=0 TV,world 为了以另一种颜色表显示图像,装入该颜色并重新运行TV命令,使图像像素值遍历整个颜色表矢量。 第 54 页 注意当只运行LoadCT命令时,图像颜色不变。 LoadCT,3 TV,world ? 控制图像显示顺序 通常,当IDL显示一幅图像时,图像的第0列和第0行为图像的左下角。可以通过设置系统变量!Order改变显示顺序。在缺省时,!Order设为0。如果希望将所有图像的左上角都显示在第0列和第0行,可设置!Order=1。 可在使用TV或TVScl命令时,用关键字Order设置。 Window,XSize=192*2,YSize=192 TVScl,img,Order=0 TVScl,img,Order=1,192,0 ? 在显示窗口中定位图像 可通过TV或TVScl命令的附加参数来将图像移动到显示窗口中的其他位置。如果给出第二个参数,它则被视为图像在窗口中的位置。图像位置由显示窗口的尺寸和图像的尺寸计算出来的。位置可从显示器的左上角开始,一直到显示器的右下角。 在384,384的显示窗口内,从显示器的左上角开始,对于192,192的图像来说有四种位置。键入: IDL>Window,XSize=384,YSize=384 IDL>TVScl,image,0 IDL>TVScl,image,1 IDL>TVScl,image,2 IDL>TVScl,image,3 可以显式地指定图像左下角的象素位置来定位一幅图像,可以通过在TV或TVScl命令的图像数据名后给定两个附加参数来实现。例如,将一幅192,192名为image的图像定位于刚刚创建的显示窗口中间。 Erase,Color=!D.Table_Size-1 TVScl, Img, 96, 96 图像的左下角放在像素点(96,96)处。 第 55 页 当希望为附加图留下空间时,如色标或其他的注释,这种定位图像的方法是很重要的。 Window,XSize=320,YSize=320 ncolors=!D.Table_Size TvLCT,255,255,0,ncolors-1 Erase,color=ncolors-1 colorbar=Replicate(1B,20)#BIndGen(256) TV,BytScl(colorbar,Top=ncolors-2),32,36 TV,BytScl(Img,Top=ncolors-2),92,64 ?6.2 改变图像尺寸 ???????????????????????????????????????????????????????????????????????????? 10分钟 改变图像大小 IDL提供了两个改变图像大小的命令: Rebin Congrid Rebin的限制为新建图像的尺寸必须是原始图像尺寸的整数倍或整数比例。例如,变量image可以在X方向或Y方向上变化为192/2和192*3个元素。但不应该是300或500个元素。图像大小也可以在一个方向减小,另一个方向增大。 例如,可将变量img重新变化为384列和96行,键入如下命令。 Window,XSize=384,YSize=96 new=Rebin(img,384,96) TVScl,new 在缺省情况下,当放大一幅图像时Rebin采用双线性插值,当缩小一幅图像时则采用最邻近平均法。 如果关键字Sample被设定后,在两个方向上都可用最邻近采样法。双线性插值更为精确,但需要更多的计算时间。 Window,XSize=192/2,YSize=192/2 new=Rebin(img,96,96,/Sample) TVScl,new Congrid与Rebin很相似,不同之处为: , 第一,在新图像中的列数和行数可以设为任意值。 第 56 页 , 第二,在缺省情况下,用的是最邻近采样法。如果想用双线性 插值,必须设置关键字Interp: Window,XSize=600,YSize=400 new=Congrid(img,600,400,/Interp) TVScl,new ?6.3 从显示器中读取图像 ????????????????????????????????????????????????????????????????? 10分钟 ? 在8位显示器上读取图像数据 可以用TVRD命令将IDL图形窗口的内容读到一个2维IDL字节型数组中。 Window,XSize=250,YSize=250 TVScl,img new_image=TVRD() Help,new_image 新创建的变量现在是一个250*250字节的数组。 ? 在24位显示器上读取图像数据 24位显示器有3个颜色通道。使用不带参数的TVRD命令得到的2维数组的每个像素值为该像素三个通道中的最大像素值。 在24位显示器上抓屏,需在命令TVRD中设置True关键字。 new_image=TVRD(True=1) 得到的是一个24位图像,当显示该图像时就要用带关键字True 的TV命令: Help,new_image Erase TV,new_image,True=1 ? 读取显示器上的局部图像数据 如果只想读显示窗口的某一部分,可指定想要的部分窗口的左下角的像素坐标和要读取的列和行的数目。例如,如果只想捕获上述头像的脸部,可键入: new_image=TVRD(40,30,110,130) 第 57 页 在IDL中,从显示器读取的2维数组可以象处理其他图像那样进行处理。 Erase TV,new_image ?6.4 直方图均衡化 ???????????????????????????????????????????????????????????????????????????? 10分钟 概念 观察图像中的像素值分布,往往会发现分布趋向集中在一个狭窄的数值范围内。实际上,图像有一个非常窄的动态颜色范围。如果像素分布开,以致使像素值的每个子范围都与这些像素值一样拥有数目大约相同的像素,则该图像的信息内容就有可能增加。将像素分布到整个颜色范围的过程叫做直方图均衡化。 装入实验数据 装入一幅CT扫描图像,该图像具有一个狭窄的动态颜色范围。 file=FilePath('ctscan.dat', SUBDIR=['examples', 'data']) scan=read_binary(file, DATA_DIMS=[256,256]) 分析数据 要看变量scan的像素值分布的柱状图 LoadCT,0 Window,0,XSize=600,YSize=250 TV,scan Plot,Histogram(scan),/NoErase,Max_Value=5000, Position=[0.5,0.15,0.95, 0.95] 直方图均衡化 可以看到大多数像素值落在50,100之间。 将像素分布至整个颜色范围内,使得每种颜色值都有大致相同的像素个数: equalized=Hist_Equal(scan) 查看新的像素分布柱状图 和 HISTOGRAM-EQUALIZED图像: Window, 1, XSize=600, YSize=250 TV, equalized Plot, Histogram(equalized), Max_Value=5000, Position=[0.5, 0.15, 0.95, 0.95],$ /NoErase 第 58 页 ?6.5 平滑图像 ???????????????????????????????????????????????????????????????????????????????????? 10分钟 ? 均值平滑 可以通过将每个像素值与它周围相邻像素值进行平均来平滑图像。这就是均值或核状平滑。均值平滑是由IDL中的功能函数Smooth完成的,它是在给定的奇数宽度的范围内实现等加权值平滑。 例如,如果周围是3*3宽度,那么每个像素由它和它的周围八个像素值的平均值代替。比较一幅没有经过平滑处理的图像和经过5*5核状均值平滑处理后的图像: Window,0,XSize=192*3,YSize=192 TV,img,0,0 smoothed=Smooth(img,5,/Edge_Truncate) TV, smoothed, 192, 0 关键字Edge_Truncate可复制图像边缘附近的像素,以便实现整幅图像的平滑。如果不使用该关键字,图像边缘附近的像素仅仅是简单复制,而没有平滑。 图像平滑被应用在一种称作晕光蒙片的图像处理技术中,可用作定位图像上的边缘或者是像素值突然变化的地方。这种技术非常简单:从未平滑的图像中减去平滑的图像即可。 TV, ((img-smoothed)+255)/2.0, 2*192, 0 ? 卷积平滑 用Smooth命令,赋给相邻的像素值相等的权值来计算平均值。有时会导致出现不希望的模糊图像。 另一种方式是用称为卷积的过程来平滑图像。一个方形滤波核和图像一起参与卷积计算。例如,在3*3的情况下,Smooth命令使用的滤波核为: 1 1 1 1 1 1 1 1 1 如果给予中心像素值更大的权值,而它周围像素值的权值小一些,图像就不会那么模糊了。例如,可以创建如下的一个核心: 第 59 页 1 2 1 2 8 2 1 2 1 通过Convol命令用上述滤波核对图像进行卷积处理: kernel=[[1,2,1], [2,8,2], [1,2,1]] TV, img, 0, 0 TV, Smooth(img, 3, /Edge_Truncate), 192, 0 TV, Convol(img, kernel, Total(kernel), /Edge_Truncate), 2*192, 0 当然,可以创建任意大小的滤波核。如下是一个典型高斯分布的5*5 滤波核: 1 2 3 2 1 2 7 11 7 2 3 11 17 11 3 2 7 11 7 2 1 2 3 2 1 可将上述滤波核应用于图像处理: kernel=[[1,2,3,2,1], [2,7,11,7,2], [3,11,17,11,3], [2,7,11,7,2], [1,2,3,2,1]] TV, Convol(img, kernel, Total(kernel), /Edge_Truncate), 192*2, 0 ? 消除图像噪声 要了解图像平滑是怎样剔除这种噪声的,首先需要创建一幅噪声图 像。用以前的图像,并键入如下的命令,将10%的像素转换为黑白点相 间噪声: noisy=img points=RandomU(602, 1800)*192*192 noisy(points)=255 points=RandomU(-1L, 1800)*192*192 noisy(points)=0 在原始图像的旁边创建一个窗口并显示噪声图像: Window,XSize=192*3,YSize=192 TV,img,0,0 TV, noisy, 192, 0 IDL中的Median命令是从图像上消除黑白点相间噪声的很好选择。 Median命令与Smooth命令类似。不同之处是Median命令计算相邻像 第 60 页 素的中间值,而不是平均值。 这就有两个重要作用。 , 第一,它能删除图像中的极端值。 , 第二,它不使那些尺寸比邻域范围大的图像边缘或特征变模 糊。 TV, Median(noisy, 3), 2*192, 0 ? 增强图像边缘 一幅图像可以通过锐化或微分来增强图像边缘。 IDL提供了两个做好的边缘增强函数:Roberts和Sobel。 还有一些其他方法也可用来增强图像边缘。例如,可以用拉普拉斯算子来对图像做卷积: 1 1 1 1 - 7 1 1 1 1 因为改进了图像边缘的对比度,这也常常被称为拉普拉斯(Laplacian)锐化操作。 TV, Sobel(img), 0 TV, Roberts(img), 1 kernel=[[1,1,1], [1,-7,1], [1,1,1]] TV, Convol(img, kernel), 2 ?6.6 图像的频域滤波 ???????????????????????????????????????????????????????????????????????? 10分钟 概念 频域滤波是常规的图像和信号处理技术。它可以用来平滑处理图像、锐化图像、降低图像的模糊程度和恢复图像。 频率域滤波有如下三个基本步骤: , . 用快速傅里叶变换(FFT)将图像从空间域转变为频率域。 , . 将转换后的图像乘以一个频率率滤波器。 , . 将滤波后的图像反变换回为空间域。 第 61 页 快速傅里叶变换 这些步骤在IDL中是用快速傅里叶变换完成的。 如果FFT函数的第二个位置 为-1,则图像由空间域转变为频率域。 如果FFT函数的第二个位置 为1,则图像将从频率域反变换回空间域。 频率滤波命令的一般形式如下: filtered_image=FFT(FFT(image, -1)*filter, 1) image既可是一维矢量,也可以是一幅二维图像,滤波器是用来滤波图像中某些特定频率的一维矢量或二维数组。 一个实例 file=FilePath('convec.dat', SUBDIR=['examples', 'data']) convec=read_binary(file, DATA_DIMS=[248,248]) Window,0,XSize=248*2,YSize=248*2 LoadCT,5 TV,convec,0,248 freqDomainImage=FFT(convec,-1) power=Shift(Alog(Abs(freqDomainImage)),124,124) TV,power,248,248 回顾与小结: 本章介绍了IDL中对文件的读取以及显示图像和对图像进行各种处理的方法。通过 本章的学习,使学生掌握在IDL中处理各种格式的图像的办法。 作业与思考题: 作业:打开一张卫星图片,进行各中处理方法的操作实习。 参考资料: 1、《IDL可视化工具入门与提高》闫殿武,机械工业出版社 2、 第 62 页 应急预案: 1、如果遇到停电或者计算机故障等意外情况导致不能正常播放幻灯片,可以通过增加板书的方法解决问题,由于板书比较耗时,可以适当减少举例的数量。 2、这是第一节课,应将课件用不同的介质存放,避免课件不能使用的情况发生。 本次课教学体会: 第 63 页 《气象可视化软件》课程教案 讲课题目: 第10讲 面向对象程序设计 目的要求: 掌握将输出图形进行地球投影的方法 重点难点: 地球投影的概念 地球投影的实现 方法步骤: 基本原理概念部分以对照PPT课件讲授为主~涉及IDL具体操作的部分~ 通过打开IDL软件~现场操作为主。 器材保障: 电脑、投影仪 教学内容与时间安排(4学时) ?7.1 地球投影 ???????????????????????????????????????????????????????????????????????????????????? 50分钟 格式: MAP_SET [, Longitude , Latitude , RotateAngle] 常用参数的用法: 常用投影关键字的用法: 常用属性关键字的用法: 投影操作实例分析: ?7.2 地球大陆轮廓线 ???????????????????????????????????????????????????????????????????????? 20分钟 格式: MAP_CONTINENTS[ , 关键字] 常用关键字的用法: 操作实例分析: ?7.3 地球经纬网格线投影 ????????????????????????????????????????????????????????????????? 20分钟 格式: MAP_Grid[ , 关键字] 第 64 页 常用关键字的用法: 操作实例分析: ?7.4 地球投影的贴图 ???????????????????????????????????????????????????????????????????????? 10分钟 格式: Result , MAP_Image(Image[ , StartX, StartY [ , Xsize , YSize]][ , 关键字]) 常用参数的用法: 常用关键字的用法: 操作实例分析: ????????????????????????????????????????????????????????????????????????????? 100分钟 回顾与小结: 本章介绍了对输出结果进行地球投影的方法。通过本章的学习,使学生掌握将数据可视化分析结果和地球背景相结合,生成气象上常用的各种地球投影图的方法。 作业与思考题: 作业:绘制一张实际的中国大陆范围的等压线和等温线,要求采用兰勃托投影对其投影显示,并显示出大陆轮廓线和国界线。 参考资料: 1、《IDL可视化工具入门与提高》闫殿武,机械工业出版社 2、 第 65 页 应急预案: 1、如果遇到停电或者计算机故障等意外情况导致不能正常播放幻灯片,可以通过增加板书的方法解决问题,由于板书比较耗时,可以适当减少举例的数量。 2、这是第一节课,应将课件用不同的介质存放,避免课件不能使用的情况发生。 本次课教学体会: 第 66 页 第 67 页
本文档为【《可视化软件》教案】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_713593
暂无简介~
格式:doc
大小:161KB
软件:Word
页数:81
分类:互联网
上传时间:2018-11-06
浏览量:7