Подгонка PSF к изображению для получения общего потока (Python)

У меня есть изображение одного ненасыщенного источника (астероида), к которому я хотел бы подобрать предположения для различных моделей PSF, чтобы затем сравнить общий поток в каждом случае. Я только недавно начал изучать PSF, поэтому немного запутался.

Я знаю, что astropy предлагает пакет под названием photutils.psf, который выполняет настройку PSF для вас, но я хотел бы лучше понять, что происходит за подгонкой, и как из нее разрешается поток источника. Кроме того, когда я попытался использовать этот пакет, я все равно не получил никаких выходных данных (он сказал, что источник найден, но что он не соответствует критериям резкости или округлости, несмотря на то, что я немного изменил эти параметры). Я попробовал что-то более простое ниже (где model_dataпредставлено двухмерное представление массива PSF и imgданные изображения астероида):

import numpy as np
from astropy.modeling import fitting
from photutils import FittableImageModel

y, x = np.mgrid[:np.shape(img)[0], :np.shape(img)[1]]

fitter = fitting.LevMarLSQFitter()
model2d = FittableImageModel(model_data)
result = fitter(model2d, x, y, img)
print(result)
print(np.median(img), np.max(img), np.sum(img))

Результат, который я получаю, тогда:

flux       x_0       y_0

-----     -----     -----

9282.784  466.44    531.69

2705.82 25301.56 980812434.98

Однако это неправильные координаты центра тяжести источника на изображении. Правильные координаты около (300, 300). Кроме того, чтобы получить этот результат, данные PSF были нормализованы так, чтобы точка максимальной интенсивности была равна 1. Но когда я изменяю эту нормализацию так, чтобы общий поток (сумма всех пикселей) был равен 1, результат для потока после подгонки I получить намного выше.

Я не уверен, что здесь происходит за кулисами (я заблудился в документации), и я не уверен, могу ли я доверять любому из этих значений потока, учитывая, что x_0и y_0всегда отключены. Поэтому я хотел бы лучше понять, как именно можно найти поток объекта, подгоняя его под ФРТ? И как этот PSF нормализовать?

Если вы ищете общий поток системы, просто нарисуйте рамку вокруг своего изображения и сложите значения пикселей для каждого пикселя в вашей рамке. Вот и весь флюс.
@zephyr Да, но как это сделать, подобрав PSF к изображению?
Как ответил Карл Виттофт, нет смысла применять PSF к расширенному источнику. Кроме того, даже если бы это была звезда, вы бы не рассчитали поток, предварительно подгоняя к ней PSF. Вы сделаете именно то, что я сказал, и нарисуете рамку вокруг вашего объекта и сложите значения пикселей в этой рамке (хотя вы можете использовать PSF, чтобы сообщить, какой должна быть ваша рамка для точечного объекта).
Когда вы говорите нарисовать рамку вокруг объекта, как выбрать правильный размер рамки? С ненулевым фоном и шумом на изображении большая рамка увеличит поток, даже если источник не простирается дальше в большую рамку.
Кроме того, извините, но как астероид является протяженным источником? (этот термин был мне незнаком, пока я не посмотрел его только сейчас) Не будет ли угловой размер астероида, изображенного WISE, меньше, чем разрешение телескопа, классифицируя его как точечный источник?
Предположительно, вы уже исправили свои изображения на смещение, плоское поле и т . д . поэтому рисование большего прямоугольника не должно давать вам большего потока (по крайней мере, не значительно больше). Как правило, только звезды считаются точечными источниками, однако ваш астероид в вашем случае может быть достаточно близко к точечному источнику, но в любом случае это не имеет отношения к проблеме, которую вы пытаетесь решить. Хотя мы вступаем на территорию обсуждения, и комментарии не предназначены для этого. Пожалуйста, не стесняйтесь задавать дополнительные новые вопросы в этом обмене стеками, чтобы получить больше разъяснений.

Ответы (2)

Вы не можете получить PSF для расширенного объекта. Point-Spread-Function — это параметр вашей системы визуализации, который описывает форму изображения предполагаемого точечного источника.

Я ничего не знаю о том, для чего предназначен ваш пакет Python, поэтому я не могу напрямую комментировать результаты. Я укажу (извините), что геометрический центроид изображения обычно не совпадает с центроидом энергии (яркости) изображения.

Кроме того, общий поток — это просто сумма всех пикселей, покрытых изображением астероида (без фонового шума и прочего). Непонятно, зачем вам PSF, если вы просто выполняете расчеты энергии/мощности.

Ну, я использую PSF и для других целей, но одна из вещей, которые я хотел бы сделать, это найти общий поток исходного изображения. У меня сложилось впечатление, что я могу сделать это с помощью PSF, но я не смог найти в Интернете ничего о том, как именно он может это сделать. Знаете ли вы, как нормализация PSF может повлиять на поток исходного изображения? Кроме того, да, координаты центра тяжести, которые я привел в своем вопросе, соответствуют максимальной интенсивности, а не только геометрическому центру.

Изображение представляет собой 2D-пиксели, процедура подбора PSF будет делать что-то вроде этого. Во-первых, вы выбираете функцию PSF, которая в данном случае является двумерной гауссовой. Затем программа выберет центроид, мю и дисперсию (или мю и дисперсию).

Пара вещей, которые усложнят рутину. i) Локальный пик из-за шума. Это испортит центроид. Фиксация заключается в поиске центроида с использованием средних значений для некоторых размеров областей. Кроме того, вы можете указать, насколько большой должна быть область поиска с учетом изначально указанного места. Или, если вы уверены в местоположении центроида, вы можете исправить его, и центроид не будет переменной выбора. ii) Размер апертуры. Если объект представляет собой идеальный точечный 2D-источник по Гауссу, размер апертуры не имеет значения. Но с шумом и другими окружающими объектами вы должны решить, каким должен быть оптимальный размер: слишком большой = больше шума и включая другие объекты, слишком маленький = неправильная форма подгонки из-за преобладания шума. Возможно, есть еще что-то, о чем я не могу вспомнить в данный момент.

Говоря об этом, процедура подгонки может соответствовать даже расширенному исходному коду, но вы не получите хорошего результата, если не используете правильное ядро ​​(т. е. не гауссовское).

Я лично ничего не знаю об астрофии. Я использовал IRAF, который, по-моему, имеет аналог PyRAF в Python. Возможно, вы захотите проверить и это.

Я полагаю, что ваша проблема с неверным центроидом коренится в локальных пиках из-за шума и в процедуре поиска, не имеющей достаточного размера для хорошего среднего. Эта проблема напрямую приводит к> 1 общему потоку, как вы упомянули.