前言

ISIS软件是NASA提供的,用于处理其发布的全系列行星探测原始数据的软件,其主要的特性是为各个遥感原始数据块提供地理坐标,实现了部分EDR和CDR的地理配准。为了实现后续对月球南极地区、其他深空领域数据集的自定义使用,必须要将该软件安装并使用,以获取更加丰富的遥感数据集。

安装说明

该软件安装的官方文档的表述有点让人难以理解,以下是正常方便的安装。

首先,需要保证当前系统的环境是Linux系统(Windows系统下可使用WSL实现之),然后且预装了Anaconda或Miniconda。接下来,打开终端,执行以下命令:

1
2
3
4
5
6
7
8
9
conda create -n isis python=3.9
conda activate isis
# Add conda-forge and usgs-astrogeology channels
conda config --env --add channels conda-forge
conda config --env --add channels usgs-astrogeology
# Check channel order
conda config --show channels
# Install ISIS
conda install -c usgs-astrogeology isis

注意到此时基本就完成安装了,但是问题往往出在安装的最后一步,文档里对ISISROOTISISDATA的设置没有说明清楚,如果将这两个路径随意设置,则将会产生这样的错误结果:

1
**USER ERROR** The preference file $ISISROOT/IsisPreferences was not found or does not exist in Preference.cpp at 39.

实际上,ISISROOT是指向当前虚拟环境的路径,而ISISDATA是指向数据目录的路径。可以通过以下命令设置:

1
2
3
4
5
conda env config vars set ISISROOT=$CONDA_PREFIX
conda env config vars set ISISDATA=<自定义的数据目录>
# 重新激活当前conda环境
conda deactivate
conda activate isis

理论上这时才完成正确安装。然后可能会遇到的第二个问题是:

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
2
sudo apt install libgsl-dev
sudo ln -s /usr/lib/x86_64-linux-gnu/libgsl.so.27 /usr/lib/x86_64-linux-gnu/libgsl.so.25

处理完这一步后,运行命令qview,如能正确打开可视化界面,则说明安装成功。
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格式,但是CDRRDR在转化后会丢失相机位姿与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
2
cam2map from=cdr.cub to=map.cub
stretch from=map.cub to=stretched.cub

注意,投影时默认的投影坐标系是lunar_sinusoidal,如果需要其他类型的坐标系,可以打开cam2map的帮助文档投影参考文档查看。最后,将投影所得遥感影像导出为GeoTIFF格式或IMG影像格式,便于ArcGIS等软件使用即可。可使用isis2pdsisis2std等命令进行转换:

1
2
isis2pds from=stretched.cub to=output.img # 转为PDS3或PDS4格式
isis2std from=stretched.cub to=output.tif # 转为GeoTIFF或JEPG格式

将以上各步骤整合为一个脚本,便于批量处理数据集。以下是一个示例脚本isis.bash,用于处理EDR数据:

1
2
3
4
5
6
7
set -x
lronac2isis from=$1 to=edr
spiceinit from=edr.cub
lronaccal from=edr.cub to=cdr
cam2map from=cdr.cub to=map.cub map=$ISISROOT/appdata/templates/maps/orthographic.map
stretch from=map.cub to=stretched.cub
isis2pds from=stretched.cub to=EDR_prj/"${1%.*}".prj.img bittype=8BIT