idl高级培训基础篇内容摘要:
数据, r、 g、 b值被忽略 ok=query_png(filename ,s): 获取 PNG文件的属性。 其中: ok=0, 不是合法的 PNG文件。 s为一个结构,包含 PNG文件的属性。 若 =1, 为单通道数据,否则为多通道数据。 image=read_png(filename [,r,g,b]): 读出 PNG文件的数据 其中: r,g,b对 单通道数据,读出调色板 ,否则忽略。 常见用法: write_png ,filename ,tvrd(true=1) ( 作为 3通道数据写入) ok=query_png(filename ,s) . . image=read_png(filename) tv image ,/true 直接图形篇 - 图像处理 图像: 任何一个二维数组都可以视为一幅图像。 8位图像: 总表示为一个二维数组。 24位( 真彩色 )图像: 总表示为一个 3维数组,其中一维为 3。 m*n*3: 隔波段扫描 ( bandinterleaved , true=3) m*3*n: 隔行扫描( rowinterleaved , true=2) 3*m*n: 隔象素扫描( pixelinterleaved, true=1) 在 8位显示设备上,所有数据要转换位字节类型;在 24位显示设备上, 24位图像的 r、 g、 b值必须转换位字节类型。 直接图形篇 - 图像处理 1. 基本操作 显示: tv和 tvscl。 两个命令几乎一样,包括可以使用的关键字。 都不删除当前窗口的内容。 tvscl: 将图像数据调整为与运行时刻所有可用颜色数目相同的字节数据。 通常用于 8位图像 tv: 取图像数据本身,作为字节数据显示。 如果图像数据以整形和更多位数表示,则被截断以适合字节类型。 因此,图形可能会显示不正确。 在 24位设备上显示图像一般方法: device ,deposed=0 [loadct ,ct] tv/ tvscl ,image( 8位图像) tv ,image ,true=1|2|3( 24位图像 )) 直接图形篇 - 图像处理 2. 调整数据为字节类型并可以使用统一的颜色集 bytscl(image ,min= ,max= ,top=) 如: scaleImage=bytscl(image ,min=5 ,max=30) 3. 改变图像尺寸 IDL提供了两个改变图像大小的命令: rebin和 congrid rebin: 新建的图象的大小必须是原始尺寸的整数比例。 缺省放大时采用双线性插值,缩小时采用邻近平均法。 sample关键字指定最近邻近采样法。 congrid: 新建的图象的大小可以是原始尺寸的任意比例。 缺省对三维以下数据采用最近邻近采样法,三维采用线性插值法。 interp关键字指定线性插值法 4. 在窗口中定位图像 (1) tv ,image ,index: 根据图像尺寸,从窗口左上角开始计算位置,逐行至右下角。 (2) tv ,image ,x ,y: 指定左下角开始计算的坐标( devic|data|normal)。 利用 ! !( 象素值)计算归一化坐标以确定图像位置和大小。 5. 从窗口中读取图像 8位显示: image=tvrd() 24位显示: image=tvrd(true=1) tvrd命令支持读取指定区域的图像 直接图形篇 - 图像处理 6. 基本图像处理 上图: 原始图 中图: hist_equal函数 下图: adapt_hist_equal函数 直方图均衡化: 观察图像中的象素值分布,往往会发现象素值分布趋于一个较狭窄的数值范围内。 如果将象素值分散开,使象素值得每个子范围都有与这些象素值大约相同的象素,则该图像的信息内容有可能增加。 将象素分布道整个颜色范围的过程称为直方图均衡化。 直接图形篇 - 图像处理 负片: 将原始图像的显示色板翻转,象素的字节值不变所得到的图像。 直接图形篇 - 图像处理 消除噪声: 噪声来自多方面,影响对图像质量。 噪声的一般表现形式是随机的具有极端值的象素(黑白噪声)。 median: 计算相邻象素的中间值。 这样既可以消除极端值,又不会使大于邻域的部分图像边缘或特征模糊。 平滑: 通过将每个象素值与它周围相邻象素值进行平均来平滑图像。 称为均值或核状平滑。 smooth: 在给定的奇数宽度的范围内通过等加权值实现平滑。 convol: 使用给定的方形滤波核通过卷积实现平滑。 晕光蒙片: 将原始图像减去平滑后的图像。 可以定位图像上的边缘或象素值突然变化的地方 直接图形篇 - 图像处理 上图: smooth, w=5 中图: smooth, w=3 下图: convol, k=1,2,1 2,8,2 1,2,1 边缘增强: 通过锐化或微分以增强边缘。 roberts: sobel: convol: 使用给定的方形滤波核通过卷积实现。 直接图形篇 - 图像处理 右图: 原始图像 下图: 自左至右依次为 roberts、 sobel、 convol 直接图形篇 - 图像处理 7. 频域滤波 频域滤波是图像 和信号处理的常规手段。 可以用于平滑图像、锐化图像、降低图像的模糊程度和恢复图像。 基本步骤: ( 1)用快速傅立叶变换( FFT) 将图像从空间域转换为频率域 ( 2)将转换后的图像与一个频率滤波器相乘 ( 3)将滤波后的图像逆变换转换为空间域 方法: filtered_img=fft( fft(img,1)*filter ,1) img可以是一维矢量,也可以是二维图像 filter为滤波器,用于滤波图像中某些特定频率的一维矢量和二维数组。 创建滤波器: 欧氏距离图(频率图像): r=dist(n [,m]), n和 m与实际图像相同 Butterworth频率滤波器: 低通滤波: filter=1/[1+c*(r/r0)2n] 高通滤波: filter=1/[1+c*(r0/r)2n] 其中: c= ( 即当 r=r0时,滤波幅度为 1/sqrt(2)) r0为滤波器截止频率(实际中使用象素宽度) n为滤波器阶数,通常 n=1 通常,低频项代表图像的一般形状,高频项对应图像的细节 直接图形篇 - 图像处理 东海海表面温度图 NOAA12 20:40 左图: 原始图 中图: 低通( w=10) 右图: 高通( w=10) 直接图形篇 - 图形窗口输出 IDL支持多种设备输出,并可以简单地在设备之间切换。 set_plot ,’option’: option=win|ps|printer, 大小写不敏感。 !: 当前设备名。 一般用法: cDevName=! set_plot ,‘printer’ help ,/device set_plot ,cDevName 常用关键字: close_document: 刷新输出缓冲区后关闭图形文档,用于从打印机排出打印页。 close_file: 刷新输出缓冲区后关闭图形输出文件。 Filename: 当输出为文件时地文件名,默认 ‘ ’ landscape: 横向输出 portrait: 纵向输出,缺省值 xoffset: 确定纵向模式下输出窗口左下角(横向模式下 ps和 printer算法不同) yoffset: 确定纵向模式下输出窗口左下角(横向模式下 ps和 printer算法不同) xsize: 确定输出窗口宽度 ysize : 确定输出窗口长度 inches: 以英寸为单位,缺省为厘米 直接图形篇 - 图形窗口输出 ps 输出的一般方法: img=tvrd(true=1) set_plot ,‘ps’ device, filename=‘ .ps’ ,color=1 device ,xsize= ,ysize= ,xoffset= ,yoffset= tvscl, img ,/true device, /close_file set_plot ,‘win’ printer输出的一般方法: ok=dialog_printersetup() img=tvrd(true=1) ratio=float(!)/! ( printer设备不能自动保持纵横比) set_plot,39。 printer39。 device,get_page_size=spagesize spagesize=spagesize/[!,!] device ,xoffset= ,yoffset= tvscl ,img ,/true ,/centimeters ,xsize= ,ysize= *ratio device ,/close_document set_plot ,’win’ IDL 高级培训 应用程序构造篇 编程篇 - 建立、管理应用程序 IDL有两种应用程序管理方法: 主程序 和 工程 主程序: 建立与程序名同名的 .pro文件,编译执行。 pro test … end 在这种方式下,根据 IDL的自动编译规则,所有被调用的子程序 或者 与主程序写入同一个文件并放置在主程序的上部; 或者 写成与子程序同名的 .pro文件,存储在可搜索的路径下。 ( 子程序指过程或函数 ) 工程: 建立若干个 .pro文件,每个文件不必与任何子程序同名。 指定其中一个过程为主程序,该过程的名字作为工程执行时首先调用的过程(即 run mand)。 在这种方式下,由于程序编写未必遵守 IDL的自动编译规则,因此在运行前必须编译工程中所有的文件。 分发: 将源程序编译为 .sav文件。 • 主程序方式,需手工编译、存储为 .sav文件 .pile app_pro resolve_all save, /routines, app_pro ,app_sav • 工程方式,设置工程属性为形成 .sav文件,使用工程菜单项下的 build选项即可。 编程篇 - 应用程序结构 XManger Widget Creation Routine (TLB) call xmanager Event Handler Calling Routine Event structure Only if TLB is destoryed 主程序 调用相关子程序 编程篇 - 主程序结构 主程序的一般结构: pro app_pro pile_opt idl2 create top layout base(TLB) create gui base on TLB (initial application) realize TLB collect user information call xmanager [,/NO_BLOCK] end initial application 该过程可以在主程序里进行。 但更好的办法是编写单独的过程,用 TLB的notify_realize关键字指定过程名,当 realize TLB时执行。 /NO_BLOCK。idl高级培训基础篇
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。
用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。