Ajuste de PSF a una imagen para obtener el flujo total (Python)

Tengo una imagen de una sola fuente no saturada (asteroide) en la que me gustaría hacer conjeturas para varios modelos de PSF, de modo que luego pueda comparar el flujo total en cada caso. Recientemente comencé a estudiar PSF, así que estoy un poco confundido.

Sé que astropy ofrece un paquete llamado photutils.psfque hace el ajuste de PSF por usted, pero me gustaría comprender mejor qué sucede detrás del ajuste y cómo se resuelve el flujo de la fuente a partir de él. Además, cuando intenté usar este paquete, no obtuve ningún resultado de todos modos (decía que se encontró una fuente, pero que no cumplía con los criterios de nitidez o redondez, a pesar de que cambié esos parámetros un poco). He intentado algo más simple a continuación (dónde model_dataestá la representación de matriz numpy 2d del PSF, y imgson los datos de la imagen del asteroide):

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))

La salida que obtengo es entonces:

flux       x_0       y_0

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

9282.784  466.44    531.69

2705.82 25301.56 980812434.98

Sin embargo, estas no son las coordenadas correctas del centroide de la fuente en la imagen. Las coordenadas correctas están alrededor (300, 300). Además, para obtener este resultado, los datos de PSF se normalizaron para que el punto de máxima intensidad sea 1. Pero cuando cambio esta normalización para que el flujo total (suma de todos los píxeles) sea 1, el resultado del flujo después de ajustar I obtener es mucho más alto.

No estoy seguro de lo que está sucediendo detrás de escena aquí (me perdí en la documentación), y no estoy seguro de poder confiar en alguno de estos valores de flujo, considerando que x_0y y_0siempre están apagados. Entonces, me gustaría entender mejor: ¿cómo se encuentra exactamente el flujo de un objeto al ajustarlo a un PSF? ¿Y cómo debería normalizarse esa PSF?

Si está buscando el flujo total del sistema, simplemente dibuje un cuadro alrededor de su imagen y sume los valores de píxel para cada píxel en su cuadro. Eso es todo el flujo.
@zephyr Sí, pero ¿cómo se logra esto ajustando un PSF a la imagen?
Como respondió Carl Witthoft, no tiene sentido aplicar un PSF a una fuente extendida. Además, incluso si se tratara de una estrella, no calcularía el flujo ajustando primero un PSF. Haría exactamente lo que dije y dibujaría un cuadro alrededor de su objeto y sumaría los valores de los píxeles en ese cuadro (aunque puede usar el PSF para informar cuál debería ser su cuadro para un objeto puntual).
Cuando dice dibujar un cuadro alrededor del objeto, ¿cómo se elige el tamaño correcto del cuadro? Con un fondo distinto de cero y ruido en la imagen, una caja más grande aumentaría el flujo aunque la fuente no se extienda más hacia la caja más grande.
Además, lo siento, pero ¿cómo es un asteroide una fuente extendida? (este término no me era familiar hasta que lo busqué hace un momento) ¿No sería el tamaño angular de un asteroide fotografiado por WISE menor que la resolución del telescopio, clasificándolo como una fuente puntual?
Presumiblemente, ya ha corregido sus imágenes por sesgo, campo plano, etc. así que dibujar un cuadro más grande no debería darte más flujo (al menos no una cantidad significativa más). Generalmente, solo las estrellas cuentan como fuentes puntuales, sin embargo, su asteroide en su caso puede estar lo suficientemente cerca de una fuente puntual, pero de cualquier manera, es irrelevante para el problema que está tratando de resolver. Aunque estamos entrando en territorio de discusión y los comentarios no son para eso. Siéntase libre de hacer preguntas nuevas y adicionales sobre este intercambio de pila para obtener más aclaraciones.

Respuestas (2)

Realmente no puedes obtener un PSF para un objeto extendido. La función Point-Spread-Function es un parámetro de su sistema de imágenes que describe la forma de la imagen de una supuesta fuente puntual.

No tengo ningún conocimiento de lo que pretende hacer su paquete de python, por lo que no puedo comentar directamente sobre los resultados. Señalaré (lo siento) que el centroide geométrico de la imagen generalmente no es el mismo que el centroide de energía (brillo) de la imagen.

Además, el flujo total es solo la suma de todos los píxeles cubiertos por la imagen del asteroide (menos ruido de fondo y demás). No está claro por qué necesita el PSF si solo está haciendo cálculos de energía/potencia.

Bueno, también estoy usando el PSF para otros fines, pero una de las cosas que me gustaría hacer es encontrar el flujo total de la imagen de origen. Tenía la impresión de que podría lograr esto con la ayuda del PSF, pero no he podido encontrar nada en línea sobre cómo puede hacerlo exactamente. ¿Sabe cómo la normalización de la PSF podría marcar una diferencia en el flujo de la imagen de origen? Además, sí, las coordenadas del centroide que cité en mi pregunta corresponden a la intensidad máxima, no solo al centro geométrico.

La imagen es píxeles 2D, la rutina de ajuste de PSF haría algo como esto. Primero, elige la función PSF, que es una gaussiana 2D en este caso. Luego, la rutina elegirá un centroide, mu y varianza (o mus y varianzas).

Un par de cosas que complicarán la rutina. i) Pico local debido a un ruido. Esto estropeará el centroide. La solución es hacer la búsqueda del centroide usando promedios dados algunos tamaños de las áreas. Además, es posible que desee especificar qué tan grande debe ser el área de búsqueda para el lugar especificado inicialmente. O, si está seguro de la ubicación del centroide, puede arreglarlo y el centroide no sería una variable de elección. ii) Tamaño de la apertura. Si el objeto es una fuente puntual gaussiana 2D perfecta, el tamaño de la apertura no importa. Pero con el ruido y otros objetos circundantes, debe juzgar cuál debería ser el tamaño óptimo: demasiado grande = más ruido e incluir otros objetos, demasiado pequeño = forma de ajuste incorrecta debido a que domina el ruido. Puede haber algo más en qué pensar que no puedo recordar en este momento.

Hablando de esto, la rutina de ajuste puede adaptarse incluso a una fuente extendida, pero no obtendrá un buen resultado a menos que use un núcleo adecuado (es decir, no gaussiano).

Yo personalmente no sé acerca de la astrología. Usé IRAF, que tiene su equivalente como PyRAF en Python, creo. Es posible que desee verificar eso también.

Su problema sobre el centroide incorrecto, creo, las raíces de los picos locales del ruido y la rutina de búsqueda no tiene el tamaño suficiente para un buen promedio. Este problema conduce directamente a> 1 flujo total como también mencionó.