2016-11-07 2 views
3

я загрузить полную картуКак изменить заголовок после изменения размера подмапа?

from astropy.io import fits 
from astropy.wcs import wcs 

mapheader = fits.getheader(MapFile, 0) 
mapdata = fits.getdata(MapFile, 0) 
w = wcs.WCS(mapheader) 

и я беру квадрат подкарта от него предполагая центр находится в RA, DEC в градусах это можно легко сделать с помощью CutOut2D

from astropy.nddata import Cutout2D 
from astropy import coordinates 
from astropy import units as u 

center = coordinates.SkyCoord(RA*u.deg, DEC*u.deg, frame='fk5') 
submap = Cutout2D(mapdata, center, size=16*u.pix, wcs=w) 
submapheader = submap.wcs.to_header() 

Соответствующий разница в заголовках заключается в том, что он перемещает опорный пиксель «CRPIX»

Если я изменяю размер изображения, например, я делаю интерполяцию и пропускаю изображение с 16 пикселей до 128 пикселей

from scipy.misc import imresize 
newsubmap = imresize(submap.data, (128,128), interp=‘cubic’) 

как я должен изменить заголовок, чтобы получить хорошую проекцию на newsubmap?

Я попытался умножения опорного пикселя на изменение размера коэффициента, который в этом примере 128, но это не так просто, как

ответ

1

scipy.misc.imresize в вашем случае изменяет размер изображения до (128, 128). С вашего заявления:

Я попытался умножить опорный пиксель на коэффициент изменения размера, который составляет 128 в этом примере, но это не так просто.

Я предполагаю, что это первая ловушка здесь. Вы действительно уверены, что хотите изменить размер, чтобы (128, 128) или вы хотите, чтобы «увеличить» его на коэффициент 128 или даже с коэффициентом 1.28 (обратите внимание, что imresize использует дробные значения!)

>>> from scipy.misc import imresize 
>>> import numpy as np 
>>> imresize(np.ones((1000, 1000)), (100, 100)).shape # to (100, 100) 
(100, 100) 
>>> imresize(np.ones((1000, 1000)), 50).shape # half the size. 50->50% 
(500, 500) 

Пожалуйста, убедитесь, вы правильно используете imresize.


Так что следующий шаг, чтобы изменить WCS. Fortunatly WCS позволяет нарезать, так что это довольно легко, если вы знаете оригинальную форму и коэффициент изменения размера.

Скажем, у вас есть WCS вроде этого:

>>> im.wcs 
WCS Keywords 
Number of WCS axes: 2 
CTYPE : 'PIXEL' 'PIXEL' 
CRVAL : 2044.203 239.489 
CRPIX : 1022.1 119.7 
PC1_1 PC1_2 : 2.0 0.0 
PC2_1 PC2_2 : 0.0 2.0 
CDELT : 1.0 1.0 

вы можете нарезать его данный шаг:

>>> im.wcs[::2, ::2] # half the size 
WCS Keywords 
Number of WCS axes: 2 
CTYPE : 'PIXEL' 'PIXEL' 
CRVAL : 2044.203 239.489 
CRPIX : 511.30000000000001 60.100000000000001 
PC1_1 PC1_2 : 2.0 0.0 
PC2_1 PC2_2 : 0.0 2.0 
CDELT : 2.0 2.0 

или его фрагмент с шагом меньше 1, чтобы увеличить его:

>>> im.wcs[::1/128, ::1/128] # assuming you increase each axis by a factor of 128. 
WCS Keywords 
Number of WCS axes: 2 
CTYPE : 'PIXEL' 'PIXEL' 
CRVAL : 2044.203 239.489 
CRPIX : 130765.3 15258.1 
PC1_1 PC1_2 : 2.0 0.0 
PC2_1 PC2_2 : 0.0 2.0 
CDELT : 0.0078125 0.0078125 

Отметьте, что PC, CD и возможно также SIP и другие искажения игнорируются. Вы должны вручную обработать их. Однако значения CDELT будут обработаны, поэтому простые файлы FITS будут обработаны правильно.

Примечание: Я удалил ключевые слова NAXIS, так как они могут быть изменены для следующей версии, чтобы в любом случае они не были бы надежными. Они не обрабатываются в настоящее время, а в следующей версии они будут обрабатываться только в том случае, если «start, stop and step» являются целыми или None.

Смежные вопросы