2015-06-18 10 views
1

У меня есть изображение с множеством астрономических объектов. Я пытаюсь создать небольшие 4x4 «штампы» (разделы/изображения вокруг объектов) из интересующих меня объектов. Я уже вычислил координаты пикселей для объектов в исходном файле fits и создал документ, содержащий координаты. Я знаю, что команда imshow(), вероятно, является лучшим вариантом, но я не могу сказать, как использовать пиксельные координаты для выполнения задачи.Как использовать пиксельные координаты с помощью команды imshow() для создания изображений из определенных разделов подходящего изображения в python?

from pylab import * 
import numpy as np 
import pyfits 
import matplotlib.pyplot as plat 
coord = loadtxt('/Users/seadr/data/sky_coordinate_selection.txt') 
x = coord[:,0] 
y = coord[:,1] 

data = pyfits.getdata('/Users/seadr/data/sky_bkgdcor_match.fits') 

#vimin will calaculate the median of the data that does not equal 0 
vmin = median(data[where(data != 0)]) 

#vmax will calculate the normalized median 
vmax = 1.483 * np.median(abs(np.array(data[where(data!= 0)]) - 

np.median(data[where(data!= 0)]))) 
print vmax, vmin 

plt.imshow(data,vmin = vmin,vmax = vmax) 

Первый экземпляр imshow() дает мне оригинал документа, соответствующего требованиям.

Если бы я хотел посмотреть что-то вроде одной звезды на моем изображении, зная ее пиксельные координаты, как бы я это сделал.

Моя долгосрочная цель - создать много «штампов», потому что у меня есть много разных версий того же астрономического изображения, что они были сделаны в разных фильтрах. Я хочу, чтобы можно было отключить исходный файл fits и создавать наборы этих «штампов» для тех же объектов в разных фильтрах.

+0

Я не уверен, где ваше замешательство, но нигде в вашем примере вы не нарезаете изображение на более мелкие разделы, используя координаты. * Является ли '' imshow' обязательной лучшей функцией для вашей проблемы? Я не знаю. – Iguananaut

ответ

1

Если вы хотите нарезать изображение, которое вы показываете, используя imshow, вы можете просто индексировать данные. Например,

plt.imshow(data[0:10, 0:10]) 

будет отображать 10x10 угловой вырез данных. Похоже, вы хотите отобразить область, сосредоточенную на каждой из ваших координат x, y. Вы хотите, чтобы каждый из этих марок будет 4 пикселя на 4 пикселя, так что вы могли бы сделать

imwidth = 2 
plt.imshow(data[xcoord-imwidth:xcoord+imwidth, ycoord-imwidth:ycoord+imwidth]) 

где xcoord и ycoord координаты объекта, который вы хотите быть сосредоточены на, то есть х [I] и у [ i], где x и y - массивы, которые вы определили выше, и i - некоторый целочисленный индекс.