基于Android平台和GDAL的遥感影像加载方法
2014-01-02阳德志
阳德志 ,林 辉 ,臧 卓
(中南林业科技大学 a.林业遥感信息工程研究中心;b.计算机与信息工程学院,湖南 长沙 410004)
基于Android平台和GDAL的遥感影像加载方法
阳德志a,b,林 辉a,b,臧 卓a
(中南林业科技大学 a.林业遥感信息工程研究中心;b.计算机与信息工程学院,湖南 长沙 410004)
使用GDAL在Android系统上浏览GB级的遥感影像,由于内存限制,通常比较困难,甚至难以实现。采用tif影像、0~1灰度影像和多波段的彩色影像,通过比较其加载方法的内存消耗、初次加载时间、最长加载时间、最短加载时间、平均加载时间和稳定性,研究最佳影像加载方法。实验结果表明:整块加载tif影像消耗内存最大,加载时间最长,稳定性最差;分块加载tif影像,浏览0~1灰度影像的内存消耗、加载时间能满足实际需求,但浏览多波段彩色影像的性能难以达到实际要求;分块加载jpg型压缩影像,平均消耗33 MB的内存和1 600 ms的加载时间,加载速度最快,消耗内存最小,能满足野外工作的要求。
遥感影像;移动GIS; Android平台;GDAL;分块加载
在计算机上浏览遥感影像,最常用的技术有传统的缓存技术、金字塔模型和瓦片金字塔拼图[1-4],基于这些技术实现的GIS开发平台有ArcGIS、SuperMap和 UCMap等,它们都提供了对本地遥感影像的支持。但是,这些平台收费较高,使用成本也高;基于这些平台做二次开发,不开源的特征导致项目功能扩展受到限制。免费、开源的GIS开发平台,是推动国内林业信息产业发展的一大热点[5-6]。
当前Android移动设备的硬件可达到四核1.9 GHz处理器、2 GB内存,并且Google规定Android设备上的单个应用可使用的内存最大为16 MB,生产厂商更改rom定制应用的内存上限为16~64 MB[7-9];遥感影像结构复杂,存储内容多,占用空间大,加载速度慢[10-11];使用GDAL开发的软件有GeoServer、Google Earth、GRASS GIS、MapServer、GeoTools、Virtual Terrain Project等[12-14]。基于上述3点,提出了在Android平台上显示影像的思想:借助GDAL开源库和计算机图像显示的原理,以重采样的方式从遥感影像中读取当前在屏幕上显示所需的影像区域,生成已缓存的位图对象,再在屏幕上显示。本文使用整块加载tif影像、分块加载tif影像、分块加载jpg压缩影像的方法,实现在野外辅助定位中浏览遥感影像的功能。
1 材料与方法
1.1 材 料
本次实验使用的Android移动设备为Samsung GT-N5100,操作系统:Android 4.1,处理器:四核1.6 GHz,屏幕尺寸:8寸,显示分辨率:1 280×800,内存:1 831 MB。使用的0~1灰度影像是四川省老翁镇,大小395 MB,尺寸17 281×23 753,TIF格式;多波段彩色影像是湖南郴州市,大小1.08 GB,尺寸19 542×19 938,tif格式。两幅遥感影像的原图如图1所示。
1.2 加载方法
图1 灰度影像(左图)和彩色影像(右图)Fig.1 Used gray image (left) and color image (right)
基于Android平台和GDAL开源库,使用整块加载tif影像、分块加载tif影像和jpg型压缩影像的方法,实现在Android移动设备上浏览遥感影像。在实现加载方法中使用“双缓存”技术,即当程序需要在指定View上进行绘制时,程序并不直接绘制到该View组件上,而是先绘制到内存中的Bitmap图片上,等到内存中的Bitmap绘制好后,再一次性地将Bitmap绘制到View组件上[15]。
1.2.1 整块加载tif影像
在Android移动设备上以整块加载的方式浏览遥感影像的原理如图2所示,先获得影像的属性信息,确定影像显示区域的中心点坐标,区域的大小为移动设备屏幕大小与当前显示比的乘积,利用GDAL读取栅格块的功能读取这一区域内的波段信息,映射成显示区域的大小,通过RGB三色原理将信息转换成颜色值,再创建 Bitmap位图对象,使用Android的图像功能显示影像。
遥感影像的属性信息都集中在Dataset数据集中,包括Driver驱动信息、GCP地面控制点信息、Projection投影信息、Band波段信息、映射的地理空间范围、图像的宽度和高度[12]。注册GDAL组件、打开影像、从Dataset对象中获取属性信息的方法如表1所示。
图2 整块加载Tif影像的原理Fig.2 Principle of whole block loading Tif image
表1 GDAL读取影像属性信息的函数Table 1 GDAL’s function of reading image attribute information
读取tif影像中自带的属性信息时,必须先注册GDAL组件,实现对影像格式的支持;以gdalconst. GA_Update更新或GA_Readonly只读方式打开影像获得数据集Dataset对象。在仿射变换系数coef中,(coef[0], coef[3])表示影像左上角地理坐标,coef[1]和coef[5]分别表示影像上像素点的宽度和高度,coef[2]和coef[4]分别表示影像在X轴和Y轴方向的偏移量。若影像格式不支持投影坐标的转换等错误,则返回默认变换值(0,1,0,0,0,1)。影像上像素点(Xi,Yi)与对应投影坐标系 (Xp,Yp)的转换关系如式(1)所示,反向转换关系如式(2)所示。
读取遥感影像时,应先确定显示区域中心点的图像坐标和宽高,再使用Dataset.ReadRaster(xoff,yoff,xsize,ysize,buf_xsize,buf_ysize,buf_type,array,band_list) 从 影 像 中 读取图像坐标范围为(xoff, yoff, xoff+xsize,yoff+ysize)的波段信息,把每个波段中的xsize *ysize大小的信息映射成buf_xsize*buf_ysize大小,缓存至大小为nBandId*buf_xize*buf_ysize的一维数组中,nBandId为波段数。将信息转换成颜色值数组,创建并缓存一个buf_xsize*buf_ysize大小的Bitmap位图对象。影像上像素点(Xi,Yi)与对应屏幕上像素点(Xs,Ys)的转换关系如式(3)所示,反向转换关系如式(4)所示。在式(3)、(4)中,(Li,Ti)表示当前显示的影像区域左上角的图像坐标,(Ls,Ts)为屏幕显示区左上角的坐标;pixelsize为屏幕像素点的大小,即屏幕上一个像素点,代表影像中pixelsize个像素点。
在屏幕上显示缓存中的影像位图对象,其方式是使用SurfaceView组件锁定对应的屏幕区域,指定屏幕左上角坐标,画出缓存中的位图。与View绘图机制相比,SurfaceView能填补View存在的缺陷:View缺乏双缓冲机制;当程序需要更新View上的图像时,程序必须重绘View上显示的整张图片;新线程无法直接更新View组件[15]。
1.2.2 分块加载tif影像
由于tif影像整块加载具有响应时间长、内存消耗大、稳定性差的缺陷,改进并提出了分块加载tif影像的方法,其思想如图3所示,即初始加载时以整块的方式加载;以后每次加载,都保留本次显示的影像区与上次的交集区域的影像,缩放显示;在加载非交集区的影像时,不再是将显示区域内的影像一次性地加载到缓存,而是将显示屏幕区按固定大小行列分块,再加载每一块对应的影像至缓存再显示;为保证影像的显示质量,交集区域的影像需以分块的方式重新加载。
1.2.3 分块加载jpg压缩影像
图3 分块加载影像的思想Fig. 3 Principle of block loading image
基于高压缩比、低损耗的方式,将tif影像转换成jpg型压缩影像,其在Android设备上浏览的思想与分块加载浏览tif影像的思想一样。但需先使用Arcgis软件中的导出功能,将tif影像压缩成jpg型影像,再分块加载浏览。
压缩后的jpg型遥感影像,不自带影像的属性信息,需将仿射变换系数、影像的宽度和高度等属性以XML文件存储,存储格式如表2所示,即tif影像转换为jpg型压缩影像加XML属性文件。浏览影像时,需先解析XML属性文件获得影像的属性信息,再获得影像文件输入流的BitmapRegionDecoder区域解码对象,使用decodeRegion(Rect, Option)从解码对象中获得某影像区域的位图,Rect表示区域的空间范围。
表2 保存影像属性的XML文件的格式Table 2 Format of XML file used saving images’ attribute
2 实验结果
将这3种方法应用于野外辅助定位中,浏览0~1灰度影像和多波段的彩色影像的效果如图4所示,左图为灰度影像,右图为彩色影像。比较了267×427最小影像区域、800×1 280屏幕大小区域、12 000×19 200较大区域这3种典型影像区域在加载过程中,每个功能块的响应时间(单位:ms毫秒)。
2.1 tif影像整块加载
2.1.1 浏览0~1灰度影像
以整块加载方式浏览0~1灰度tif影像,3种典型影像区域在加载过程中读取波段信息、转颜色值、缓存Bitmap位图、显示位图的响应时间如表3所示。
采用此方法在加载14 400×23 040影像区域时有最长加载时间,2 438 ms左右;加载屏幕大小800×1 280影像区域时有最短加载时间,321 ms左右;17次浏览的平均加载时间为1 056.059 ms左右,最接近于9 600×15 360影像区域的加载时间,1 024 ms左右;最大消耗内存为33.16 MB左右,未出现内存溢出。
图4 野外辅助定位中浏览灰度影像(左图)和彩色影像(右图)的效果Fig. 4 Browsing 0-1 gray image (left) and multi-band color image (right) in fi eld aided position
表3 整块加载0-1灰度tif影像的时间 msTable 3 Time of loading whole block 0-1 gray tif image
2.1.2 浏览多波段的彩色影像
以整块加载方式浏览多波段彩色tif影像,3种典型影像区域在加载过程中读取波段信息、转颜色值、缓存Bitmap位图、显示位图的响应时间如表4所示。
表4 整块加载多波段的彩色tif影像的时间( ms)Table 4 Time of loading whole block multi-band color tif image
采用此方法加载10 400×16 640影像区域时有最长加载时间,30 115 ms左右;加载屏幕大小的影像区域有最短加载时间,631左右;39次浏览的平均加载时间为14 472.21 ms左右,最接近于10 400×16 640影像区域的加载时间,15 314 ms左右;最大消耗内存为58.598 MB左右,30次左右的加载量会出现内存溢出;正常加载占用的内存为39.410 MB。
2.2 tif影像分块加载
2.2.1 浏览0~1灰度影像
以分块加载方式浏览0~1灰度tif影像,3种典型影像区域在加载过程中保留交集区域、分块加载非交集区域和交集区域的响应时间如表5所示。
表5 分块加载0-1灰度tif影像的时间( ms)Table 5 Time of block loading 0-1 gray tif image
采用此方法初始整块加载14 400×23 040大小的影像的时间为2 052 ms左右;在加载14 400×23 040影像区域时有最长分块加载时间,1 812 ms左右;加载屏幕大小影像时有最短分块加载时间,347 ms左右;42次浏览的平均加载时间为1 048.5 ms左右,最接近 8 000×12 800影像区域的加载时间,1 039 ms;最大消耗内存为32.285 MB左右,未出现内存溢出。
2.2.2 浏览多波段的彩色影像
以分块加载方式浏览多波段彩色tif影像,3种典型影像区域在加载过程中保留交集区域并缩放、分块加载非交集区域和交集区域等各模块的响应时间如表6所示。
表6 分块加载多波段彩色tif影像的时间( ms)Table 6 Time of block loading multi-band color tif image
采用此方法初始整块加载12 000×19 200大小的影像的时间为7 248 ms左右;加载12 000×19 200影像区域时有最长分块加载时间,23 995 ms左右;加载屏幕大小的影像时有最短分块加载时间,746 ms左右;34次浏览的平均加载时间为9 616.588 ms左右,最接近于8 800×14 080影像区域的加载时间,11 035 ms;最大消耗内存为41.598 MB左右,未出现内存溢出。
2.3 jpg压缩影像分块加载
2.3.1 浏览0~1灰度影像
以分块加载方式浏览0~1灰度jpg压缩影像,3种典型影像区域在加载过程中保留交集区域、分块加载非交集区域和交集区域的响应时间如表7所示。
表7 分块加载0-1灰度jpg压缩影像的时间( ms)Table 7 Time of block loading 0-1 gray jpg compressed image
采用此方法初始整块加载14 400×23 040影像的时间为3 450 ms左右;分块加载14 400×23 040影像区域时有最长加载时间,3 699 ms左右;分块加载267×427影像时有最短加载时间,78 ms左右;42次浏览的平均加载时间为1 558.167 ms左右,最接近8 000×12 800影像区域的加载时间,1 655 ms;最大消耗内存为32.598 MB左右,未出现内存溢出。
2.3.2 浏览多波段的彩色影像
分块加载浏览多波段彩色jpg压缩影像,3种典型影像区域在加载过程中保留交集区域、分块加载非交集区域和交集区域的响应时间如表8所示。
表8 分块加载多波段彩色jpg压缩影像的时间( ms)Table 8 Time of block loading multi-band jpg color compressed image
采用此方法初始整块加载12 000×19 200大小影像的时间为3 873 ms左右;加载12 000×19 200影像区域时有最长分块加载时间,3 912 ms左右;加载267×427影像区域时有最短分块加载时间,107 ms左右;34次浏览的平均加载时间为1 585.706 ms左右,最接近7 200×11 520影像区域的加载时间,1 576 ms左右;最大消耗内存为32.223 MB左右,未出现内存溢出。
2.4 综合比较分析
使用3种影像加载方法浏览影像,每种方法在使用时的文件大小、内存消耗、初次加载时间、最长加载时间、最短加载时间、平均时间如表9所示。
实验结果表明:整块加载tif影像消耗内存最大,加载时间最长,稳定性最差;分块加载tif影像,对于0~1灰度影像的内存消耗、加载时间是较好的,但加载多波段彩色影像时响应速度难以满足实际需求;分块加载jpg压缩影像,具有文件小、损耗低、消耗内存较少、加载时间较短、应用运行稳定的特点,平均33 MB左右的内存消耗和1 600 ms的响应时间,加载效果较好。
表 9 灰度影像和彩色影像的综合比较Table 9 Comparison of gray image and color image
3 讨 论
本文研究了用整块加载tif影像、分块加载tif影像、分块加载jpg压缩影像的方法,借助GDAL开源库,在Android平台上浏览0~1灰度遥感影像或多波段彩色影像,主要结果如下:
比较3种加载方法的内存消耗、初始加载时间、最长加载时间、最短加载时间、平均加载时间,分块加载tif影像在浏览0~1灰度影像时能达到更好的效果,但浏览多波段彩色影像时远不如jpg压缩影像的加载方法。综合比较可知分块加载jpg压缩影像比其它两种方法有更低的内存消耗、更快的加载速度、更稳定的运行。
浏览jpg压缩影像平均消耗33MB左右的内存和1 600 MB的加载时间,能压缩到原tif影像十分之一的文件大小,使分块加载jpg压缩影像能满足实际生产要求。
自主研究在Android平台上浏览遥感影像技术,既能脱离商业GIS开发平台不开源、收费的限制,又有利于技术的推广和更深层次的发展。
随着硬件技术的发展,移动设备将能搭载更高计算能力的处理器、更大容量的内存、多级缓存技术、更强的散热能力,Android系统将逐步放宽单个应用内存消耗的上限,在android平台上浏览遥感影像将会有更短的加载时间、更能稳定的运行,这对于林业野外作业,如森林资源一类调查、二类调查、林业信息采集、野外辅助定位、遥感判读等工作,具十分重要的应用前景。
[1] 王 涛.一种用于PDA的遥感影像数据模型及其显示算法研究[J].测绘科学,2009,34(2):184-186
[2] 杨安宁.一种Android平台GIS软件的新型数据缓存策略的实现[J].计算机与现代化,2012,10:46-49
[3] 原发杰.一种新的海量遥感瓦片影像数据存储检索策略[D].成都:电子科技大学,2013
[4] 向和平.基于GIS的遥感影像快速浏览系统的设计与实现[D].苏州:苏州大学,2012
[5] 郝玉凤.利用开源推动国内地理空间信息产业发展[J].中州大学学报,2010,27(4):118-120
[6] 龚志辉.利用开源推动国内地理空间信息产业发展[C].《测绘通报》测绘科学前沿技术论坛论文集,2008:1-5
[7] Herve Guihot. Pro Android Apps Performance Optimization[M].白龙译.北京:人民邮电出版社, 2014:90-91.
[8] 陆继翔.Android应用程序的性能优化分析与研究[J].机械设计与制造工程,2013,42(3):82-85.
[9] 查东平,林 辉,孙 华,等.森林资源信息外业采集移动平台关键技术研究中[J].中南林业科技大学学报, 2012,32(9):32-36.
[10] 高 峥.海量遥感影像快速生成金字塔算法的研究与实现[D].上海:华东师范大学,2012.
[11] 许 涌.海量图像数据快速显示技术[J].计算机工程与设计,2003, 24(6):36-38.
[12] 查东平.基于GDAL的遥感影像数据快速显示方法的研究[J].中南林业科技大学学报,2013,33(1):58-62.
[13] 张宏伟.基于GDAL大于2G遥感图像的快速浏览[J].计算机工程与应用,2012,48(13):159-162.
[14] 赵 岩.基于GDAL的遥感图像浏览关键技术研究[J].计算机工程,2012,38(23):15-23.
[15] 李 刚.疯狂Android讲义[M].北京:电子工业出版社,2013:355-398.
Browsing remote sensing images based on Android platform and GDAL
YANG De-zhia,b, LIN Huia,b, ZANG Zhuoa
(a. Research Center of Forest Remote Sensing & Information Engineering; b.College of Computer Science and Information Technology,Central South University of Forest & Technology, Changsha 410004, Hunan, China)
Due to memory limitations, it is diff i cult that GDAL is used to browse the remote sensing images of GB in Android system even harder to achieve. By adopting tif image, 0~1 gray image and multi-band color image, the memory consumption, the initial loading time, the longest loading time, the shortest loading time, the average loading time and stability of the color images loading methods were compared, thus selecting out the best image loading method. The results show that the whole block loading tif image consumed the maximum memory, took the longest loading time and had the worst stability; The block loading 0~1 gray tif image can meet the actual demand in memory consumption and loading time, but the browsing results of multi-band color tif image were diff i cult to meet the practical requirements; The block loading jpg compressed image, consumed averagely memory 33MB and the loading time was 1 600 ms on average, so that this method can meet the fi eld work requirements.
remote sensing image; mobile GIS; Android platform; GDAL; block loading
S771.8
A
1673-923X(2014)11-0124-06
2014-01-12
国家十二五高技术研究发展计划(863计划)课题:“数字化森林资源监测关键技术研究”(2012AA102001);国家自然科学基金项目(31370639);湖南省高校产业化培育项目(13CY011)
阳德志(1990-),男,湖南隆回人, 硕士研究生,主要从事林业信息智能决策与应用研究;
E-mail:yangdezhihello@163.com
林 辉(1965-),女,湖北黄冈人,教授,博士,博士生导师,主要从事森林经理学、遥感技术与地理信息系统的教学和科研工作
[本文编校:吴 毅]