|||
分析:做一个假设,假设两幅图的地理坐标范围一致,图像分辨率不一致,图像的像素尺寸也不一致,那么显示的时候就不能以图像的像素尺寸为准了,需要考虑图像的地理坐标范围。这也是正确的显示多幅带地理坐标的图像所要考虑的内容。
解决:问题归结到显示坐标系上,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、 不同坐标系统下的图像正确显示;
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-12-22 15:11
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社