Cartesian projection issue in a FITS image through PyFITS / AstroPy
我已经寻找并寻找了解决该问题的方法,但是却一无所获。
我正在通过matplotlib生成矩形FITS图像,然后使用AstroPy(或PyFITS)将WCS坐标应用于它们。我的图像采用银河系经度和纬度,因此适合于我的地图的标头关键字应为
但是,当我生成地图时,坐标完全不是笛卡尔坐标。这是我的地图(左)与另一个大致相同区域的参考地图(右)的并排比较。在FITS标头中都在
这是有问题的,因为如果投影错误,则坐标分配算法会将错误的坐标分配给每个像素。
有没有人遇到过这个问题,或者知道可能是什么问题?
我尝试应用其他投影(只是为了看看它们在SAO DS9中的性能如何),但效果很好...但是我的笛卡尔和墨卡托投影没有像应该的那样带有正交网格。
我不敢相信这会是AstroPy中的错误,但我找不到其他原因...除非标题中的参数格式错误,但我仍然看不到这怎么会导致问题。米体验。还是建议您使用其他东西? (我看过matplotlib底图,但在将其用于计算机上时遇到了一些麻烦)。
我的标头代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | from __future__ import division import numpy as np from astropy.io import fits as pyfits # or use 'import pyfits, same thing' #(lots of code in between: defining variables and simple calculations... #probably not relevant) header['BSCALE'] = (1.00000, 'REAL = TAPE*BSCALE + BZERO') header['BZERO'] = (0.0) header['BUNIT'] = ('mag ', 'UNIT OF INTENSITY') header['BLANK'] = (-100.00, 'BLANK VALUE') header['CRVAL1'] = (glon_center, 'REF VALUE POINT DEGR') #FIRST COORDINATE OF THE CENTER header['CRPIX1'] = (center_x+0.5, 'REF POINT PIXEL LOCATION') ## REFERENCE X PIXEL header['CTYPE1'] = ('GLON-CAR', 'COORD TYPE : VALUE IS DEGR') header['CDELT1'] = (-glon_length/x_length, 'COORD VALUE INCREMENT WITH COUNT DGR') ### degrees per pixel header['CROTA1'] = (0, 'CCW ROTATION in DGR') header['CRVAL2'] = (glat_center, 'REF VALUE POINT DEGR') #Y COORDINATE OF THE CENTER header['CRPIX2'] = (center_y+0.5, 'REF POINT PIXEL LOCATION') #Y REFERENCE PIXEL header['CTYPE2'] = ('GLAT-CAR', 'COORD TYPE: VALUE IS DEGR') # WAS CAR OR TAN header['CDELT2'] = (glat_length/y_length, 'COORD VALUE INCREMENT WITH COUNT DGR') #degrees per pixel header['CROTA2'] = (rotation, 'CCW ROTATION IN DEGR') #NEGATIVE ROTATES CCW around origin (bottom left). header['DATAMIN'] = (data_min, 'Minimum data value in the file') header['DATAMAX'] = (data_max, 'Maximum data value in the file') header['TELESCOP'] = ("Produced from 2MASS") pyfits.update(filename, map_data, header) |
感谢您的任何帮助,您可以提供。
在
只是为了弄清楚我的意思,请在上面的代码之后并在写出文件之前尝试一下:
1 2 | header['CRPIX2'] -= header['CRVAL2'] / header['CDELT2'] header['CRVAL2'] = 0. |
运气好的话?
如果您查看所查看的"参考"文件的标题,您会发现