简介
地面高分辨率望远镜(如中国科学院云南天文台的NVST)拍摄的Hα图像,与太阳动力学天文台(SDO)AIA的极紫外图像,本质上看的是同一片太阳,却分别运行在截然不同的坐标系统里。如何把NVST的精细色球结构,准确地"贴"到AIA图像对应的位置上?这个看似简单的问题,实际上涉及像素尺度差异、光轴方向不确定性、图像旋转以及WCS坐标系的构建,处理起来并不轻松。本文介绍一个基于Python开发的交互式配准工具,希望对有类似需求的朋友有所帮助。
1. 写在前面:为什么配准这么麻烦?
AIA的数据自带完整的WCS头文件,日面坐标系(Helioprojective)、像素尺度、指向信息一应俱全,sunpy可以直接读取使用。但NVST的情况就复杂多了。
首先,NVST的图像方向不是固定的。由于地平式装置加上大气折射的影响,不同时间拍摄的Hα图像,东西南北方向可能是左右颠倒的、也可能是上下颠倒的,甚至两者兼有。这不是数据缺陷,而是地面观测的固有特性,需要在处理时手动确认并校正。
其次,即便方向对了,NVST视场和AIA视场之间也存在一个旋转角。两台仪器的光轴朝向、焦面坐标系的定义各不相同,这个角度需要通过在两幅图像上识别同一个物理特征,几何计算得出。
这个程序要解决的,就是这两个问题:翻转 + 旋转,外加最终的WCS坐标头文件生成。
2. 配准流程设计
图1:程序界面截图
程序启动后,左侧显示AIA图像(带完整WCS投影),右侧显示NVST Hα图像(只有像素坐标)。整个配准按照固定的四步状态进行,底部状态栏会实时提示当前处于哪一步。我也贴心地提供了Hα的增强显示功能,如下图2所示。
图2:程序界面截图,以及增强显示的NVST Hα图像
第一步:在AIA上点击参考点P1
在AIA图像上,找到一个两幅图里都能清楚辨认的特征——活动区亮点、暗条端点、或者某个明显的色球结构——用鼠标点击。程序会自动通过sunpy的WCS解算,把你点击的像素坐标转换成日面坐标(Tx, Ty,单位角秒),并在图上标红色"+"号。
第二步:在NVST上点击对应的同一特征
切换到右侧NVST图像,在同一个物理位置点击。这一步确定的是NVST像素坐标与AIA日面坐标之间的对应关系,相当于定下了WCS的参考点(CRPIX / CRVAL)。
第三步:在AIA上再点击第二个参考点P2
P1和P2之间的连线,确定了AIA坐标系里的一个方向向量,同时P1P2的角秒距离也决定了NVST图像上的参考圆半径。程序会在NVST图上以P1为圆心,自动画出一个蓝色虚线圆。
第四步:在NVST圆圈上点击对应位置
这是最关键的一步。在NVST图像里,沿着刚才那个蓝色圆圈,找到和P2在物理上对应的同一特征,点击一下。程序会计算NVST方向向量与AIA方向向量之间的夹角,这就是两幅图像之间的旋转角。整个配准完成。
图3:配准的结果,在这个过程以及考虑了NVST的0.165角秒每像素的分辨率差异。图像首先进行了左右翻转。
整个数据流水线可以用一行表示:
原始数据 → 翻转(配准的一部分)→ 绕P1旋转 → 写入WCS头文件
旋转中心固定在P1像素,这样P1点在旋转前后位置不变,WCS的参考点坐标也不需要修正,几何上完全自洽。
3. 翻转:配准的前提,不是后处理
右侧提供了"Flip LR"和"Flip UD"两个按钮,用于校正NVST的图像方向。需要特别说明的是,翻转操作是配准流程的一部分,而不是显示上的装饰。每次执行翻转后,程序会自动重置当前配准状态,要求用户重新走一遍四步流程。
这样设计的原因是:旋转角的计算依赖于翻转后的NVST坐标系。如果翻转状态和配准结果不一致,保存的WCS头文件里CDELT的符号就会出错,reproject时坐标轴方向就会算反,导致叠加图像左右镜像。把翻转和配准绑定在一起,从根本上避免了这类不一致。
4. 叠加验证:用reproject检查效果
配准完成后,点击"Overlay"按钮会弹出一个新窗口,显示三张并排的图像:原始AIA图像、重投影到AIA坐标网格后的NVST图像、以及两者的混合叠加。
图4:叠加图像验证。我们可以发现居中的NVST图像以及和AIA实现了对齐,并带上了完整的WCS坐标。
5. 保存结果
点击"Save",程序会将配准后的NVST数据(经过翻转和旋转)以float32格式写入新的FITS文件,文件名自动在原始文件名后加 _registered 后缀。头文件包含完整的日面WCS坐标信息(HPLN-TAN / HPLT-TAN),以及翻转状态、旋转角度等记录,方便日后溯源。
写在最后
有时候会想起2021年在雁栖湖,我也是拿到一组NVST的数据,当时根本不知道原来NVST还得翻转再旋转。你能想象分析了几天然后发现自己图像都看错的尴尬吗...当时已经是2021年的八月份了,我才打开数据进行最基本的查看。可想而知当时的心态有多么崩溃。
写这个程序的起因也是一位师弟在困恼他手头上的数据,因此我想到了通过选两个点,自动进行配准的点子,在Python生态下简单快速的操作。在这里也仅仅是配准,图像去抖动等等都是需要使用者自己的经验。进行单张配准之后,可以把这个fits的操作直接作用在后续所有的文件上,也可以考虑时间变化的问题。
当然,目前这个程序还是基于人工选点的,配准精度受限于操作者对特征识别的经验,以及两幅图像的空间分辨率差异(NVST约0.165"/px,AIA约0.6"/px)。如何更进一步用互相关或特征匹配算法实现自动化,是个有意思但也相当有挑战性的后续方向。但是我们也可以采用NVST其他的数据集,比如TiO和HMI进行配准,这样无疑更加地准确和容易。我们只需要修改程序中对应的TiO分辨率即可(见图5)。
图5:HMI和TiO的对比配准
如果您感兴趣,欢迎后台私信,我可以把代码分享给您。如果在使用过程中遇到任何问题,也欢迎随时交流!该代码写的非常匆忙,没有经过较多的检验和测试,如果您有更好的想法和思路,欢迎分享学习。