Я написал код, который просматривает уже существующую папку изображений и использует постоянный список имен объектов и их соответствующих положений ra, dec в небе, чтобы найти их в каждом исходном изображении и сделать вырез 10x10 arcsec ( если объект находится на изображении). Это работает, и я получаю несколько хороших вырезов, но по какой-то странной причине, каждый раз, когда я запускаю его, сохраняются новые изображения вырезов! Я действительно не знаю, почему это происходит, поскольку список объектов и их ra, dec положения всегда одинаковы, и я всегда сохраняю вырезанные изображения с точным названием изображения и объекта, которые не должны изменяться. Все исходные изображения также остаются неизменными.
Я провел много тестов и все еще в тупике - своими тестами я подтвердил, что список объектов (objs
) остается идентичным при каждом запуске, и я пришел к тому же выводу для списка исходных изображений (all_images
) и позиции ra, dec (списки ras_hms
и decs_deg
).
Исходное количество изображений и объектов достаточно длинное, поэтому я проверил свой код на меньших подмножествах для тестирования, и проблема новых изображений вырезов, появляющихся во время каждого запуска, все еще возникает. Я запустил код ниже на этих изображениях: 'calexp-HSC-I-18012-1,7.fits', 'calexp-HSC-I-18114-0,0.fits', 'calexp-HSC-I-18114-1,1.fits'
, которые сохранены в каталоге /Users/myuser/Desktop/Original_Images/
. Я выполняю свой код в другом каталоге, где вырезы также сохраняются в конце. При первом запуске я создал следующие вырезы: 'cutout-IMG-HSC-I-18114-0,0-OBJ-NEP175719.1+652743.2.fits',
'cutout-IMG-HSC-I-18114-1,1-OBJ-NEP175509.2+653523.9.fits'
. Когда через несколько минут я выполнил точно такой же код, ничего не меняя, я также сгенерировал два новых изображения: 'cutout-IMG-HSC-I-18114-0,0-OBJ-NEP175654.7+652930.2.fits',
'cutout-IMG-HSC-I-18114-1,1-OBJ-NEP175458.4+653419.1.fits'
и т. Д. Аналогично для будущих запусков.
Как вы можете видеть, он не обнаружил никаких объектов в одном из моих изображений (что нормально), но при каждом запуске он каким-то образом находит новый объект в каждом из других изображений (действительно, каждый раз, когда я запускаю это Код для этого небольшого подмножества, я вижу, что два новых вырезанных изображения были сохранены с разными именами объектов Я в замешательстве, поскольку, как я уже сказал, объекты и координаты, которые он ищет, одинаковы в каждом изображении при каждом запуске. Любые идеи или догадки будут с благодарностью!
import astropy
from astropy.nddata.utils import Cutout2D, NoOverlapError
import numpy as np
import matplotlib.pyplot as plt
from astropy import units as u
from astropy.io import fits
from astropy.wcs import WCS
from astropy.coordinates import SkyCoord, Angle
import re
import glob
def make_cutouts(img_file, box_len):
# Image data
hdulist = fits.open(img_file)
img_data = fits.getdata(img_file)
img_name = re.search(r'calexp\-(.+)\.fits', img_file)[1]
# Make cutouts (by locating coords in image with WCS)
wcs = WCS(hdulist[1].header)
for i in range(len(objs)):
# Skip if cutout already exists
if 'cutout-IMG-'+img_name+'-OBJ-'+objs[i]+'.fits' in glob.glob('cutout*.fits'):
print('Cutout of object already exists for this image, skipping...')
continue
# Convert ra, dec to HMS for specific object
ra_h = re.search(r'h=(\d+.?\d*)', str(ras_hms[i]))[1]
ra_m = re.search(r'm=(\d+.?\d*)', str(ras_hms[i]))[1]
ra_s = re.search(r's=(\d+.?\d*)', str(ras_hms[i]))[1]
ra_angle = Angle((float(ra_h), float(ra_m), float(ra_s)), unit='hourangle')
dec_angle = decs_deg[i]
# Coordinate transformation to pixels
center = SkyCoord(ra_angle, dec_angle, frame='fk5')
xp, yp = astropy.wcs.utils.skycoord_to_pixel(center, wcs=wcs, origin=1)
# Make cutout, skip when object is not in image
size = u.Quantity((box_len,box_len),u.arcsec)
try:
co = Cutout2D(img_data,(xp, yp),size,wcs=wcs)
except NoOverlapError:
continue
hdu = fits.PrimaryHDU(data=co.data,header=co.wcs.to_header())
hdu.writeto('cutout-IMG-'+img_name+'-OBJ-'+objs[i]+'.fits', overwrite=True)
return
# Gather all original images
all_images = glob.glob('/Users/myuser/Desktop/Original_Images/calexp*.fits')
coords_file = 'good_dataset.fits'
# Coordinates
hdul = fits.open(coords_file)
coords_data = hdul[1].data
objs = coords_data['Name']
ras = np.array(coords_data['RA']) # in decimal degrees
decs = np.array(coords_data['DEC']) # in decimal degrees
# Convert coordinate systems using astropy
decs_deg = Angle(decs, unit=u.deg)
ras_deg = Angle(ras, unit=u.deg)
ras_hms = [ra.hms for ra in ras_deg]
count=0
for image in all_images:
make_cutouts(image, 10.0)
count+=1
print('Image %d out of %d completed' % (count, len(all_images)))
Вот пример вывода из моих операторов печати прогона только что, который снова сгенерировал два новых вырезанных изображения (разные объекты, те же два изображения) ... Здесь изображение 2 - это то, где никакие объекты никогда не были найдены , Кроме того, интересно, что количество операторов «уже существует, пропускающих» увеличивается на два для каждого изображения при каждом запуске.
Cutout of object already exists for this image, skipping...
Cutout of object already exists for this image, skipping...
Cutout of object already exists for this image, skipping...
Cutout of object already exists for this image, skipping...
Image 1 out of 3 completed
Image 2 out of 3 completed
Cutout of object already exists for this image, skipping...
Cutout of object already exists for this image, skipping...
Cutout of object already exists for this image, skipping...
Cutout of object already exists for this image, skipping...
Image 3 out of 3 completed