Как извлечь функцию разброса точек из подходящего изображения? - PullRequest
0 голосов
/ 27 апреля 2019

Я новичок в программировании на Python, у меня есть изображение звезды .fits, и я хочу извлечь из него PSF.Как мне поступить так?

После этого, как я подгоню к ней гауссову кривую?

Ответы [ 2 ]

2 голосов
/ 20 июня 2019

Что именно вы имеете в виду под «извлечением из него PSF»? Хотите найти свою позицию? Вы хотите вырезать коробку вокруг него? Что ты в конце концов хочешь с этим делать?

Предполагая, что у вас просто есть изображение image.fits с PSF, вы можете использовать astropy.modeling, чтобы подогнать 2D гауссов к вашему PSF, после выяснения, где находится его центр на предоставленном изображении.

import numpy as np
import matplotlib.pyplot as plt
from astropy.modeling import models, fitting
from astropy.io import fits

# Load the data and find center of PSF
image = fits.getdata('path/image.fits')
cents = np.where(image == np.max(image))
xc = int(cents[1])
yc = int(cents[0])

# Cut out smaller box around PSF
bb = 30
box = image[yc-bb:yc+bb,xc-bb:xc+bb]
yp, xp = box.shape

# Generate grid of same size like box to put the fit on
y, x, = np.mgrid[:yp, :xp]
# Declare what function you want to fit to your data
f_init = models.Gaussian2D()
# Declare what fitting function you want to use
fit_f = fitting.LevMarLSQFitter()

# Fit the model to your data (box)
f = fit_f(f_init, x, y, box)

# Plot the data with the best-fit model
plt.figure(figsize=(8, 2.5))
plt.subplot(1, 3, 1)
plt.imshow(box)
plt.title("Data")
plt.subplot(1, 3, 2)
plt.imshow(f(x, y))
plt.title("Model")
plt.subplot(1, 3, 3)
plt.imshow(box - f(x, y))
plt.title("Residual")
plt.show()

Изображение: 2D гауссовское соответствие PSF

0 голосов
/ 20 июня 2019

Я рекомендую использовать функции, доступные в astropy или photoutils . Я использовал воздушную свертку в астропии для моделирования PSF, но из вашего вопроса я думаю, что страница с фотооборудованием PSF или ePSF - это то, что вы ищете для.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...