7

私はこの問題の解決策を探して探しましたが、何も見つかりません。

私は、matplotlib を介して長方形の FITS 画像を生成し、続いて AstroPy (または PyFITS) を使用してそれらに WCS 座標を適用しています。私の画像は銀河の緯度と経度であるため、私のマップに適したヘッダー キーワードはGLON-CARand GLAT-CAR(直交投影の場合) である必要があります。SAO DS9でこの同じ地図投影法を使用する他の地図を見てきましたが、座標はうまく機能します...グリッドは本来あるべき完全に直交しています。FITS の標準的な投影法は、ここで見つけることができます。

しかし、マップを生成すると、座標はまったくデカルトではありません。これは、私のマップ (左) とほぼ同じ地域の別の参照マップ (右) を並べて比較したものです。どちらも FITS ヘッダーにリストされていますGLON-CARGLAT-CAR、私のものは SAO DS9 で見ると厄介です (座標グリッドは FITS ヘッダーのデータに基づいて SAO DS9 が生成するか、少なくとも 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)

ご協力いただきありがとうございます。

4

1 に答える 1

9

射影の最新の定義-CAR(Calabretta et al. による) では、GLON-CAR/GLAT-CAR射影は、 がゼロに設定されている場合にのみ直線グリッドを生成CRVAL2します。がゼロでない場合CRVAL2、グリッドは湾曲しています (これは Astropy とは関係ありません)。ゼロになるように調整することで、これを修正することができCRVAL2ます。これは役に立ちますか?CRPIX2CRVAL2

私の言いたいことを明確にするために、上記のコードの後、ファイルを書き出す前に試してください:

header['CRPIX2'] -= header['CRVAL2'] / header['CDELT2']
header['CRVAL2'] = 0.

運が良ければ?

見た「参照」ファイルのヘッダーを見ると、CRVAL2そこにゼロがあることがわかります。明確にするために、ゼロ以外であっても問題はありませんが、グリッドは直線ではなくなりますCRVAL2

于 2014-01-28T21:12:58.840 に答える