
纯IDL实现ENVI格式遥感影像转(Big)GeoTIFF
数据类型限制:仅支持INT/UINT/FLOAT三种类型。 地理标签固定:部分地理标签的值被固定,无法完全自定义。 格式转换限制:无法直接转换BIL格式的ENVI影像。
发布日期:2021-05-14 03:06:39
浏览次数:19
分类:精选文章
本文共 1305 字,大约阅读时间需要 4 分钟。
由ENVI到GeoTIFF:一个开发者的实践之路
在处理地理影像数据时,ENVI格式和GeoTIFF格式是两个常用的选择。虽然ENVI提供了简单的转换接口,但对于大规模影像数据,直接操作可能会面临内存不足的问题。因此,开发者需要寻找更灵活的解决方案。
初识挑战
使用ENVI的ENVIRaster.Export
接口虽然简单,但当处理大影像时,会遇到内存不足的问题。例如,GF6_PMS的单精度浮点型影像构建整个矩阵时,会导致内存分配失败。这种情况下,传统的WRITE_TIFF
函数也无法满足需求,因为其append
参数仅用于扩展影像,无法实现逐行或逐通道的写入。
突破瓶颈
面对这些挑战,开发者需要深入了解TIFF格式的底层结构,并尝试优化现有工具。通过研究发现,现有的tiff_write
函数虽然已被弃置,但其核心思想仍然值得借鉴。开发者花费了一周时间学习TIFF的底层结构,并优化了支持多通道、浮点数、地理标签以及大TIFF文件等功能。
优化后的解决方案
开发的解决方案能够处理多种数据类型(INT/UINT/FLOAT),并支持地理标签的编写。虽然还存在一些限制(如不能直接转换BIL格式的ENVI影像),但整体功能已经足够满足大多数需求。
实现细节
输入输出参数
输入文件名可以是fn
或fn.dat
,对应的头文件可以是fn.dat.hdr
、fn.hdr
或hdr
(大写)。输出文件默认保存在输入文件的同一目录,格式为fn_TIFF.tiff
,或根据需求进行自定义设置。 数据处理流程
- 读取头文件:解析ENVI格式的头文件,提取必要参数如影像大小、数据类型、投影类型、地理信息等。
- 文件打开与处理:根据文件大小判断是否需要使用大TIFF格式。如果文件大小超过4GB,采用BigTIFF格式来避免传统TIFF的4GB限制。
- TIFF头和目录写入:根据BigTIFF或普通TIFF的要求,写入相应的TIFF头和目录信息。
- 数据写入:根据投影类型(如BIP或BSQ)逐行或逐块地写入数据,确保数据正确性和效率。
实验结果
实验结果表明,优化后的解决方案在处理大规模影像时表现优异。与ENVI接口相比,处理速度有显著提升。以下是部分实验数据:
储存大小 | ENVI接口耗时(s) | 优化方案耗时(s) |
---|---|---|
459MB | 6.64 / 5.82 / 5.80 | 2.84 / 2.70 / 2.75 |
6G | 324.09 / 320.28 / 385.56 | 280.76 / 282.21 / 268.94 |
展望
虽然当前解决方案已能满足大多数需求,但仍有一些不足之处:
针对这些问题,开发者可以根据实际需求进一步优化代码,使其更符合特定应用场景的需求。
结语
通过这次项目,开发者深入了解了ENVI和TIFF格式的区别与联系,也掌握了如何在ENVI到GeoTIFF转换过程中应对各种技术挑战。虽然过程充满了困难,但最终实现的解决方案为后续工作奠定了坚实基础。
发表评论
最新留言
表示我来过!
[***.240.166.169]2025年04月16日 17时49分16秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
C/C++:线性表之顺序表
2019-03-12
嵌入式系统试题库(CSU)
2019-03-12
图神经网络7日打卡营学习心得
2019-03-12
electronJS 开发linux App
2019-03-12
STM32F7 LWIP协议栈TCP速度测试
2019-03-12
Arm Mbed OS 更适合大学实训平台
2019-03-12
MbedOS 设备中的模数转换(ADC)
2019-03-12
MbedOS+MQTT+TICK 栈构建企业大数据平台
2019-03-12
C++ influxdb 客户端
2019-03-12
关于编程能力的思考
2019-03-12
【vue】setInterval的嵌套实例
2019-03-12
【SpringBoot】如何配置热部署
2019-03-12
【rabbitMQ】04 如何实现高可用?
2019-03-12
【自考】之信息资源管理(一)
2019-03-12
C# 文本框限制大全
2019-03-12
setup facatory9.0打包详细教程(含静默安装和卸载)
2019-03-12
ionic4 路由跳转传值
2019-03-12
CSDN 怎么写出好看的博客
2019-03-12