IDL编程实现图像处理
- 格式:doc
- 大小:57.50 KB
- 文档页数:9
IDL界面实现算法IDL(Interactive Data Language)是一种数据处理和可视化的编程语言,主要用于描述、分析和可视化科学和工程数据。
IDL界面的实现是通过用户界面和算法交互的方式,方便用户使用IDL语言进行数据处理和分析。
下面将介绍IDL界面实现算法的步骤和具体应用。
首先,IDL界面的实现需要使用IDL的开发环境,例如IDL Workbench或IDL Studio。
用户可以通过界面中的按钮、菜单和输入框与IDL语言进行交互,进行数据处理、分析和可视化。
在IDL界面中实现算法的一般步骤如下:1.界面设计:根据算法的需求和用户的使用习惯,设计界面的布局和元素。
界面设计应该直观、简洁,方便用户理解和操作。
常见的界面元素包括按钮、菜单、输入框、输出框等。
2. 界面编程:使用IDL语言编写界面的代码,包括界面元素的创建、布局和事件处理等。
IDL界面的编程可以使用IDL的自带函数库或者第三方界面库(如IDLace)进行。
3.算法实现:根据算法的具体逻辑,使用IDL语言编写算法的代码。
算法可以包括数据处理、分析、模型训练等步骤。
4.界面与算法的交互:在界面编程的代码中,通过调用算法代码,将界面中的输入数据传递给算法进行处理,并将算法的结果显示在界面的输出框中。
同时,界面还可以提供一些参数的输入框,让用户可以调整算法的参数。
5.错误处理和优化:在编程过程中,需要考虑各种可能的错误情况,并进行适当的错误处理。
另外,为了提高界面的性能和用户体验,还可以对代码进行优化,提高算法的运行效率。
IDL界面的实现可以应用于各种领域的数据处理和分析任务。
例如,在地理信息系统中,可以使用IDL界面来加载地图数据、进行空间统计分析和可视化;在气象预测中,可以使用IDL界面来导入气象数据、进行天气模拟和绘制预测图;在生物医学领域,可以使用IDL界面来导入生物图像数据、进行图像分割和特征提取等。
总之,IDL界面实现算法是一种将科学计算和数据处理与用户交互相结合的方法,可以方便用户进行数据处理和分析。
idl中write_tiff的用法一、简介在I DL(I nt er ac tiv e Da ta La ng ua ge)中,wr it e_ti ff是一个用于将图像数据保存为TI F F(Ta gg ed Im ag eF i le Fo rm at)格式的函数。
T I FF是一种常用的无压缩图像文件格式,具有广泛的应用场景。
二、功能说明w r it e_ti ff函数主要用于将ID L中的图像数据保存为T IFF格式的图像文件。
该函数具有以下特点:-支持保存单通道或多通道图像-支持保存灰度图像或彩色图像-支持保存8位、16位或32位的图像数据-支持设置图像的分辨率和色彩空间-支持保存字节顺序为大端序或小端序的图像数据三、函数语法```w r it e_ti ff,f il ena m e,im ag e_da ta,[O P TI ON S]```f i l e n a m e-:要保存的T IF F图像文件名(包含路径)i m a g e_d a t a-:要保存的图像数据O P T I O N S-:可选参数,用于指定保存图像的一些选项,如分辨率、色彩空间等。
四、使用示例下面是一个使用w rit e_t if f函数保存图像数据的示例代码:```;读取原始图像数据r e ad_i ma ge,i ma ge_d at a,'p at h/to/or i gi na l_im ag e.png';调用w ri te_t if f函数保存图像数据为T IF F格式w r it e_ti ff,'pa th/t o/ou tp ut_i ma ge.t if f',i ma ge_d ata,RE SO L U T IO N=300,CO LO RS=3```上述代码将读取名为'o ri gi na l_im ag e.p n g'的图像数据,并将其保存为名为'o ut pu t_im a ge.t if f'的T IFF图像文件。
实验三IDL图像处理目的:掌握IDL图像处理的手段内容:1、显示图像事实上,任何类型的二维数据集都可认为是一幅图像。
但是要在一个8位的显示设备上显示图像数据,就必须将图像数据调整为 0~255之间的字节型数值。
(在一个24-bit的显示设备上,24位图像的RGB值必须调整成字节型数值)。
因为图像总是以字节型数值显示,所以图像总是以字节型数组来存储。
但是无论图像是怎样存储的,在IDL中,图像总是由两个显示图像的IDL命令:TV和TVScl以字节型数值来完成。
可用TV和TVScl两个IDL命令中的任一个来显示图像。
这两个命令几乎在各个方面都是一样的,包括能与之一起使用的关键字。
仅仅在一个方面不同:TVScl将图像数据调整为与IDL运行时所用颜色数目相适应的字节型数值。
注意,与Plot,Surface和Contour命令不同,TV和TVScl命令在显示图像之前不删除窗口中已显示的内容。
一般情况下这个问题影响不大,但有时候也会产生一些麻烦。
如果想要一个空白的显示窗口来显示图像数据,无论当前窗口上的显示内容是什么,都可用一个简单的命令Erase来删除。
IDL>Erase要了解这两个命令是怎样工作的,需要有一些图像数据用于处理。
用命令LoadData来打开图像数据集Ali and Dave。
将要处理这两幅图像数据中的第二幅图像。
键入IDL>image=LoadData(10)IDL>image=image[*,*,1]打开一个显示窗口,装上灰度颜色表, 用TV命令显示图像:IDL>Window,0,XSize=192,YSize=192IDL>TV,image所得图像:IDL和Research Systems公司的创始人--David Stern的图像。
People.dat数据集中的另外一幅图像是Ali Bahrami,Research Systems公司的第一位员工。
他们两人依然致力于IDL的开发因为使用的是TV命令,所以数据没有经过拉伸就被送到显示器中显示。
第二章简单的图形显示本章概述科学分析最基本的能力就是以简单的线画图、等值线图和曲面图来显示所研究的数据。
在这一章中,将知道用这些方式来显示数据是多么容易。
也将学会用系统变量和关键字来定位和标注简单的图形显示。
将学会如下几点:1.如何用Plot命令将数据显示为线画图。
2.如何用Surface和Shade_Surf命令将数据显示为曲面图。
3.如何用Contour命令将数据显示为等值线图。
4.如何在显示窗口上定位显示图形。
5.如何用公共关键字来标注和自定义图形显示。
IDL中简单的图形显示IDL中一个简单的图形显示可认为是栅格图形的一个实例。
也就是说,可用Plot, Contour或者Surface命令通过一种算法来点亮显示窗口内相应的像素点而形成栅格图形。
这种栅格图形没有永久性。
换言之,一旦IDL显示图形和点亮相应的像素点后,IDL就不知道自己做了些什么。
这意味着,在用户重置图形窗口大小时,IDL无法进行相应的响应。
总之,在这种模式下图形显示不能被刷新,除非再次输入图形命令。
但是,栅格图形命令在IDL中被广泛应用,因为它们简单快捷。
而且,将看到,如果仔细地用栅格图形命令编写IDL程序时,可以克服许多与栅格图形命令相关的限制。
本章将介绍一些关于如何用栅格图形命令写出可调节尺寸的IDL图形窗口或进行直接硬拷贝输出的必备概念。
本章的图形命令都是Research Systems公司所说的直接图形。
另外一种被Research Systems公司称为对象图形的图形方式在IDL5.0中被引入。
对象图形使用时相对难一点,但它在IDL编程方面更强大更灵活。
对象图形不是为了在命令行使用而开发的,而是用在IDL的程序中,特别是用于带有界面的程序中(带有图形用户界面的程序)。
本书对对象图形不做介绍。
创建线画图生成线画图最简单的方法是绘出一个矢量。
可以用LoadData命令打开时序数据集。
LoadData命令是本书所带的一个IDL程序(详细细节参考第5页的“本书中所用的IDL程序和数据文件”)。
使用IDL的12个小技巧IDL(Interactive Data Language)是一种用于科学数据分析和可视化的编程语言,广泛应用于天文学、地球科学、气象学等领域。
下面列举了一些使用IDL的小技巧,以便更高效地使用该语言:1.使用多行注释:在IDL中,可以使用分号';'来添加注释。
然而,为了使代码更易读,可以使用/*注释内容*/的形式添加多行注释。
2.使用内建函数:IDL提供了许多内建函数来执行各种操作,如数学计算、数组处理、文件读写等。
在编写代码时,了解和使用这些函数可以有效地简化代码,并提高执行效率。
3. 显示帮助文档:IDL的帮助文档非常丰富,包括每个函数的定义、用法示例以及相关的参考资料。
在IDL命令行中,可以通过help函数来获取一些函数的帮助文档。
例如,help, function_name。
4. 使用通配符匹配文件名:在IDL中,可以使用*和?通配符来匹配文件名。
例如,read_ file, 'data*.txt'将读取以data开头、以.txt结尾的所有文件。
5.使用绘图模板:IDL提供了各种图形模板,可以用于创建各种类型的图表,如散点图、线图、柱状图等。
使用这些模板可以大大简化创建和自定义图形的过程。
6.使用图像处理工具:IDL提供了强大的图像处理工具包,可以对图像进行滤波、增强、分割等操作。
熟悉这些工具和函数,可以使图像处理过程更加高效和准确。
7. 使用结构体进行数据组织:IDL使用结构体(structure)来组织和存储复杂的数据。
结构体可以包含不同类型和大小的变量,使得数据的访问和操作更具有灵活性。
8.使用FOR循环和FOREACH迭代:在IDL中,使用FOR循环可以方便地对数据进行迭代处理。
另外,使用FOREACH迭代方式可以更加简洁地遍历数组元素。
9.使用条件语句:IDL提供了丰富的条件语句,如IF、ELSEIF和CASE语句,用于根据不同的条件执行不同的代码块。
实验报告课程:IDL应用开发专业:班级:学生姓名:学号:指导教师:指导教师职称:完成时间:实验项目列表实验报告撰写及批改说明1.实验报告格式要求统一采用实验报告用纸。
实验报告中的计量单位、制图、制表、公式、缩略词、符号应符合国家的规定。
2.实验报告内容包括:1)实验项目名称;2)实验组号;3)组内其他成员姓名;4)目的要求;5)仪器用具:仪器名称及主要规格(如包括量程、分度值、精度等)、用具名称;6)实验原理:简单但要抓住要点,即要写出依据原理的公式名称、公式表达式、公式中各物理量的名称、公式成立的条件等;7)实验内容:具体内容因课程由各指导老师具体规定。
设计性实验由学生自主提出实验步骤或方案、结论等;8)数据表格:画出数据表格(写明物理量和单位);9)数据处理及结果(结论):按实验要求处理数据;10)讨论:对实验中存在的问题、进一步的想法等进行讨论。
3.学生按实验项目撰写实验报告,所有实验项目完成后,填写实验项目列表,并装订成册,由实验室保存。
4.指导教师按实验项目批改,填写成绩及教师评阅意见,并在实验项目列表中填写成绩,课程实验全部完成后,填写课程实验总成绩。
实验一IDL基础编程一、实验目的1、掌握IDL软件安装的过程。
2、熟悉IDL的编程环境。
3、掌握IDL基本数据类型、运算符与表达式、数组的使用方法。
4、掌握IDL的循环语句、选择语句、控制语句的程序设计方法。
5、掌握IDL读写文件的输入与输出方法。
二、实验任务1、给定一个索引数组indgen(10,10),分别输出第2列-第5列第3行-第7行的数据、元素值大于90的元素个数及元素值。
pro IND,aa= indgen(10,10)print,aprint,'************************************************************** *********************'print,a[1:4,2:6]print,'************************************************************** *********************'result = where(a GT90,count)print,resultprint,'************************************************************** *********************'print,countend2、利用IDL的控制语句编写一个程序,输出100之内的全部素数。
IDL DICOM扩展模块
DICOM(Digitalimaging and Communications in Medicine)
标准是美国放射学会(ACR)和全美电子厂商联合会(NEMA)
为了规范医学影像及其相关信息的交换而创建的。
DICOM标
准规范了医学影像极其相关信息的交换,简化了医学影像信息
交换的实现,推动了远程放射学系统、图像管理与通信系统
(PACS)的研究与发展。
IDL的DICOM扩展模块提供了DICOM工具箱和DICOM
网络服务,结合IDL强大的图像处理和可视化分析功能,构成
了IDL医学影像共享及处理的完整解决方案。
DICOM工具箱模块提供了对DICOM服务配置的获取,
数据信息的查询、获取、存储和分发功能。
•通过网络访问DICOM文件或影像
•读写DICOM文件或影像
DICOM 网络服务模块提供了对DICOM数据的查询、获
取、存储和分发等功能,用户可以将IDL和他们的医学影像工
作流程集成在一起。
用户通过该模块可以向远程服务器端查询、
获取DICOM文件,还可以将分析后的DICOM文件分发给远
程服务器或者工作组内的其它用户。
通过DICOM 网络服务模
块IDL用户可以获得以下的功能:
•服务主机(SCP)配置和保存
•用户机器(SCU)配置、查询、接收和保存
使用IDL的DICOM工具箱和DICOM 网络服务模块,可以提高用户医学影像数据的生产效率,促进对现有医学影像数据的应用推广。
科学网-刘杰的博客-[转载]IDL二次开发利用envi入手练习[转载]IDL二次开发利用envi入手练习ENVI/IDL二次开发之遥感影像处理入门练习(转帖水色遥感)1,读取一幅多波段影像的中心点光谱曲线,并plot出来,用中文宋体标示出其经纬度;训练内容:Envi获取影像投影参数,像素点地理位置的方法;熟悉Plot的参数设置;推荐调用函数:envi_pickfile,envi_open_fileEnvi_file_queryEnvi_get_map_infoENVI_PROJ_CREATEENVI_CONVERT_FILE_COORDINATESENVI_CONVERT_PROJECTION_COORDINATESPLotENVI_FILE_MNG源码:pro read01envi_open_file,envi_pickfile(),r_fid=fidenvi_file_query,fid,nb=nb,nl=nl,ns=ns,wl=wlxf=(nl/2)yf=(ns/2)envi_convert_file_coordinates,fid,xf,yf,xmap,ymap,/to_map envi_convert_projection_coordinates,xmap,ymap,envi_get_p rojection(fid=fid),oxmap,oymap,envi_proj_create(/geographic) r = findgen(nb)for i=0,nb-1 do beginr[i]=envi_get_data(/complex,dims=[-1,nl/2,nl/2,ns/2,ns/2],fid=fid,pos=i)print,r[i]endforplot,wl,rprint,nb,oxmap,oymapend2,读取一景TM影像的3、4波段,计算NDVI,用灰度图显示出来,并保存为Envi格式文件;推荐调用函数:envi_pickfile,envi_open_fileEnvi_file_queryEnvi_get_map_infoEnvi_get_dataFloatwindowTvtvsclEnvi_write_envi_fileENVI_FILE_MNG(以上为Envi读写文件常用函数,后文不再详述)源码:pro ndvidemoenvi_open_file,envi_pick_file,r_fid=fidenvi_file_query,fid,nb=nb,nl=nl,ns=nsred=envi_get_data(/complex,dims=[-1,0,ns-1,0,nl-1],fid=fid,pos=2)nir=envi_get_data(/complex,dims=[-1,0,ns-1,0,nl-1],fid=fid,pos=3)ndvi=(float(nir)-float(red))/(float(nir)+float(red)+0.001)envi_write_envi_file,ndvi,out_name='ndvi.img'envi_file_mng,id=fid,/removeend3,读取一景CBERS影像的4个波段,根据LVB变换原理,计算其L、V、B分量并保存;推荐调用函数:envi_pickfile,envi_open_fileEnvi_file_queryEnvi_get_map_infoEnvi_get_dataEnvi_get_sliceFloatPoly_fitEnvi_write_envi_fileENVI_FILE_MNG4,读取2个时相的ETM+影像,去除洪湖湖面范围内的条带(多个波段);推荐调用函数:envi_pickfile,File_searchFile_basenameFile_dirnameenvi_open_fileEnvi_file_queryEnvi_get_map_infoEnvi_get_dataFloatwindowTvtvsclEnvi_write_envi_fileENVI_FILE_MNG5,读取一幅shapefile矢量文件,据此建立一个ROI(Region of Interest),并把边界点输出为csv格式文件,可以选省界shp(细节我也不清);推荐调用函数:IDLffShapeenvi_pickfile,File_searchFile_basenameFile_dirnameenvi_open_fileENVI_DEFINE_ROIENVI_CREATE_ROIENVI_SAVE_ROISOpenwPrintf,(format参数很关键)Envi_file_queryEnvi_get_map_infoFloatENVI_FILE_MNG6,Envi调用MATLAB神经网络工具箱,进行水质反演(暂时不做);附加学习MATLAB,nntool工具箱7,Envi调用6S 大气纠正程序,对ETM+蓝光波段进行大气纠正;推荐调用函数:SpawnOpenrReadfWhileStrposStrmid其他Envi文件读写常用函数,见前面的练习。
第四章图形显示技术本章概要在学会怎么显示线画图、曲面图和等值线图后,就可以用自己的想象力和创造力来显示数据了。
本章给出了许多特殊的可视化技术以增强数据显示能力。
没有打算描述IDL中每一种可能的技术。
本章将介绍一些更普遍的技术。
本章的目的是为读者提供工具和概念,以便帮助读者创造自己独特的数据显示。
将学到:1.IDL如何运用颜色2.怎样在IDL中创建和保存颜色谱表3.怎样按规范修改坐标轴的注记4.怎样用IDL处理坏的或残缺的数据5.怎样建立三维坐标系并在里面显示数据6.怎样组合简单图形显示7.怎样用动画显示图形8.怎样将XYZ数据格网化以便图形显示IDL的颜色运用IDL的颜色由三种特殊值组成。
称这些数值为一个三色组,将其写成(R,G,B)即红、绿、蓝,其中红、绿、蓝代表红光、绿光、蓝光作用于该显示颜色时的数量,每个值的范围都在0到255之间。
这样,一种颜色可由256级的红色,256级绿色和256级蓝色组成。
这就是说IDL能显示256*256*256,或者说超过167,000,000种颜色。
举例来说,黄色由亮红和亮绿组成,但没有蓝色。
代表黄色的三色组写作(255,255,0)。
过去在IDL里常常用一种索引号通过查表来获得颜色三色值。
现在,由于越来越多地使用24位图形卡,可直接表示三色值。
如果使用索引,所查寻的这个表就被称作颜色转化表(简称为色谱表)。
一个色谱表由三列数组成,一列代表红色值,一列代表绿色值,一列代表蓝色值。
典型地,这些数列被称为矢量。
当用IDL装载色谱表时,所做的就是选择正确的数值放进这些列或矢量之中。
请看这个概念的图解(图40)。
使用索引颜色模式和RGB颜色模式除了了解一个颜色号代表一种颜色的三色值和色谱表被用来决定三色值之外,必须意识到在IDL里有两种颜色模式。
索引颜色模式用于8位显示器,RGB颜色模式用于24位显示器。
(IDL在PC机和Macintosh计算机上同时使用了一种修改过的RGB颜色模式,这两种计算机支持16位颜色)。
IDL函数汇总范文IDL是Interactive Data Language的缩写,是一种用于科学数据分析和可视化的程序设计语言。
它主要用于处理、分析和可视化天文图像、地球物理数据、大气科学数据和其他科学领域的数据。
下面是一些常用的IDL函数的汇总:1.READ_ASCII:读取ASCII文本文件中的数据。
这个函数可以读取和解析包含数字和文本的文件,并将其转换为IDL数组。
2.READ_IMAGE:读取图像文件。
这个函数可以读取常见的图像格式,如JPEG、PNG和TIFF,并将其转换为IDL数组。
3.WRITE_ASCII:将数据写入ASCII文本文件。
这个函数可以将IDL数组中的数据写入到一个ASCII文件中,供其他程序使用。
4.WRITE_IMAGE:将图像写入文件。
这个函数可以将IDL数组中的图像数据保存为常见的图像格式,以便在其他程序中使用。
5.HISTOGRAM:计算数据的直方图。
这个函数可以统计一组数据的分布,并生成直方图。
6.MEAN:计算数据的平均值。
这个函数可以计算一组数据的平均值。
7.MEDIAN:计算数据的中位数。
这个函数可以计算一组数据的中位数,即将数据按升序排列后的中间值。
8.STD_DEV:计算数据的标准差。
这个函数可以计算一组数据的标准差,用于衡量数据的离散程度。
9.MAX:计算数据的最大值。
这个函数可以计算一组数据的最大值。
10.MIN:计算数据的最小值。
这个函数可以计算一组数据的最小值。
11.CORRELATE:计算数据的相关性。
这个函数可以计算两组数据之间的相关性,用于分析它们之间的关系。
12.FIT:拟合数据到一个模型。
这个函数可以根据给定的数据拟合一个数学模型,并找到最佳的拟合参数。
13.INTERPOLATE:插值数据。
这个函数可以根据给定的一组数据点,估计出其他数据点的值。
14.SMOOTH:平滑数据。
这个函数可以对一组数据进行平滑处理,以减少数据中的噪声和波动。
遥感图像处理及ENVIIDL操作实践百度⽂库- 让每个⼈平等地提升⾃我IDL基本操作介绍课题名称:遥感图像处理及ENVIIDL操作实践任课教师:⽬录⼀、IDL简介 (3)1.I DL特殊符号说明 (3)1.1.⼤写 (3)1.2.注释符 (3)1.3.续航符 (3)2.IDL语法基础 (3)1 (3)2. (3)2.1.变量 (3)2.2.数组 (5)3.IDL编程基础 (6)1. (6)2. (6)3. (6)3.1.定义和编译程序 (6)3.2.命名和编译源⽂件 (7)3.3.程序控制语句 (7)⼆、IDL基本操作介绍 (9)1.题⽬及要求 (9)2.解决⽅案 (9)1 (9)2 (9)2.1数据说明 (9)2.2⼆进制⽂件读取 (10)2.3各像元的线性变化趋势及显著性概率计算 (12)2.4有效物候区返青期平均变化趋势统计 (14)2.5制图输出线性变化趋势 (17)三、总结 (26)⼀、IDL简介IDL(Interactive Data Language)交互式数据语⾔是进⾏⼆维及多维数据可视化分析及应⽤开发的理想软件⼯具。
作为⾯向矩阵、语法简单的第四代可视化语⾔,IDL 致⼒于科学数据的可视化和分析,是跨平台应⽤开发的最佳选择。
它集可视、交互分析、⼤型商业开发为⼀体,为⽤户提供了完善、灵活、有效的开发环境。
IDL为⽤户提供了可视化数据分析的解决⽅案,既可以让科学研究⼈员交互式浏览和分析数据,⼜为程序员提供了快速程序原型开发并跨平台发布的⾼级编程⼯具。
IDL使科学家⽆需写⼤量的传统程序就可直接研究数据。
IDL被⼴泛应⽤于地球科学、医学影像、图像处理、软件开发、⼤学教学、实验室研究、测试技术、天⽂、信号处理、防御⼯程、数学分析、统计等诸多领域。
1.IDL特殊符号说明在IDL程序中,当在命令⾏中输⼊命令时,IDL将会识别⼤量的特殊字符。
下⾯介绍⼏种较为重要的特殊符号。
1.1.⼤写IDL 对字母的⼤⼩写并不敏感,但与操作系统打交道的命令(例如:UNIX 操作系统对IDL 所打开的⽂件名的⼤⼩写敏感)和执⾏字符串⽐较命令时除外。
第五章图形显示技巧本章概要在上一章节了学习了一些图形显示技术。
在这一章节将学习几个新的图形显示技巧,以便让图形显示具有专业的感观效果。
具体来说,将学会:1.怎样让鼠标交互作用于图形显示2.怎样从图形显示中删除注释3.怎样在图形显示上画“橡皮条”4.怎样在图形显示技巧中使用Z图形缓冲区将光标用于图形显示数据可视化显示的原因之一是用户可用不同的方式对数据进行交互式的操作。
用户喜欢的一种对数据交互式操作的方式是使用光标去选择或者标注部分数据。
这种交互作用在IDL 中用Cursor命令很容易完成。
用LoadData命令装入Time Series数据集,可看到Cursor命令是如何工作的。
IDL> curve = LoadData (1)输入下述命令,显示曲线:IDL> Window, Xsize = 400, Ysize = 400IDL> LoadCT, 0IDL> TvLCT, 255,255,0,1IDL> Plot, curveCursor命令接受两个参数。
这些参数必须是记录鼠标键按下时光标位置的变量。
Cursor 命令要求光标位于当前图形窗口中。
(即被!D.Window系统变量指向的窗口。
)例如,如果输入这个命令,IDL将会等待光标被移动到当前图形窗口(如果输入的是上述命令,就是0号索引窗口)并单击鼠标键。
当执行上述动作后,IDL将光标位置返回到变量xLocation和yLocation中。
输入:IDL> Cursor, xLocation, yLocation如果打印出这些变量的值,将发现这些值被赋予的是数据坐标空间。
xLocation的数值从0到100,yLocation的数值从0到30。
(如果是在图形边界内点击的鼠标,它们至少是这么多。
如果不是在图形边界内点击的鼠标会怎么样?)缺省时,Cursor命令返回数据坐标位置。
IDL> Print, xLocation, yLocation什么时候返回的光标位置?从上面的命令看,似乎鼠标键被按下时返回光标位置,但并非总是这样。
idl indgen参数IDL(Interface Description Language)是一种用于描述接口的语言,它可以帮助开发人员定义和规范接口的结构和行为。
其中,indgen参数是IDL语言中的一个参数,它在数据处理中起到了重要的作用。
本文将从不同的角度介绍indgen参数的使用和意义。
一、indgen参数的概述indgen参数是IDL语言中的一个函数,它用于生成一个等差数列。
具体而言,它可以根据用户指定的起始值、终止值和步长,生成一个包含这些数值的数组。
这个数组可以用于各种数据处理和分析任务,如图像处理、信号处理、数据建模等。
二、indgen参数的基本用法在IDL语言中,我们可以通过简单的一行代码来调用indgen函数,并设置起始值、终止值和步长。
例如,下面的代码将生成一个从1到10,步长为1的数组:arr = indgen(10)三、indgen参数的高级用法除了基本的用法外,indgen参数还可以通过一些高级技巧来满足更多的需求。
下面列举了一些常见的高级用法:1. 生成递减数列通过设置步长为负数,我们可以生成递减的数列。
例如,下面的代码将生成一个从10到1,步长为-1的数组:arr = indgen(10, 1, -1)2. 生成非整数数列indgen参数默认生成整数数列,但我们也可以通过设置步长为小数来生成非整数数列。
例如,下面的代码将生成一个从0到1,步长为0.1的数组:arr = indgen(0, 1, 0.1)3. 生成多维数组indgen参数不仅可以生成一维数组,还可以生成多维数组。
我们只需要将起始值、终止值和步长设置为相应的数组即可。
例如,下面的代码将生成一个2x3的二维数组:arr = indgen([2, 3])四、indgen参数的应用案例indgen参数在数据处理和分析中有着广泛的应用,下面将介绍一些常见的应用案例:1. 图像处理在图像处理中,我们经常需要生成一个像素坐标矩阵,用于对图像进行操作。
IDL编程实现图像处理pro exampleENVI, /RESTORE_BASE_SAVE_FILESENVI_BATCH_INITtlb=widget_base(column=1,mbar=mbar,title='Example',tlb_frame_attr=1,xoffset=500,yo ffset=100,xsize=800,ysize=600,RESOURCE_NAME = 'example')filemenu=widget_button(mbar,value='File')fileopt1=widget_button(filemenu,value='Open',event_pro='open_event')fileopt2=widget_button(filemenu,value='Save',/menu)Save1= widget_button(fileopt2,value = 'binary',uname = 'savebinary')Save2= widget_button(fileopt2,value = 'jpg',uname = 'savejpg')Save3= widget_button(fileopt2,value = 'bmp',uname = 'savebmp')Save4= widget_button(fileopt2,value = 'tif',uname = 'savetif')Save5= widget_button(fileopt2,value = 'dat',uname = 'savedat')fileopt3=widget_button(filemenu,value='Exit',event_pro='exit_event',/separator)editmenu=widget_button(mbar,value='Edit')processopt1=widget_button(editmenu,value='K-L Transform',event_pro='K_L_event',/separator)processopt2=widget_button(editmenu,value='HistogramEqualization',event_pro='HistogramEqualization_event',/separator)processopt3=widget_button(editmenu,value='NDVI',event_pro='NDVI_event',/separator) processopt5=widget_button(editmenu,value='Image Smoothing',event_pro='IS_event')processopt4=widget_button(editmenu,value='edge enhancement',/menu)imageopt1=widget_button(processopt4,value='robort',event_pro='robort_event') imageopt2=widget_button(processopt4,value='sobel',event_pro='sobel_event') imageopt3=widget_button(processopt4,value='prewitt',event_pro='prewitt_event')helpmenu=widget_button(mbar,value='Help')idlhelp=widget_button(helpmenu,value='IDL help',event_pro='help_event')iconbase=widget_base(tlb,row=1,/frame)subdir='resource/bitmaps'mapfile=filepath('open.bmp',subdir=subdir)iconopt1=widget_button(iconbase,value=mapfile,/bitmap,event_pro='open_event') mapfile=filepath('save.bmp',subdir=subdir)iconopt2=widget_button(iconbase,value=mapfile,/bitmap,event_pro='Save_event') button5=widget_button(iconbase,value='new.bmp',/bitmap,event_pro='new_event') button3=widget_button(iconbase,value='zoom_in.bmp',/bitmap,uvalue='suoxiao') button4=widget_button(iconbase,value='zoom_out.bmp',/bitmap,uvalue='fangda')help = widget_button(iconbase,value = filepath('help.bmp',subdirectory =['resource','bitmaps']),/bitmap,event_pro='help_event')draw=widget_draw(tlb,x_scroll_size=780,y_scroll_size=550,xsize=1000,ysize=1000,xof fset=200,/button_events)file=''data=BYTARR(2,2,2)pdata = bytarr(2,2,2)status=0pstate=ptr_new({draw:draw,file:file,data:ptr_new(data),pdata:ptr_new(pdata)}) widget_control,tlb,set_uvalue=pstatewidget_control,tlb,/realizeXMANAGER, 'example', tlb,/no_blockendpro open_event,eventcompile_opt IDL2envi,/restore_base_save_filesenvi_batch_initwidget_control,event.top,get_uvalue=pstatefilters = ['*.jpg','*.bmp','*.img','*.tif','*.jpeg','*.png']file = DIALOG_PICKFILE(/READ, FILTER = filters)envi_open_file,file,r_fid=fidif fid eq -1then returnenvi_file_query,fid,dims=dims,nb=nb,nl=nl,ns=ns,bnames=bnamespos=indgen(nb)(*pstate).file=filebasename=file_basename(file)f1=strpos(basename,'.')type=strmid(basename,f1+1,strlen(basename)-f1)type=strupcase(type)widget_control,(*pstate).draw,get_value=drawwset,drawCASE TYPE OF'JPEG': BEGINREAD_JPEG,FILE,DATATV,DATA,/TRUE*((*PSTATE).DATA)=DATAEND'PNG' : BEGINREAD_PNG,FILE,DATATV,DATA,/TRUE*((*PSTATE).DATA)=DATAEND'JPG': BEGINREAD_JPEG,FILE,DATATV,DATA,/TRUE*((*PSTATE).DATA)=DATAEND'BMP': BEGINDATA=READ_BMP(FILE)TV,DATA,/TRUE*((*PSTATE).DATA)=DATAEND'DAT': BEGINDATA = BYTARR(NS,NL,NB)OPENR,LUN,FILE,/GET_LUNREADU,LUN,DATATVSCL,DATAFREE_LUN,LUN*((*PSTATE).DATA)=DATAEND'IMG': BEGINdata = bytarr(ns,nl,nb)data= ENVI_GET_DATA(fid=fid, dims=dims, pos=pos) WIDGET_CONTROL,(*pstate).draw, GET_VALUE=drawWSET, drawtvscl,data,/order*((*pstate).data)=dataEND'TIF': BEGINDATA=BYTARR(NS,NL,NB)DATA= ENVI_GET_DATA(FID=FID, DIMS=DIMS, POS=POS)TVSCL,DATA,/ORDER*((*PSTATE).DATA)=DATAEND'TIFF': BEGINDATA=BYTARR(NS,NL,NB)DATA= ENVI_GET_DATA(FID=FID, DIMS=DIMS, POS=POS)TVSCL,DATA,/ORDER*((*PSTATE).DATA)=DATAENDENDCASEendpro save_event,eventwidget_control,event.top,get_uvalue=pstatefile=(*pstate).filesavefile= dialog_pickfile(title='save',path = 'D:')if savefile eq''then beginvoid = dialog_message('No file!',/error)returnendifa=strpos(savefile, '.')b=strlen(savefile)type = strmid(savefile,a+1, b-a)case type of'save':beginfile=(*pstate).fnameENVI_OPEN_FILE,file,r_fid=fidif fid eq -1then beginvoid=DIALOG_MESSAGE('file inputed error',/information)ENVI_BATCH_EXITreturnendiffilename=DIALOG_PICKFILE(title='choose file saved position',filter='*.jpg')write_jpeg, filename+'.jpg', *((*pstate).data), /true end'jpg' : beginwrite_JPEG,savefile,dataend'png' : beginwrite_png,savefile,dataend'bmp' : beginwrite_bmp,savefile,dataend'tif': beginwrite_tiff,savefile,dataend'dat': beginopenw,lun,binary,/get_lunwriteu,savefile,dataendendcasehelp, event, /structIF event.SELECT THEN WIDGET_CONTROL, event.TOP, /DESTROYendpro help_event,evevtcompile_opt IDL2envi,/restore_base_save_filesenvi_batch_initONLINE_HELPENDpro exit_event, eventhelp, event, /structIF event.SELECT THEN WIDGET_CONTROL, event.TOP, /DESTROYendpro K_L_event,eventcompile_opt IDL2envi,/restore_base_save_filesenvi_batch_initwidget_control,event.top,get_uvalue=pstatefile=(*pstate).fileenvi_open_file,file,r_fid=fidif fid eq -1then beginreturnendifenvi_file_query,fid,dims=dims,nb=nbpos=lindgen(nb)envi_doit,'envi_stats_doit',fid=fid,pos=pos,dims=dims,mean=avg,eval=eval,evec=evec ,comp_flag=5envi_doit,'pc_rotate',$fid=fid,pos=pos,dims=dims,mean=avg,eval=eval,evec=evec,$out_dt=4,out_name=out_name,out_nb=nb,r_fid=r_fid,/forward,/in_memoryenvi_file_query,r_fid,dims=dims,nb=nb,ns=ns,nl=nldata =bytarr(ns,nl,nb)data= envi_get_data(fid=fid,dims=dims,pos=pos)window,1,xsize=ns,ysize=nl,title='spatial principal component analysis'tv,data,/orderendpro ndvi_event,eventcompile_opt IDL2envi,/restore_base_save_filesenvi_batch_initwidget_control,event.top,get_uvalue=pstatefile=(*pstate).filedata=*((*pstate).data)envi_open_file,file,r_fid = fidenvi_file_query, fid, dims=dims,nb=nb,ns=ns,nl=nlpos = [4,3] - 1envi_doit,'ndvi_doit',fid=fid, pos=pos, dims=dims,/check, o_min=0, o_max=255,r_fid=r_fid,/inme_moryenvi_file_query,r_fid,dims = dims,nb = nb,ns=ns,nl=nldata = BYTARR(ns,nl,nb)data= ENVI_GET_DATA(fid=r_fid, dims=dims, pos=pos)window,3,title='NDVI'TVSCL,data,/orderendpro HistogramEqualization_event,eventwidget_control,event.top,get_uvalue=pstatedata=*((*pstate).data)file=(*pstate).fileenvi_open_file,file,r_fid=fidenvi_file_query,fid,dims=dims,nb=nb,ns=ns,nl=nlWINDOW, 1, TITLE = 'The original image histogram'plot,HISTOGRAM(data)result =HIST_EQUAL(data); ADAPT_WINDOW, 2,xsize = ns,ysize = nl,TITLE = 'histogram matching'TV, result,/orderWINDOW, 3, TITLE = 'After the image histogram matching'plot,HISTOGRAM(result)endpro IS_event,eventwidget_control,event.top,get_uvalue=pstatefile=(*pstate).fileenvi_open_file,file,r_fid=fidenvi_file_query,fid,dims=dims,nb=nb,ns=ns,nl=nlif fid eq -1then returndata=smooth(*((*pstate).data),3)window,1,xsize=ns,ysize=nl,title='smoothing'tvscl,data,/orderendpro robort_event,eventwidget_control,event.top,get_uvalue=pstatedata=*((*pstate).data)file=(*pstate).fileenvi_open_file,file,r_fid=fidenvi_file_query,fid,dims=dims,nb=nb,ns=ns,nl=nlDATA=DATA(*,*,1)DATA=ROBERTS(DATA)window,1,xsize=ns,ysize=nl,title='roberts'tvscl,data,/orderendpro sobel_event,eventwidget_control,event.top,get_uvalue=pstateDATA=*((*PSTATE).DATA)file=(*pstate).fileenvi_open_file,file,r_fid=fidenvi_file_query,fid,dims=dims,nb=nb,ns=ns,nl=nlDATA=DATA(*,*,1)DATA= SOBEL(DATA)window,1,xsize = ns,ysize = nl,title='sobel' TVSCL,data,/ORDERendpro prewitt_event,eventfile=(*pstate).fileENVI_OPEN_FILE,file,r_fid=fidENVI_FILE_QUERY,fid,dims = dims,nb = nb,ns=ns,nl=nl IF fid EQ -1THEN BEGINvoid=DIALOG_MESSAGE('window',/information)ENVI_BATCH_EXITRETURNendifresult=prewitt(*((*pstate).data))window,1,xsize = ns,ysize = nl,title='window' TVSCL,result,/order*((*pstate).pdata) = resultWIDGET_CONTROL,ev.top,get_Uvalue = pstate end。