Photutils Source Detection не работает для маленьких картинок, работает для больших, почему?

1

Я пытаюсь обнаружить звезды/астрономические объекты на картинке. Это картина, где я могу сделать это хорошо, как показано ниже:

Изображение 174551

Следуя советам, данным на этом сайте, у меня есть этот код:

from astropy.stats import sigma_clipped_stats
from photutils.datasets import make_100gaussians_image
from photutils import find_peaks
import matplotlib.pyplot as plt
from astropy.visualization import simple_norm
from astropy.visualization.mpl_normalize import ImageNormalize
from photutils import CircularAperture
data = make_100gaussians_image()
mean, median, std = sigma_clipped_stats(data, sigma=3.0)
threshold = median + (5. * std)
tbl = find_peaks(data, threshold, box_size=11)
positions = (tbl['x_peak'], tbl['y_peak'])
apertures = CircularAperture(positions, r=5.)
norm = simple_norm(data, 'sqrt', percent=99.9)
plt.imshow(data, cmap='Greys_r', origin='lower', norm=norm)
apertures.plot(color='#0547f9', lw=1.5)
plt.xlim(0, data.shape[1]-1)
plt.ylim(0, data.shape[0]-1)

Он отлично работает, это результат:

Изображение 174551

Если я изменю строку 10 на threshold = median + (30. * std) то я получаю вывод со значительно меньшим количеством звезд, отмеченных, как и ожидалось. Это результат:

Изображение 174551

Теперь я хочу использовать его для этого файла:

Изображение 174551

Для этого я запускаю этот код, источник загружается из файла FITS:

import lightkurve
tpf=lightkurve.targetpixelfile.KeplerTargetPixelFile('ktwo201103700-c102_lpd-targ.fits')
from astropy.stats import sigma_clipped_stats
from photutils.datasets import make_100gaussians_image
from photutils import find_peaks
import matplotlib.pyplot as plt
from astropy.visualization import simple_norm
from astropy.visualization.mpl_normalize import ImageNormalize
from photutils import CircularAperture
#data = make_100gaussians_image()
data = tpf.flux[100]
mean, median, std = sigma_clipped_stats(data, sigma=3.0)
threshold = median + (0.1 * std)
tbl = find_peaks(data, threshold, box_size=11)
#tbl['peak_value'].info.format = '%.8g'  # for consistent table output
#print(tbl[:10])    # print only the first 10 peaks
positions = (tbl['x_peak'], tbl['y_peak'])
apertures = CircularAperture(positions, r=1.)
norm = simple_norm(data, 'sqrt', percent=99.9)
plt.imshow(data, cmap='Greys_r', origin='lower', norm=norm)
apertures.plot(color='#0547f9', lw=1.5)
plt.xlim(0, data.shape[1]-1)
plt.ylim(0, data.shape[0]-1)

Выход ниже. Независимо от того, какую небольшую сумму я даю в строке 13, она находит только одну звезду, а не две, как хотелось бы.

Изображение 174551

Почему это и как я могу это исправить?

Теги:
image-processing
astronomy
astropy
physics

1 ответ

1
Лучший ответ

С box_size = 4 у меня есть этот результат: Изображение 174551

Я должен был установить эти модули, прежде чем запускать ваш скрипт в ноутбуке jupyter:

pip3 install jupyter lightkurve photutils

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

plt.interactive(True)
%matplotlib
  • 1
    Отсюда: photutils.readthedocs.io/en/stable/background.html : «Photutils предоставляет класс Background2D для оценки 2D-фона и фонового шума в астрономическом изображении. Background2D требует размера поля (box_size), в котором нужно оценить фон. Выбор размера блока требует некоторой осторожности со стороны пользователя. Размер блока обычно должен быть больше, чем типичный размер источников в изображении, но достаточно мал, чтобы инкапсулировать любые вариации фона ». Не на странице об обнаружении источника, но все же я думаю, что это объясняет проблему.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню