我需要获取matplotlib投影的转换后的x,y像素值。尤其是,这是通过fits数据文件进行的世界坐标系转换。数据文件提供了一个提供投影信息的标头,但是我不知道在没有信息的情况下没有人可以直接使用它。这是当前代码:
image_detection = fits.open("hst_12311_08_wfc3_uvis_total_drz.fits")['SCI'].data
wlist = fits.open("hst_12311_08_wfc3_uvis_total_drz.fits")['SCI']
w = wcs.WCS(wlist.header)
mean, median, std = sigma_clipped_stats(image_detection, sigma=3.0)
iraffind = IRAFStarFinder(fwhm=3.0, threshold=5*std, exclude_border=True)
sources = iraffind(image_detection - median)
positions = (sources['xcentroid'], sources['ycentroid'])
apertures = CircularAperture(positions, r = 4.0)
fig = plt.figure(figsize=(8,8))
ax = fig.add_subplot(111, projection = w)
ax.imshow(transform(image_detection), cmap='gray_r', origin='lower')
# ax.colorbar()
apertures.plot(color='blue', lw=1.5, alpha=0.5)
plt.savefig("apertures.pdf")
ax.xlabel('Right Ascension')
ax.ylabel('Declination')
plt.show()
我想要的是将那些以x,y给出的位置值转换为世界坐标,并通过投影对其进行绘制。我已经检查了有关WCS的繁琐文档,还不清楚如何获取某些值,例如与原点有关的值。尽管任何x,y数据在技术上都应该合适,但可以从Hubble旧版存档中免费获得使用的拟合文件。 fits标头包含如上所述的所有转换值,尽管我不完全了解它们的用法。我认为这是一个遥不可及的目标,但是如果可以的话,谢谢。
答案 0 :(得分:0)
一旦有了WCS
对象,就可以使用两种方法从x,y-> RA,Dec或相反的方法进行转换。它们分别是w.all_pix2world()
和w.all_world2pix()
,例如
from astropy.io import fits
from astropy import wcs
wlist = fits.open("hst_12311_08_wfc3_uvis_total_drz.fits")['SCI']
w = wcs.WCS(wlist.header)
# Convert chip center from pixels to RA, Dec
radec_coords = w.all_pix2world(3057, 3045, 1)
print("RA, Dec=", radec_coords[0], radec_coords[1])
# Convert a RA, Dec pair to x,y
coords = [(279.1017383673262, -23.90274423755417)] # CRVAL1, 2 from header
pix_coords = w.all_world2pix(coords, 1)
print("X,Y=", pix_coords[0][0], pix_coords[0][1])
这将产生输出(四舍五入...)
RA, Dec= 279.10174439, -23.90274424
X,Y= 3057.5, 3045.0
其中,RA,Dec以度为单位。
最好使用all_pix2world
而不是wcs_pix2world
来应用所有转换(CDi_j
矩阵和CRPIXi/CRVALi
给出的核心WCS转换是从像素到RA,Dec由-SIP
矩阵和ColumnCopyingTransformer
给出)使用任何pipeline.Fit(trainingDataView).LastTransformer
多项式)是否可能在图像中出现图像失真(通常是哈勃仪器的情况)