基于GDAL大于2G遥感图像的快速浏览
1622012,48(13)ComputerEngineeringandApplications计算机工程与应用
取结束;②如果没有对应块,则利用GDAL类库中的函数RasterIO()从文件中读取块数据,并将该块加入到内存金字塔中,如果超过内存上限,执行LRU替换算法移除一些图像块,直到有足够的空间容纳新加入的图像块数据,然后显示该块图像,该块读取过程结束。
4.3图像缩小操作
假定金字塔的总层数为N,图像在第n层第i块
上进行缩小操作,缩小后图层为n+p(如图3所示),缩小操作是三个操作最复杂的操作,缩小后窗口数据的范围比原来的要大。数据读取的算法过程如下:
(1)如果金字塔图层n+p上有对应块的数据,则直接读取并显示。
(2)如果金字塔图层n+p上没有对应块的数据,此时有两种情况:一是图层n上有对应块的数据,则直接缩小到n+p层,获得数据块后显示,并加入到内存金字塔中的n+p层上;如果超过设定的内存上限,执行LRU替换算法移除一些图像块,直到有足够的空间容纳新加入的图像块数据,该块读取结束。二是图层n上没有对应块的数据,则查找该块在内存金字塔的下面的[n+p-1,0]层是否有对应块?如果有对应块,找到其中最接近图层n+p的图层中的块,在内存中缩小到n+p层,得到n+p层对应块数据,显示该块图像,并将该块加入到内存金字塔中n+p层,如果超过设定的内存上限,执行LRU替换算法移除一些图像块,直到有足够的空间容纳新加入的图像块数据,该块读取结束;如果没有对应块,则利用GDAL类库中的函数RasterIO()从文件中读取块数据,并将该块加入到内存金字塔中,如果超过内存上限,执行LRU替换算法移除一些图像块,直到有足够的空间容纳新加入的图像块数据,然后显示该块图像,该块读取过程结束。
5运行的结果
本文程序基于gdal17.dll用VisualC++6.0在
WindowsXP2002SP3版本下开发,在Dell台式机IntelCPU2.33GHz,1.95GB的内存)下运行,打开1G以下的图像,无论是第一次,还是以后放大、缩小和漫游都非常快,基本上不需要等待。打开2G以上
的图像(29647×29475的三波段彩色图像,大小为2.44G),如图4所示。由于第一次打开要采样并建立金字塔,所用时间较长,需要53秒左右,以后的放大、缩小和漫游都很快。在同一台机器下用EnviZoom4.5下打开此文件,建立金字塔并显示缩略图用了3分10秒左右,当然EnviZoom软件第一次打开时在硬盘上建立了833M的静态金字塔文件,以后再打开文件时,它自动地从静态金字塔文件读取,则非常快,所以不能简单地比较谁快谁慢。
图4打开2.44G的图像的程序界面
6结论
GDAL开源库支持多种图像文件格式,并提供了
快速读取图像数据和建立金字塔等许多强大的功能。因此,本文基于GDAL对图像进行分层分块处理,并在内存中建立图像金字塔结构作为高速缓存,实现了快速地显示和浏览大的图像。
参考文献:
[1]吕京国,黄国满.用VisualC++实现大数据量的快速存取[J].
测绘科学,2002(9):29-31.
[2]胡伟忠,刘南,刘仁义.基于内存映射文件技术的海量影像
数据快速读取方法[J].计算机应用研究,2005(2):111-112.[3]章孝灿,黄智才,陈刚,等.海量遥感影像快速显示技术[J].
中国图象图形学报,2002,7(10):1021-1026.
[4]RichterJ.Windows高级编程指南[M].王书洪,刘光明,译.3
版.北京:清华大学出版社,1999.
[5]许涌,万国龙.海量图像数据快速显示技术[J].计算机工程
与设计,2003(6):36-38.
[6]宋江洪,赵忠明.图像分块分层结构在海量数据处理中的
应用[J].计算机工程与应用,2004,40(33):
31-33.
(