热门标签 | HotTags
当前位置:  开发笔记 > 程序员 > 正文

【IDL代码库】IDL中显示分类图像的方法

IDL作为第四代可视化语言,具有强大的可视化能力。根据方法的不同,可以分为四类可视化手段,分别为快速可视化(IDL8.0版本开始提供)、直接图形法、对象图形法和智能化编程工具。这里

IDL作为第四代可视化语言,具有强大的可视化能力。根据方法的不同,可以分为四类可视化手段,分别为快速可视化(IDL 8.0版本开始提供)、直接图形法、对象图形法和智能化编程工具。

这里以显示分类结果图像为例,展示IDL的可视化能力。大体思路是获取分类数据(二维数组)、获取颜色表(lookup),然后利用IDL提供的可视化函数进行展示。

注:分类结果为ENVI标准格式。

快速可视化中,用到了如下两个函数:



  • Image —— 显示图像

  • Colorbar —— 显示颜色条

直接图形法中,用到的函数或过程较多,如下:



  • Window —— 过程,新建绘图窗口

  • Loadct —— 加载颜色表

  • Modifyct —— 自定义颜色表

  • TV —— 绘制图像

  • Xyouts —— 标注类名

对象图形法中,用到了如下对象:



  • IDLgrWindow —— 绘图窗口

  • IDLgrView —— 视图对象,用来加载图像和颜色条

  • IDLgrModel —— 容器

  • IDLgrImage —— 图像对象,显示分类结果

  • IDLgrColorbar —— 颜色条对象

  • IDLgrPalette —— 颜色表对象

  • IDLgrFont —— 字体对象,修改颜色表标注字体

从上述说明中,也可看出,在实现相同可视化效果的前提下,快速可视化是最简单、最快捷的方法。

下面欣赏可视化效果。

 

图:快速可视化

 

图:直接图形法

 

图:对象图形法

附源代码如下,可直接运行,在弹出的对话框中选择分类结果图像即可。








;+

; :DESCRIPTION:

 Display Classification Image in IDL

 Three Methods:Quick Graphics/Direct Graphics/Object Graphics

;

; :AUTHOR: duhj@esrichina.com.cn

;

; :Date: 2014-7-10

;-

PRO DisplayClassificationImage

 ;启动ENVI批处理

 COMPILE_OPT idl2

 ENVI, /RESTORE_BASE_SAVE_FILES

 ENVI_BATCH_INIT

 ;选择文件,如果不存在则返回

  file = ENVI_PICKFILE(TITLE='Select the classification image')

 IF ~FILE_TEST(file) THEN RETURN

 ;打开文件,判断如果不是分类结果,则返回

 ENVI_OPEN_FILE, file, r_fid=fid

 ENVI_FILE_QUERY, fid, nb=nb, ns=ns, nl=nl,$

   dims=dims, file_type=ft, lookup=lookup, $

   class_names = classNames, NUM_CLASSES = n_classes

 IF fid[0EQ -1 THEN RETURN

 

 ;如果不是分类图像,则返回

 IF ft NE 3 THEN RETURN

 ;获取数据

  data = ENVI_GET_DATA(fid=fid, dims=dims, pos=0)

 

 ;判断如果IDL版本是否低于8.0,如果低于8.0则只用直接图形法

 IF !version.RELEASE LT 8.0 THEN GOTO, jump

 ;******************快速可视化*************************************

 ;显示图像

 IF n_classes EQ 3 THEN rgb_table=TRANSPOSE(lookup,[1,0]) $

 ELSE rgb_table = lookup

  i = image(data, /order, rgb_table=lookup, $

   MARGIN=[.1,.1,.3,.1], window_title = 'Quick Graphics')

  iPos = (i.POSITION)[1]

  c = colorbar(target=i, tickname=classNames,      $

   font_name='Microsoft Yahei', font_size=12    $

   position = [.75,iPos,.80,iPos+.065*n_classes], $

   ORIENTATION=1                                $

   TEXTPOS=1, RGB_TABLE=RGB_TABLE)

 

 jump:

 ;******************直接图形法*************************************

 ;直接图形法需要修改颜色表

 DEVICE, DECOMPOSED=0

 

 ;将图像重采样至400列

  new_ns = 400

  new_nl = nl*400/ns

 window,0,XSIZE=new_ns+300, YSIZE=new_nl+100, $

   title = 'Direct Graphics'

 ;背景色为白色

 loadct0

 ERASE,255

 ;自定义颜色表

 loadct, get_names=TableNames

 n_ColorTable = N_ELEMENTS(TableNames)

 MODIFYCT74, 'New ColorTable', $

   lookup[0,*],lookup[1,*],lookup[2,*]

 loadct74

 ;加载显示图像

 TVcongrid(data,new_ns,new_nl), 50,50, /ORDER

 ;绘制颜色条

 colorbarData = REBIN(INDGEN(1,n_classes),30,30*n_classes)

 TV, colorbarData, new_ns+10050

 loadct0

 ;绘制颜色条阴影

  tmpData = REBIN(INTARR(1,n_classes)+180,2,30*n_classes)

 TV, tmpData, new_ns+13050

 ;绘制类名

 !p.FONT = 0

 DEVICE, SET_FOnT='Microsoft Yahei*22'

  LabelX = INTARR(n_classes)+new_ns+140

  LabelY = 58+INDGEN(n_classes)*30

 XYOUTS,LabelX, LabelY, classNames, color=0, $

   /device

 

 ;******************对象图形法*************************************

 ;窗口

  new_nl = 400

  new_ns = ns*new_nl/nl

 ;对象图形法窗口

  oWin = IDLGRWINDOW(DIMENSIOnS=[new_ns+250,new_nl+100], $

   RETAIN=2, TITLE='Object Graphics')

 ;图像和颜色条的IDLgrView

 oViewImage = IDLGRVIEW(DIMENSIOnS=[new_ns,new_nl],     $

   VIEWPLANE_RECT=[0,0,ns,nl], LOCATION=[50,50])

 ;容器IDLgrModel

  oModel = IDLGRMODEL()

 ;图像对象IDLgrImage

  oImage = IDLGRIMAGE(ROTATE(data, 7))

 ;颜色表

  oPalette = IDLGRPALETTE(lookup[0,*],lookup[1,*],lookup[2,*])

 oImage.SetProperty, PALETTE=oPalette

 ;显示图像

 oViewImage.Add, oModel

 oModel.Add, oImage

 oWin.Erase

 ;初始化颜色条

  oColorbar = IDLgrColorbar(lookup[0,*],lookup[1,*],lookup[2,*], $

   MAJOR=6, SHOW_AXIS=2, TICKLEN=0, $

   TICKVALUES=INDGEN(n_classes)+0.5)

 ;字体

  oFOnt= IDLGRFONT('Microsoft Yahei', SIZE=12)

  ticktext = IDLGRTEXT(classNames, FOnT=oFont)

 oColorbar.SetProperty, ticktext = ticktext, $

   DIMENSIOnS=[30,30*n_classes], $

   show_outline = 1

 

 ;颜色条容器 IDLgrView

 oViewColorbar = IDLGRVIEW(LOCATION=[new_ns+100,50], $

   DIMENSIOnS=[200,new_nl], VIEWPLANE_RECT=[0,0,200,new_nl])

 oModelColorbar = IDLGRMODEL()

 oViewColorbar.Add, oModelColorbar

 oModelColorbar.Add, oColorbar

 ;显示图像和颜色条

  oScene = IDLGRSCENE()

 oScene.Add, oViewImage

 oScene.Add, oViewColorbar

 ;绘制图像和颜色条

 oWin.Draw, oScene

 END


 



推荐阅读
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • Søren Kierkegaard famously stated that life can only be understood in retrospect but must be lived moving forward. This perspective delves into the intricate relationship between our lived experiences and our reflections on them. ... [详细]
  • 本文详细介绍了如何使用PHP检测AJAX请求,通过分析预定义服务器变量来判断请求是否来自XMLHttpRequest。此方法简单实用,适用于各种Web开发场景。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • C++实现经典排序算法
    本文详细介绍了七种经典的排序算法及其性能分析。每种算法的平均、最坏和最好情况的时间复杂度、辅助空间需求以及稳定性都被列出,帮助读者全面了解这些排序方法的特点。 ... [详细]
  • 本文详细探讨了Java中的24种设计模式及其应用,并介绍了七大面向对象设计原则。通过创建型、结构型和行为型模式的分类,帮助开发者更好地理解和应用这些模式,提升代码质量和可维护性。 ... [详细]
  • 如何查找和管理计算机中的C盘临时文件
    本文详细介绍了如何在计算机中找到和管理C盘的临时文件,包括其具体路径、环境变量设置方法以及清理这些文件对系统性能的影响。对于希望优化系统性能和释放磁盘空间的用户来说,这是一篇非常有价值的参考。 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • c# – UWP:BrightnessOverride StartOverride逻辑 ... [详细]
  • 解决Linux系统中pygraphviz安装问题
    本文探讨了在Linux环境下安装pygraphviz时遇到的常见问题,并提供了详细的解决方案和最佳实践。 ... [详细]
  • 数据库内核开发入门 | 搭建研发环境的初步指南
    本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
  • 本文详细介绍了如何使用 Yii2 的 GridView 组件在列表页面实现数据的直接编辑功能。通过具体的代码示例和步骤,帮助开发者快速掌握这一实用技巧。 ... [详细]
  • 深入探讨双臂机器人运动学与D-H建模在ROS系统MoveIt中的应用
    本文详细介绍了如何利用ROS系统MoveIt进行双臂机器人的运动学分析和D-H建模,涵盖刚体位姿描述、正逆运动学求解以及具体的D-H参数计算方法。 ... [详细]
author-avatar
mobiledu2502902037
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有