首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于PyFITS / AstroPy的FITS图像中的笛卡尔投影问题

基于PyFITS / AstroPy的FITS图像中的笛卡尔投影问题
EN

Stack Overflow用户
提问于 2014-01-28 19:33:43
回答 1查看 1.1K关注 0票数 7

我一直在寻找解决这个问题的方法,却什么也没发现。

我正在通过matplotlib生成矩形图像,然后使用AstroPy (或PyFITS)将WCS坐标应用到它们。我的图片位于银河系的纬度和经度,因此适合我的地图的标题关键字应该是GLON-CARGLAT-CAR (用于笛卡尔投影)。我看过其他地图,它在SAO DS9中使用了同样的地图投影,坐标非常好.网格是完全正交的,因为它应该是。适合的标准投影可以找到这里。

但是当我生成我的地图时,坐标根本不是笛卡尔的。这是一个并排比较我的地图(左)和另一个参考地图的大致相同的区域(右)。两者都列在FITS头中的GLON-CARGLAT-CAR中,但是当在DS9中看到它们时,我的坐标网格非常复杂(请注意,坐标网格是SAO DS9根据file中的数据生成的,或者至少存储在FITS文件中的某个位置):

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

有没有人遇到过这种情况,或者知道问题出在哪里?

我试过应用其他的预测(只是为了看看他们在DS9中的表现如何),结果很好.但是,我的笛卡儿和墨卡托投影并没有像它们应该的那样以正交网格的形式出现。

我不敢相信这会是AstroPy的一个bug,但我找不到任何其他原因.除非我在标题中的参数格式不正确,但我仍然不认为这会导致我正在经历的问题。或者你会推荐使用别的东西吗?(我看过matplotlib basemap,但在我的计算机上使用时遇到了一些困难)。

我的头代码如下:

代码语言:javascript
复制
 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)

谢谢你能提供的任何帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-28 21:12:58

-CAR投影的现代定义中(来自Calabretta等人),GLON-CAR/GLAT-CAR投影只在将CRVAL2设置为零的情况下生成一个直线网格。如果CRVAL2不是零,那么网格是弯曲的(这应该与Astropy无关)。您可以尝试通过调整CRVAL2CRPIX2来修复这个问题,使CRVAL2为零。这个有用吗?

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

代码语言:javascript
复制
header['CRPIX2'] -= header['CRVAL2'] / header['CDELT2']
header['CRVAL2'] = 0.

运气好吗?

如果您查看所查看的“引用”文件的头文件,您将看到CRVAL2为零。首先要说明的是,CRVAL2非零没有什么问题,但是网格不再是直线的。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21415059

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档