ISIS软件使用
前言
ISIS软件是NASA提供的,用于处理其发布的全系列行星探测原始数据的软件,其主要的特性是为各个遥感原始数据块提供地理坐标,实现了部分EDR和CDR的地理配准。为了实现后续对月球南极地区、其他深空领域数据集的自定义使用,必须要将该软件安装并使用,以获取更加丰富的遥感数据集。
安装说明
该软件安装的官方文档的表述有点让人难以理解,以下是正常方便的安装。
首先,需要保证当前系统的环境是Linux系统(Windows系统下可使用WSL实现之),然后且预装了Anaconda或Miniconda。接下来,打开终端,执行以下命令:
1 | conda create -n isis python=3.9 |
注意到此时基本就完成安装了,但是问题往往出在安装的最后一步,文档里对ISISROOT
和ISISDATA
的设置没有说明清楚,如果将这两个路径随意设置,则将会产生这样的错误结果:
1 | **USER ERROR** The preference file $ISISROOT/IsisPreferences was not found or does not exist in Preference.cpp at 39. |
实际上,ISISROOT
是指向当前虚拟环境的路径,而ISISDATA
是指向数据目录的路径。可以通过以下命令设置:
1 | conda env config vars set ISISROOT=$CONDA_PREFIX |
理论上这时才完成正确安装。然后可能会遇到的第二个问题是:
1 | error while loading shared libraries: libgsl.so.25: cannot open shared object file: No such file or directory |
这个问题是当前系统中缺少GSL库,但是该软件所需要的libgsl.so.25
版本的GSL库已经停止支持并从apt的源中移除了,这里用较高版本的libgsl-dev
库代替,并手工配置软链接到libgsl.so.25
,执行以下命令:
1 | sudo apt install libgsl-dev |
处理完这一步后,运行命令qview
,如能正确打开可视化界面,则说明安装成功。
From Scratch
教程的目录从这里起步,教程认为ISIS
的最大作用是把探测数据的原始格式转为带有地理参考坐标的图像产品,并可进一步实现图像拼接、光度模型校正以及系统噪声去除等遥感图像操作。ISIS的API参考文档见于这里。
PDS数据库中有三种格式:
- EDR(Engineer Data Record)实验数据记录,原始数据,未经过处理;
- CDR(Calibrated Data Record)校准数据记录,经过辐射定标和校正的原始数据;
- RDR(Reduced Data Record)缩减数据记录,经过地理配准处理的图像数据。
经过前期系列试验发现ISIS
软件对CDR和RDR格式的影像数据并不兼容,建议使用EDR
格式的数据进行处理。
加载EDR数据
使用pds2isis
确实可以将以上各种数据格式转化为.cub
格式,但是CDR和RDR在转化后会丢失相机位姿与MissionName
字段,导致后续操作无法进行。这里首先考虑从EDR下载原始数据,然后使用lronac2isis
加载数据文件:
1 | lronac2isis from=<EDR文件名> to=edr |
由于CDR和EDR文件不带有相机与轨道地理信息(Spacecraft &Planetaryephemerides,Instrument C
matrix and Event kernels, SPICE),首先运行命令spiceinit
为CDR文件添加姿态和轨迹信息,命令格式如下:
1 | spiceinit from=<EDR文件名> |
然后运行辐射定标程序,预计会使用到lronaccal
命令:
1 | lronaccal from=edr.cub to=cdr.cub |
然后选取适当的投影坐标系,将.cub
文件投影至月球表面,并对像素范围作适当拉伸,以保证ArcGIS等软件能够正常显示像素灰度,例如:
1 | cam2map from=cdr.cub to=map.cub |
注意,投影时默认的投影坐标系是lunar_sinusoidal
,如果需要其他类型的坐标系,可以打开cam2map的帮助文档和投影参考文档查看。最后,将投影所得遥感影像导出为GeoTIFF格式或IMG影像格式,便于ArcGIS等软件使用即可。可使用isis2pds,isis2std等命令进行转换:
1 | isis2pds from=stretched.cub to=output.img # 转为PDS3或PDS4格式 |
将以上各步骤整合为一个脚本,便于批量处理数据集。以下是一个示例脚本isis.bash
,用于处理EDR数据:
1 | set -x |