LearningENVI&IDL分享 http://blog.sciencenet.cn/u/dongyanqing Learning ENVI&IDL

博文

IDL下同时显示不同分辨率图像的方式

已有 6808 次阅读 2011-11-16 22:49 |个人分类:IDL技术|系统分类:科研笔记| 坐标系, IDL, 对象图形法, 图像叠加, 不同分辨率

    问题出发点:两个图像分辨率不一致的时候,如何正确的同时进行显示呢。

分析:做一个假设,假设两幅图的地理坐标范围一致,图像分辨率不一致,图像的像素尺寸也不一致,那么显示的时候就不能以图像的像素尺寸为准了,需要考虑图像的地理坐标范围。这也是正确的显示多幅带地理坐标的图像所要考虑的内容。

解决:问题归结到显示坐标系上,IDL中的坐标系分图像坐标系、归一化坐标系、数据坐标系三种。如果需要两幅图正确的显示在一起,那么需要统一到同一坐标系下。

下面以显示IDL自带的两个图像文件(全球范围)为例,分别按原始图像坐标(显示不匹配)、特定数据范围坐标(显示匹配)和归一化坐标(显示匹配)进行了显示。示例代码:


 

PRO TEST_DPIO

  ;

  oWindow = OBJ_NEW('IDLgrWindow', $

    retain =2, $

    title ='原始图像坐标显示',$

    DIMENSIONS = [1024,512])

   

  ; 设置显示区域坐标为归一化坐标

  oView = OBJ_NEW('IDLgrView', viewPlane_Rect = [0,0,1,1])

 

  imageModel1 = OBJ_NEW('IDLgrModel')

  imageModel2= OBJ_NEW('IDLgrModel')

  oTopModel= OBJ_NEW('IDLgrModel')

  oTopModel->ADD,[imageModel1,imageModel2]

  ;     对象显示体系结构示意图

  ;          oView

  ;            |

  ;       oTopModel

  ;          / 

  ;         /    

  ;    imaeModel1 imageModel2

  oView->ADD,oTopModel

 

  ;读取图像文件数据

  file1 = filepath( 'day.jpg', SUBDIRECTORY=['examples','data'] )

  read_jpeg,file1,data1

  ;图像大小

  help,data1

  file2 = filepath( 'avhrr.png', SUBDIRECTORY=['examples','data'] )

  data2 = READ_PNG(file2,r,g,b)

  ;图像大小

  help,data2

  ;创建图像对象

  oImage1 = OBJ_NEW('IDLgrImage', $

    data1)

  imageModel1->ADD,oImage1

 

  ;创建颜色表对象

  oPalette = OBJ_NEW('IDLgrPalette',r,g,b)

  ;创建图像对象

  oImage2 = OBJ_NEW('IDLgrImage', $

    PALETTE  = oPalette,$

    data2)

  imageModel2->ADD,oImage2

 

  ;图像坐标显示

  oView->SETPROPERTY, viewPlane_Rect = [0,0,1024,512]

  ;闪烁显示

  FOR i=0,6 DO BEGIN

    wait,0.5

    oImage2->SETPROPERTY,hide =(i MOD 2)

    oWindow->DRAW,oView

  ENDFOR

  ;

  ;方法1 -----设置image2的显示范围为image1的范围

  ;如显示地理坐标数据一般采取此方法

  ;

  oView->SETPROPERTY,viewPlane_Rect  = [-100,-50,1224,612]

  oWindow->SETPROPERTY,title ='特定坐标范围显示'

  queryStatus = QUERY_IMAGE(file1, imageInfo)

  oImage2->SETPROPERTY,dimension = imageInfo.DIMENSIONS

  ;闪烁显示

  FOR i=0,6 DO BEGIN

    wait,0.5

    oImage2->SETPROPERTY,hide =(i MOD 2)

    oWindow->DRAW,oView

  ENDFOR

  ;

  ;

  ;方法2 -----两个图像不管大小,全部均一化显示

  ;

  Obj_Destroy,oImage2

  ;创建图像对象

  oImage2 = OBJ_NEW('IDLgrImage', $

    PALETTE  = oPalette,$

    data2)

  imageModel2->ADD,oImage2

 

 

  ;获取当前图像对象的XY方向的范围

  oImage1->GETPROPERTY, xRange = xRange,yRange = yRange

  ;求出归一化系数

  xr = NORM_COORD(xRange)

  yr = NORM_COORD(yRange)

 

  ;xryr 解析:xrange =[0,360],xr是两个参数,[-0.00000000 ,0.0027777778],通过设置该参数,

  ;那么转换后x方向的原数据坐标为xr[0]+xr[1]*xrange[0]= -0+0.002777*0 = 0

  ;                           xr[0]+xr[1]*xRange[1]= -0+0.002777*360 =1

  ; 可测试 Norm_Coord([-100,100]) =      [0.500000 ,  0.00500000]

  ;

 

  ;归一化坐标显示

  oImage1->SETPROPERTY, xCoord_conv = xr, $

    yCoord_conv = yr

   

  ;获取当前图像对象的XY方向的范围

  oImage2->GETPROPERTY, xRange = xRange,yRange = yRange

  ;求出归一化系数

  xr = NORM_COORD(xRange)

  yr = NORM_COORD(yRange)

  ;归一化坐标显示

  oImage2->SETPROPERTY, xCoord_conv = xr, $

    yCoord_conv = yr

   

  oView->SETPROPERTY,viewPlane_Rect  = [0,0,1,1]

  oWindow->SETPROPERTY,title ='归一化坐标显示'

  ;闪烁显示

  FOR i=0,6 DO BEGIN

    wait,0.5

    oImage2->SETPROPERTY,hide =(i MOD 2)

    oWindow->DRAW,oView

  ENDFOR

END

代码中的知识点:

1、 对象图形法显示图像的方式;

2、 对象图形法显示自带颜色表的png图像文件方式(IDLgrPalette对象);

3、 不同坐标系统下的图像正确显示;




https://blog.sciencenet.cn/blog-344887-508739.html

上一篇:“对COM组件的调用返回了错误HRESULT E_FAIL”的错误分析
下一篇:获取n*n数组的对角线元素的方法
收藏 IP: 121.18.236.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-12-22 15:11

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部