许峰玮
如何使用Matplotlib结合Montage叠加两张格点不一致的天文图片
2022-7-11 16:47
阅读:1677

在绘制天文图片的时候,我们往往会采用叠加的方式使得一张图片尽可能包含更多的信息。例如,天文学家们喜欢使用等高线叠加在色图上的方法,展示两张图片的相关或不相关性。这里举一个本人很喜欢的一篇发表在Astrophysical Journal 上的文章(文章号链接:https://doi.org/10.3847/1538-4357/ab07b9) 来自中国天文学家Shuo Kong。G28-dragon.png图片中的背景图片为Spitzer的中红外波段的连续谱,而叠加在其上的颜色图片来自ALMA干涉阵列的高分辨率发射。这两幅图片的叠加其难点就在于如何将两幅格点不一的图片画在一起,因为python的传统的Matplotlib中的绘制图片的方式是使用plt.imshow()命令对于二维数组成像,如果一个200*200和一个400*400在一个画板上使用plt.imshow(),两者并不会头尾对应,反而格点一一对应,从而无法达到效果。

因此,我们应该先将两张图片在天球坐标上regrid为一样的格点,同时保证每个格点一一对应。想要做到这点,就需要借助天球投影的常用包Montage。传统的Montage包是直接在终端运行的,现在已经植入Python,通过

pip install MontagePy

即可很方便的安装。

为了方便,我们将格点数目较低的图片投影到格点数目多的图片,其本质就是对低分辨率的图片进行插值。

首先,我们对高分辨率的图片制作一个.hdr文件,其完全决定了投影的模式,其由FITS文件的header文件衍生而来,具体为:(每行'/'之后都是备注)。参考其FITS文件的header信息自行拟写。

SIMPLE = T / The format of header file
BITPIX = -64 / The saving format of header file
NAXIS = 2 / The number of axis of projection. For images, always 2
NAXIS1 = 200 / The number of pixels in the first axis, 200 in my case
NAXIS2 = 200 / The number of pixels in the second axis, 200 in my case
CTYPE1 = 'RA---SIN' / 第一个轴的坐标类型,这里是赤道坐标中的RA
CTYPE2 = 'DEC--SIN' / 第二个轴的坐标类型,这里是赤道坐标中的DEC
CRVAL1 = 247.746 / 第一个轴的参考点的具体值,即RA的值
CRVAL2 = -48.731 / 第二个轴的参考点的具体值,即DEC的值
CRPIX1 = 101 / 第一轴的参考点具体pixel值,即第101个pixel对应的是CRVAL1的位置
CRPIX2 = 101 / 第二轴的参考点具体pixel值,即第101个pixel对应的是CRVAL2的位置
CDELT1 = -1.1E-4 / 第一轴每个pixel间隔值
CDELT2 = 1.1E-4 / 第二轴每个pixel间隔值

保存进入template.hdr之后,我们就有高分辨率图片的天球投影模版文件,接下来使用Montage中的快速投影方法mProjectQL。

from MontagePy.main import mProjectQL
mProjectQL(input_file,output_file,template_file='template.hdr')

其中input_file和output_file分辨是低分辨率的图片FITS文件路径和目标文件路径。此时,我们便得到了同等格点,且天球投影一致的两张图片,此后使用plt.imshow(),搭配plt.contour(),即可画出叠加效果。

注意,使用这个方式算出来低分辨率图像的重投影结果output_file可能会因为插值效果导致锯齿形的等高线,此时应该将矩阵进行高斯平滑,

from scipy.ndimage.filters import gaussian_filter
data = gaussian_filter(data, sigma=1)

而后,再使用data去进行绘制等高线。

转载本文请联系原作者获取授权,同时请注明本文来自许峰玮科学网博客。

链接地址:https://wap.sciencenet.cn/blog-3420944-1346831.html?mobile=1

收藏

分享到:

当前推荐数:0
推荐到博客首页
网友评论0 条评论
确定删除指定的回复吗?
确定删除本博文吗?