【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
 

  ;获取当前图像对象的X、Y方向的范围

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

  ;求出归一化系数

  xr = NORM_COORD(xRange)

  yr = NORM_COORD(yRange)

 

  ;xr和yr 解析: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   

  ;获取当前图像对象的X、Y方向的范围

 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、 不同坐标系统下的图像正确显示

 

posted @   地理遥感生态网平台  阅读(20)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示