通过PyFITS/AstroPy在FITS图像中进行笛卡尔投影问题

Tea*_*hey 5 python matplotlib-basemap fits pyfits astropy

我看了看并找到了解决这个问题的方法,但我什么都没有.

我正在通过matplotlib生成矩形FITS图像,然后使用AstroPy(或PyFITS)将WCS坐标应用于它们.我的图片中银河系的经度和纬度,所以标题关键字适合我的地图应该是GLON-CARGLAT-CAR(笛卡尔投影).我已经看过在SAO DS9中使用相同地图投影的其他地图,并且坐标工作得很好...... 网格应该是完全正交的.可在此处找到FITS标准预测.

但是当我生成我的地图时,坐标根本不是笛卡儿.这是我的地图(左)和大致相同区域(右)的另一个参考地图的并排比较.两者都列出GLON-CAR,并GLAT-CAR在FITS头,但是当在SAO DS9看着我的是扭曲(注意坐标网格是什么SAO DS9基于在FITS头,或至少某处存储在FITS文件中的数据):

(左)我的地图,和(右)参考地图. HEADER关键字是相同的,都是笛卡儿

这是有问题的,因为如果投影错误,坐标分配算法将为每个像素分配不正确的坐标.

有没有人遇到这个,或者知道可能是什么问题?

我已经尝试过应用其他投影(只是为了看看它们在SAO DS9中的表现如何)并且它们很好......但我的笛卡尔和墨卡托投影并没有像他们应该的那样提出正交网格.

我不敢相信这会是AstroPy中的一个错误,但是我找不到任何其他原因...除非我在标题中的参数格式不正确,但我仍然看不出那会怎样导致问题我'经历.或者你会推荐使用其他东西吗?(我已经看过matplotlib底图但是在我的计算机上工作时遇到了一些麻烦).

我的标题代码如下:

 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)
Run Code Online (Sandbox Code Playgroud)

感谢您的任何帮助,您可以提供.

ast*_*rog 7

-CAR投影的现代定义中(来自Calabretta等人),如果设置为零,则GLON-CAR/ GLAT-CAR投影仅产生直线网格CRVAL2.如果CRVAL2不为零,那么网格是弯曲的(这应该与Astropy无关).您可以通过调整来尝试修复此问题CRVAL2,CRPIX2因此它CRVAL2为零.这有帮助吗?

只是为了澄清我的意思,在上面的代码之后,在写出文件之前尝试:

header['CRPIX2'] -= header['CRVAL2'] / header['CDELT2']
header['CRVAL2'] = 0.
Run Code Online (Sandbox Code Playgroud)

运气好的话?

如果你看一下你所看到的'参考'文件的标题,你会发现那里CRVAL2是零.只要是明确的,没有什么是CRVAL2为非零,但网格就不再是直线的.