IDL入门教程三(下)
- 格式:doc
- 大小:132.00 KB
- 文档页数:6
电脑编程入门教程电脑编程入门教程电脑编程入门教程电脑编程入门教程先认认真真的学习一门语言,学习微软的就先从VB开始,VB是比较好的入门语言,可视化的,比较简单,是非常好的入门语言。
书籍最少应该准备两本,不可能一本书籍会包含VB的所有内容,在看书的时候,可以交叉的看,一本书籍中没有讲到的内容可以在另一本中看到,这样对学习是很有好处的,也能保证所学知识的完整性。
学编程是一个很漫长的过程,不要着急,要理论与实践想结合,例程书籍也是很重要的,看源代码对学习也是很有帮助的,等你学完这门VB语言之后,学习别的语言是非常简单,可以尝试C语言,按照C——C++——VC的顺序学习,有助于知识的连贯性,我也希望你能学好的。
或者学习Delphi,入门较为简单类似于VB,但比VB强大,即可作为入门又能做强、做大 1.1.1.1.明确学习目的明确学习目的明确学习目的明确学习目的学习编程对大多数IT业人员来说都是非常有用的。
学编程,做一名编程人员,从个人角度讲,可以解决在软件使用中所遇到的问题,改进现有软件,可以为自己找到一份理想的工作添加重要得砝码,有利于在求职道路上谋得一个好的职位;从国家的角度,可以为中国的软件产业做出应有的贡献,一名优秀的程序员永远是被争夺的对象。
学习编程还能锻炼思维,使我们的逻辑思维更加严密;能够不断享受到创新的乐趣,将一直有机会走在高科技的前沿,因为程序设计本身是一种创造性的工作。
知识经济时代给我们带来了无限的机会,要想真正掌握计算机技术,并在IT行业里干出一番事业来,有所作为,具有一定的编程能力是一个基本条件和要求。
3. 3. 3. 3. 注意理解一些重要概念注意理解一些重要概念注意理解一些重要概念注意理解一些重要概念一本程序设计的书看到的无非就是变量、函数、条件语句、循环语句等概念,但要真正能进行编程应用,需要深入理解这些概念,在理解的基础上应用,不要只简单地学习语法、结构,而要吃透针对这些语法、结构的应用例子,做到举一反三,触类旁通。
DSP/BISO线程调度DSP/BIOS使用户的应用程序可以由一个线程集合构筑起来,每一个线程执行一个模块化的功能。
通过允许高优先级的线程抢占低优先级的线程,以及允许阻塞、同步、通信等各种线程间的交互方式,使得多线程的应用程序可以在一个处理器上运行。
DSP/BIOS支持多种不同优先级的线程,每种线程类型都有不同的执行和抢占特性。
这些线程按照优先级从高到低的顺序排列如下:●硬件中断(HWI),包括CLK函数。
●软件中断(SWI),包括PRD函数。
●任务(TSK)。
●后台线程(IDL)。
在DSP/BIOS中,硬件中断有最高的优先级,然后是软件中断,软件中断可以被高优先权软件中断或硬件中断抢先。
软件中断是不能被阻塞的。
任务的优先权低于软件中断,共有15个任务优先权级别(加上TSK_idle应该16个)。
任务在等待某个资源有效时可以被阻塞。
后台线程idle_loop是优先级最低的线程。
线程优先级如下图表示:下面具体介绍各种线程。
HWI module硬件中断是用来处理应用程序响应外部异步事件时必须执行的关键操作。
在典型的DSP应用中,硬件中断是由片上的外设或者DSP外部的设备触发的。
中断发生后处理器会通过中断向量跳转到相应的ISR地址。
一个中断的跳转由一个DSP/BIOS HWI对象负责,跳转的地址可以是一个用户函数或者是通用的系统HWI调度程序(dispatcher)的入口地址。
硬件中断ISR可以使用汇编语言、C语言或者混合编写。
HWI函数通常使用汇编来提高效率。
如果要完全使用C语言编写,应该使用系统的HWI调度程序,它会在调用用户C函数的前后分别惊醒现场环境保护与恢复。
所有的硬件中断都会一直运行到结束,如果一个硬件中断在其ISR得到运行机会前被多次触发,该ISR也只运行一次。
因此,用户必须尽量和减少HWI执行的代码量。
如果GIE位被使能,一个硬件中断可能被任何其他的被使能的中断抢占。
硬件中断没有优先级的区分;线程调度结果首先取决于该类就绪线程是被使能还是被禁止的。
《汽车电子控制技术》实训指导书黄桂华编广东技术师范学院实训纪律要求1、明确实训目的、端正态度、严格遵守校纪校规。
2、努力完成各项实训任务。
3、服从带队教师和实验室管理人员安排。
4、严格遵守实训时间。
5、不迟到、不早退、不打架斗殴。
6、实训期间不穿拖鞋。
7、做好自我身体安全保护,女生长发要扎起。
8、不做危险有害他人身体健康的事情。
9、学生在实训场地内未经许可不准随意搬动机件和乱按电器开关,损坏自赔,严格遵守有关的规章制度。
目录实训课题一:发动机电子控制系统总体结构认识实训课题二:电子燃油系统的检测实训课题三:空气流量计的检测实训课题四:节气门位置传感器的检测实训课题五:曲轴位置(发动机转速)传感器的检测实训课题六:喷油器的检测实训课题七:氧传感器的检测实训课题八:安全气囊系统实验实训课题九:进气压力传感器的检测实训课题十:爆震传感器的检测实训课题十一:温度传感器的检测实训课题一:发动机电子控制系统总体结构认识一、实训目的1、了解发动机电子控制系统总体结构2、识别发动机电子控制系统的主要传感器、执行器二、实训工具及设备1、常用工具1套2、桑塔纳AJR电喷发动机故障实验台一台三、实训内容和步骤1、发动机电子控制系统原理及总体结构认识发动机电子控制系统是由传感器、电控单元和执行器三部分组成。
其主要功能是控制燃油喷射式发动机的空燃比和点火时刻,还有控制发动机启动、怠速转速、极限转速、排气再循环、闭缸工作、二次空气喷射、进气增压、爆震、发电机输出电压、电动燃油泵系统和自诊断等辅助功能。
1)、传感器是一种信号检测与转换装置传感器安装在发动机的各个部位,如空气流量计安装在发动机空气滤清器后,氧传感器安装在排气管上等。
功能是:检测发动机运行状态的各种参数,并将这些参量转换成计算机能够识别的电量信号输入电控单元。
2).电子控制单元的功能是:根据各种传感器和控制开关输入的信号参数,对喷油量、喷油时刻和点火时刻等进行实时控制。
CORBA接口开发详解(网络资料)corba(公用对象请求代理体系)是基于对象技术的分布计算应用软件体系结构。
corba标准主要分为三个部分:接口定义语言(IDL),对象请求代理(ORB),以及ORB之间的互操作协议IIOP,核心是对象请求代理。
corba与平台和语言无关。
java IDL既是corba的一个实现,它是jdk1.3或更高版本的核心软件包之一,定义在org.omg.CORBA及其子包中,在java IDL的支持下,开发人员可以使用如下两种方法将java 和corba集成在一起:创建java对象并使之可在corba orb中展开;创建java类并作为/jinzhengquan/admin/EditPosts.aspx?catid=295786和其它orb一起展开的corba对象的客户,这种方法提供了另外一种途径,通过它java可以被用于将你的新的应用和以前遗留的系统相集成。
采用java创建corba应用,corba对象服务的实现方式分为两种:对象的命名引用方式和字符串化对象引用方式,创建corba应用程序的过程大体如下:编写IDL接口定义文件;将接口定义文件编译为相应高级语言源代码,产生服务器框架与客户端存根;基于服务器框架,编写服务对象实现程序;基于客户端存根,编写客户对象调用程序;分别编译客户对象和服务对象程序;运行服务对象和客户对象程序。
第一步下载JacORB并配置jacORB1,解压JacORB-2.3.0-bin,将jacORB拷贝到c:\jacORB;2,修改c:\jacORB\bin下的文件,去掉idl.tpl,idl.bat.tpl,jaco.tpl和jaco.bat.tpl文件的后缀名".tpl";3,在jacORB目录下建立classes文件夹,将etc中的jacorb_properties.template文件拷贝到classes下,将文件中(*)Service=file:/c:/NS_Ref修改为(*)jacorb.naming.ior_filename=c:/NS_Ref,并将文件名改为jacorb.properties4,在dos下输入ns即可。
AT89S52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。
空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。
掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
单片机空闲与掉电模式2009-04-23 00:03特别对于电池供电系统来说,功耗是首要考虑的问题.我们知道单片机内部有一个电源管理寄存器PCON,这个寄存器的最低两位,IDL和PD这两位分别用来设定是否使单片机进入空闲模式和掉电模式。
1. 空闲模式当单片机进入空闲模式时,除CPU处于休眠状态外,其余硬件全部处于活动状态,芯片中程序未涉及到的数据存储器和特殊功寄存器中的数据在空闲模式期间都将保持原值。
但假若定时器正在运行,那么计数器寄存器中的值还将会增加。
单片机在空闲模式下可由任一个中断或硬件复位唤醒,需要注意的是,使用中断唤醒单片机时,程序从原来停止处继续运行,当使用硬件复位唤醒单片机时,程序将从头开始执行。
让单片机进入空闲模式的目的通常是为了降低系统的功耗,举个很简单的例子,大家都用过数字万用表,在正常使用的时候表内部的单片机处于正常工作模式,当不用时,又忘记了关掉万用表的电源,大多数表在等待数分钟后,若没有人为操作,它便会自动将液晶显示关闭,以降低系统功耗,通常类似这种功能的实现就是使用了单片机的空闲模式或是掉电模式。
以STC89系列单片机为例,当单片机正常工作时的功耗通常为4mA~7mA,进入空闲模式时其功耗降至2mA,当进入掉电模式时功耗可降至0.1μA以下。
2. 休眠模式当单片机进入掉电模式时,外部晶振停振、CPU、定时器、串行口全部停止工作,只有外部中断继续工作。
使单片机进入休眠模式的指令将成为休眠前单片机执行的最后一条指令,进入休眠模式后,芯片中程序未涉及到的数据存储器和特殊功能寄存器中的数据都将保持原值。
可由外部中断低电平触发或由下降沿触发中断或者硬件复位模式换醒单片机,需要注意的是,使用中断唤醒单片机时,程序从原来停止处继续运行,当使用硬件复位唤醒单片机时,程序将从头开始执行。
上位机串⼝通信编程摘要本⽂主要描述了利⽤PC机与AT89C51单⽚机之间的通信程序设计实现温度显⽰。
并详述了在VC6.0环境下,上位机利⽤MSCOMM通信控件与单⽚机之间串⼝通信实现温度显⽰。
由单⽚机采集⼀个温度信号,将采集到的温度信号传送给PC机显⽰,PC机⽤VC6.0编写程序,单⽚机程序⽤C语⾔编写,最后⽤PROTUES软件进⾏仿真实现温度显⽰。
关键词:单⽚机MSCOMM控件VC6.0 AT89C51 温度显⽰⽬录摘要1 引⾔ (1)2 结构设计与⽅案选择 (2)2.1设计任务 (2)2.1.1单⽚机的选择 (2)2.1.2电平转换 (2)2.1.1单⽚机的选择 (2)2.1.3单⽚机与pc机通信原理 (2)2.2软件⽅案选择 (2)2.2.1 上位机编程⽅案选择 (3)2.2.2 单⽚机编程⽅案选择 (3)2.3 总体⽅案选择 (2)3 硬件设计 (8)3.1单⽚机主要特性 (5)3.2 MAX232电平芯⽚介绍10 (10)3.3 硬件电路设计图 (11)3.3.1 PC机与单⽚机通信接⼝电路设计框图 (11)3.3.2整体设计原理图 (11)4软件设计 (12)4.1上位机程序设计 (12)4.2下位机程序设计 (13)5 软硬件调试部分 (21)5.1 PROTEUS软件仿真 (21)5.1.1 Protues简介 (21)5.1.2 Protues仿真电路图 (22)5.2 VC软件仿真 (21)结束语 (27)致谢 (28)参考⽂献 (29)1引⾔随着⼈们⽣活⽔平的不断提⾼,单⽚机控制⽆疑是⼈们追求的⽬标之⼀,它所给⼈带来的⽅便也是不可否定的,要为现代⼈⼯作、科研、⽣活、提供更好的更⽅便的设施就需要从单⽚机技术⼊⼿,⼀切向着数字化控制,智能化控制⽅向发展。
现代化集中管理需要对现场数据进⾏统计、分析、制表、打印、绘图、报警等,同时,⼜要求对现场装置进⾏实时控制,完成各种规定操作,达到集中管理的⽬的。
thrift⼊门教程thrift资料集合
1. thrift⼊门教程
这是⼀篇不错的⼊门⽂章,阅读起来只需要⼏分钟。
内容包括:
IDL基本介绍。
如何使⽤IDL⽂件⽣成代码;
如何启动服务端/客户端;
2. thrift server通信类型(transport type)
常⽤的有以下三种:
(1) buffered:使⽤经典的缓冲流Socket;
(2) framed(⾮阻塞server必须使⽤这种):基于帧的⽅式的Socket,每个帧都是按照4字节的帧长加上帧的内容来组织,帧内容就是我们要收发的数据。
读的时候按长度预先将整Frame数据读⼊Buffer,再从Buffer慢慢读取。
写的时候,每次flush将Buffer中的所有数据写成⼀个Frame。
framed这种⽅式有点类似于http协议的chunked编码;
(3) fastframed:和framed相⽐是内存利⽤率更⾼的⼀个内存读写缓存区,它使⽤⾃动增长的byte,⽽不是每次都new⼀个byte[],提⾼了内存的使⽤率。
framed的ReadBuffer每次读⼊Frame时都会创建新的byte[],WriteBuffer每次flush时如果⼤于初始1K也会重新创建byte[]。
ENVI 环境下modistools 安装说明工具介绍该IDL 模块须镶嵌在ENVI 环境中使用,用于处理第一级MODIS 数据(first level MODIS data) 。
目前,该模块包括了下面几个功能:1 、Bow-tie 处理;2 、建立PTS 文件( 即地面控制点文件) ,用于几何精校正;3 、亮温计算;一些其他的功能会陆续增加(比如,云掩模)此工具主要为了满足MODIS 数据处理的需要,目前,只作了一些简单的工作,希望得到大家的反馈意见。
下载该模块最新的版本,可以到ScanEx 的网站上下载:http://eostation.scanex.ru/download/software/modistools_envi.v10.zip在本文的末尾有有关的申明。
如果你觉得在你的工作中,该工具对你很有帮助,希望你能在你发表你的成果时,做适当的致谢。
如果对于该工具有什么意见可以致信给Alexander Shumilin (shumilin@scanex.ru)安装该模块包含了几个 IDL 函数 , 并被打包为一个编译了的模块 . 可以在 ENVI+IDL 或者 ENVI-Runtime版本中使用 . 该模块用 IDL5.4 进行编译 , 并用 ENVI 3.4+SP1 进行了测试 ( 但是不能确定该模块是否能用于早期版本 ).该安装过程属于对 ENVI 功能的扩展 , 所以安装方法没有什么不同 , 所以如果有什么问题 , 你可以参考 ENVI 手册 .安装过程分两步 :1, 首先将 modistools.sav 放到正确的目录下 , 也就是 ENVI 安装目录下的 save_add 目录 ( 可以通过搜索找到 )比如 :C:\Program Files\RSI\IDL60\products\envi40\save_add2, 找到安装目录下的 envi.men 文件 , 该文件存放的是 ENVI 软件菜单命令的位置信息 , 新加的模块菜单都可以在这里添加 , 只要稍做编辑即可 :找到需要将模块加入的菜单目录 , 我们这里将 MODIS 工具模块放在 Basic Tools | Data-Specific Utilities | 目录下 , 在文件中找到该目录后 , 将下面东西 , 复制在该目录下 , 保存即可 . 结果见图 1, 唯一区别就是菜单中文化了2 {MODIS tools}3 {Bow-tie correction} {x} {MODISBowCorrection}3 {Export GCPs} {x} {EOSgeoToENVIGCP}3 {Load Temperature} {x} {MODIS_LOADTEMPERATURE}图 1 添加modistools 模块菜单完成了这些工作后 , 只需要重新起动 ENVI 即可 , 然后就可以在 Basic Tools | Data-Specific Utilities | 目录下找到 MODIS tools 命令菜单 . 如下图 2.图 2 安装好modistools 模块后的菜单工具使用说明 :bow-tie 纠正该函数对MODIS 一级产品(MODIS Level-1 images) 进行系统改正. MODIS 数据经辐射校正之后生成的L1B 产品中存在着bow-tie 现象,即“蝴蝶结”现象,表现为相邻两个扫描行之间有部分数据相同,越向边缘重复数据越多。
[讲解]计算机编程入门教程电脑编程入门教程先认认真真的学习一门语言,学习微软的就先从VB开始,VB是比较好的入门语言,可视化的,比较简单,是非常好的入门语言。
书籍最少应该准备两本,不可能一本书籍会包含VB的所有内容,在看书的时候,可以交叉的看,一本书籍中没有讲到的内容可以在另一本中看到,这样对学习是很有好处的,也能保证所学知识的完整性。
学编程是一个很漫长的过程,不要着急,要理论与实践想结合,例程书籍也是很重要的,看源代码对学习也是很有帮助的,等你学完这门VB语言之后,学习别的语言是非常简单,可以尝试C语言,按照C——C++——VC的顺序学习,有助于知识的连贯性,我也希望你能学好的。
或者学习Delphi,入门较为简单类似于VB,但比VB强大,即可作为入门又能做强、做大1.明确学习目的学习编程对大多数IT业人员来说都是非常有用的。
学编程,做一名编程人员,从个人角度讲,可以解决在软件使用中所遇到的问题,改进现有软件,可以为自己找到一份理想的工作添加重要得砝码,有利于在求职道路上谋得一个好的职位;从国家的角度,可以为中国的软件产业做出应有的贡献,一名优秀的程序员永远是被争夺的对象。
学习编程还能锻炼思维,使我们的逻辑思维更加严密;能够不断享受到创新的乐趣,将一直有机会走在高科技的前沿,因为程序设计本身是一种创造性的工作。
知识经济时代给我们带来了无限的机会,要想真正掌握计算机技术,并在IT行业里干出一番事业来,有所作为,具有一定的编程能力是一个基本条件和要求。
2.打好基础学编程要具备一定的基础,总结之有以下几方面: (1)数学基础从计算机发展和应用的历史来看计算机的数学模型和体系结构等都是有数学家提出的,最早的计算机也是为数值计算而设计的。
因此,要学好计算机就要有一定的数学基础,出学者有高中水平就差不多了。
(2)逻辑思维能力的培养学程序设计要有一定的逻辑思维能力,“逻思力”的培养要长时间的实践锻炼。
要想成为一名优秀的程序员,最重要的是掌握编程思想。
平滑图像 可以通过将每个像素值与它周围相邻像素值进行平均来平滑图像。这就是均值或方盒平滑。均值平滑是由IDL中的功能函数Smooth完成的,它是在给定的奇数宽度的范围内实现等加权值平滑。例如,如果周围是3*3宽度,那么每个像素由它和它的周围八个像素值的平均值代替。 比较一幅没有经过平滑处理的图像和经过5*5 方盒的均值平滑处理后的图像,键入: IDL>Window,0,XSize=192*3,YSize=192 IDL>TV,image,0,0 IDL>smoothed=Smooth(image,5,/Edge_Truncate) IDL>TV, smoothed, 192, 0 注意,与命令Smooth一起使用的关键字Edge_Truncate。该关键字可复制图像边缘附近的像素,以便实现整幅图像的平滑。如果不使用该关键字,图像边缘附近的像素仅仅是简单复制,而没有平滑。 图像平滑被应用在一种称作晕光蒙片的图像处理技术中。这种技术可用作定位图像上的棱边或者是像素值突然变化的地方。这种技术非常简单:从未平滑的图像中减去平滑的图像即可。键入: IDL>TV, ((image-smoothed)+255)/2.0, 2*192, 0 图像显示应如图36所示。
用Smooth命令,赋给相邻的像素值相等的权值来计算平均值。有时会导致出现不希望的模糊图像。另一种方式是用称为卷积的过程来平滑图像。这种技术中,一个方形内核和图像一起参与卷积计算。例如,在3*3的情况下,Smooth命令使用的内核为: 1 1 1 1 1 1 1 1 1 如果给予中心像素值更大的权值,而它周围像素值的权值小一些,图像就不会那么模糊了。例如,可以创建如下的一个核心: 1 2 1 2 8 2 1 2 1 通过Convol命令用上述内核对图像进行卷积处理,键入: IDL>kernel=[[1,2,1], [2,8,2], [1,2,1]] IDL>TV, image, 0, 0 IDL>TV, Smooth(image, 3, /Edge_Truncate), 192, 0 IDL>TV, Convol(image, kernel, Total(kernel), $ /Edge_Truncate), 2*192, 0
图36:左边为原始图像,中间为平滑处理过的图像,右边为经晕光蒙片处理后的图像。
当然,可以创建任意大小的内核。如下是一个典型高斯分布的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
可将上述内核应用于图像处理: IDL>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]] IDL>TV, Convol(image, kernel, Total(kernel), $ /Edge_Truncate), 192*2, 0
消除图像噪声 将图像上的噪声消除是一种常规的图像处理技术。噪声来自许多方面,它经常降低图像质量。噪声的一般表现形式是黑白点相间噪声,其中一些随机的像素有极端的像素值。要了解图像平滑是怎样剔除这种噪声的,首先需要创建一幅噪声图像。用以前的图像,并键入如下的命令,将10%的像素转换为黑白点相间噪声: IDL>noisy=image IDL>points=RandomU(seed, 1800)*192*192 IDL>noisy(points)=255 IDL>points=RandomU(seed, 1800)*192*192 IDL>noisy(points)=0 在原始图像的旁边创建一个窗口并显示噪声图像: IDL>Window,XSize=192*3,YSize=192 IDL>TV,image,0,0 IDL>TV, noisy, 192, 0 IDL中的Median命令是从图像上消除黑白点相间噪声的很好选择。Median命令与Smooth命令类似。不同之处是Median命令计算相邻像素的中间值,而不是平均值。这就有两个重要作用。第一,它能删除图像中的极端值。第二,它不使那些尺寸比邻域范围大的图像棱边或特征变模糊。要看是如何工作的,键入: IDL>TV, Median(noisy, 3), 2*192, 0 图形显示应如图37所示。
图37:左边为原始图像,中间为噪声图像,右边为用中值滤波器平滑处理后的噪声图像。
增强图像棱边 一个图像可以锐化或通过微分来增强图像棱边。IDL提供了两个做好的棱边增强函数:Roberts和Sobel。还有一些其它方法也可用来增强图像棱边。例如,可以用拉普拉斯算子来和图像做卷积: 1 1 1 1 -7 1 1 1 1 因为改进了图像棱边的对比度,这也常常被称为拉普拉斯(Laplacian)锐化操作。需要了解这些方法是如何工作的,可键入: IDL>TV, Sobel(image), 0 IDL>TV, Roberts(image), 1 IDL>kernel=[[1,1,1], [1,-7,1], [1,1,1]] IDL>TV, Convol(image, kernel), 2 图形显示应如图38所示。
图38:三种增强图像棱边的方式。左边用的是Sobel方法。中间用的是Roberts方法。右边是用拉普拉斯算子对图像做卷积。 图像的频域滤波 频域滤波是常规的图像和信号处理技术。它可以用来平滑处理图像,锐化图像,降低图像的模糊程度,和恢复图像。 频率域滤波有如下三个基本步骤: 1. 用快速傅里叶变换(FFT)将图像从空间域转变为频域。 2. 将转换后的图像乘以一个频率滤波器。 3. 将滤波后的图像返回为空间域。 这些步骤在IDL中是用快速傅里叶变换(FFT函数)完成的。(如果命令FFT的第二个定位参数为-1,则图像由空间域转变为频域。如果参数为1,则图像将相反转化)。频率滤波命令的一般形式如下: filtered_image=FFT(FFT(image, -1)*filter, 1) 在这种情况中,image既可是一维矢量,也可以是一幅二维图像。滤波器是用来滤波图像中某些特定频率的一维矢量或二维数组。下面将详细介绍。
创建图像滤波器 在IDL中用基于数组的操作和函数很容易创建图像数字滤波器。许多普通的滤波器利用了所谓的频率图像或欧氏距离图的优点。一幅二维图像的欧氏距离图是一个与图像有同样大小的数组。距离图的每个像素被赋给一个值,这个值等于它到二维数组最近的角的距离。在IDL中的Dist命令用作创建欧氏距离图或频率图像。要观看一幅简单的距离图,可键入: IDL>Surface,Dist(40) 在频域滤波中所用的滤波器一般为Butterworth频率滤波器。如下的方程给出一个低过Butterworth频率滤波器一般形式: filter=1/[1+C(R/R0)2n] 其中,常量C等于1.0或0.414[这个值将滤波器的幅度在R=R0时定义为50%或1/Sqrt(2)],R为频率图像,R0为给定的滤波器截止频率(实际中由像素宽度代替),n是滤波器的阶数,通常为1。 高过Butterworth滤波器由如方程给出: filter=1/[1+C(R0/ R)2n] 要将频域滤波器应用到图像中,可用命令LoadData来打开图像Earth Mantle Convection。这是一个248*248的二维数组。 IDL>convec=LoadData(11) 键入如下命令来打开一个窗口,装入颜色表Standard Gramma II,并在左上角显示原始图像: IDL>Window,0,XSize=248*2,YSize=248*2 IDL>LoadCT,5 IDL>TV,convec,0,248 在频域滤波中的第一步是用函数FFT将图像由空间域转换为频率域,键入: IDL>freqDomainImage=FFT(convec,-1) 通常,低频项代表一般的图像形状,高频项对图像增加细节。浏览频率域的图像通常是没有意义的,但有时对观察频域图像的功率谱有用。 功率谱是一幅频域图像中不同组成部分的幅度图。与源点(通常代表图像的中心)不同的距离代表不同的频率,相对源点不同的方向代表在原图像特征的不同方向。每个位置的功率表明该频率的大小和以在图像中的方向。功率谱对分离图像中的周期性结构或噪声是特别有用的。功率谱的幅度通常用对数座标表示,因为功率从某个频率到下一频率的变化非常大。 计算出这幅对流图像的功率谱,并将其显示在原始图的相邻位置上,可键入: IDL>power=Shift(Alog(Abs(freqDomainImage)),124,124) IDL>TV,power,248,248 功率谱中的对称性表明这个图像上在越来越多的频率中包含了许多周期性结构。输出应该类似于图39)。这个练习的目的是过滤掉图像中较高的频率。 接下来的一步是用频率滤波器转换图像。ButterWorth低通滤波器用于滤出图像内的高频成分。这些高频成分为图像提供详细信息,所以最终的结果是完成图像的平滑处理。创建低通频率滤波器可键入: IDL>filter = 1.0 / (1.0D + Dist(248)/15.0)^2 注意,截止频率宽度是15个像素。这是足以删除高频的一半。在图39中功率谱可以看到。 使用该频率滤波器,再将图像由频率域转换回空间域,最后显示滤波后的图像。键入: IDL>filtered = FFT(freqDomainImge * filter, 1) IDL>TV, filtered, 0, 0 为了让自己看到滤掉高频成分的图像,可以显示滤波后图像的功率谱,并在其旁显示滤波后的图像,键入: IDL>filteredFreqImg = FFT(filtered, -1) IDL>power = shift(Alog(Abs(filteredFreqImg)), 124, 124) IDL>TV, power, 248,0