问题是我正在处理两个 .fits 图像,但每个图像的像素比例不同。 假设图 1 有一个
CDELT = +- 0.0013888888888889 [deg]
图 2 有一个
CDELT = +- 0.00277778000000 [deg]
因此,为了准确地处理它们,我需要图像 1 来匹配图像 2 的像素比例。我不是这方面的专家,但从我能找到的内容来看,我读到这称为“重新分箱”。
我尝试过在网上或IA找到的代码,因为我只是一个初学者,并且对如何自己做这件事一无所知。
但它似乎不起作用,因为数据总是变得混乱,而且它的绘图没有任何意义。另外,生成的文件比原始文件大得多,我认为这是不对的,因为我降低了它的分辨率。
有人知道如何正确执行此操作而不影响我的数据吗?
我尝试过的最后一个代码是这个:
import numpy as np
from scipy.ndimage import zoom
from astropy.io import fits
# Load the data from the second image
ha_hdul = fits.open('ha_image.fits')
ha_data = ha_hdul[0].data
ha_header = ha_hdul[0].header
# Calculate the rebinning factors
scale_factor_x = 0.00277778000000 / 0.0013888888888889
scale_factor_y = 0.00277778000000 / 0.0013888888888889
# Rebin the data using zoom
rebinned_ha_data = zoom(ha_data, (scale_factor_y, scale_factor_x), order=1)
# Update the WCS information
ha_header['CDELT1'] = -0.00277778000000
ha_header['CDELT2'] = 0.00277778000000
# Create a new PrimaryHDU object with the rebinned data and updated header
rebinned_ha_hdu = fits.PrimaryHDU(rebinned_ha_data, header=ha_header)
# Save the rebinned image to a new FITS file
rebinned_ha_hdu.writeto('rebinned_ha_image.fits', overwrite=True)```
CDELTi
标题关键字是世界坐标系(WCS)的一部分,它描述了如何将一组坐标映射到另一组坐标。通常,这用于将图像中的 x,y 像素坐标映射到天空上的赤经、赤纬(RA、Dec)(但这不是唯一的坐标系、维数或用途)。至关重要的是,与 scipy.ndimage
用于处理的常规 2D 图像不同,FITS 数据和 WCS 中不假设像素轴和天空轴对齐或彼此线性相关。 RA 可能 与图像的 x 轴对齐,但它几乎总是不是,即使是,它也不会是完美的,并且会有一些旋转。
CDELTi
(其中 i
是轴编号,通常为 1 或 2)是以度/像素为单位的比例,但该符号还告诉您值增加的方向。假设一个 CDELT
值意味着假设每个轴上的图像比例相同,即使对于方形 CCD 像素,这也不一定是一个好的假设,因为产生图像的光学器件(望远镜、相机等)可能不会产生相同的结果在每个方向上缩放。其他问题是旋转,如果 FITS 标头使用 CROTAi
表示法,则将由 CDELT
关键字指定,否则使用 2x2 CDi_j
矩阵(并且允许包含倾斜;本文中的一般信息) )以及由 PVi_j
关键字或 SIP 多项式指定的潜在失真(例如 here)。
通过将 FITS 图像数据视为规则的、对齐的、线性的 2D 图像并选择平均比例因子,这会忽略 WCS 标头中有关变换的其余信息,并且不会将像素信息重新采样为新的图像。非对齐网格的方式可以防止混叠,更重要的是,保留图像中的天文通量并将其组合起来进行有意义的测量。正如 @9769953 所建议的,强烈建议您查看天文学专用工具,例如 reproject、SWarp 和 Montage,它们将处理 WCS 映射的所有细节和复杂性,并且不会假设 1 或 2恒定比例因子。