Photutils源检测不适用于小图片,适用于大图片,为什么?

2024-04-29 07:16:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试着在照片上探测恒星/天体。 这就是我能做好的地方,概述如下:

pic like Hubble Deep Field

按照建议given on this site我有以下代码:

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)

工作正常,输出如下:

lots of stars with some marked

如果我将第10行修改为threshold = median + (30. * std),那么我得到的输出中所标记的星号要少得多,正如预期的那样。这是输出:

enter image description here

现在,我想把它用于这个文件:

pic with two stars

为此,我运行以下代码,源代码是从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行给出多小的treshold,它只能找到一颗星,而不是两颗星。你知道吗

two stars, one is circled

为什么会这样?我该怎么解决?你知道吗


Tags: fromimportnormdatathresholdstatspltsigma
1条回答
网友
1楼 · 发布于 2024-04-29 07:16:49

box\u size=4时,我得到这个结果:3stars

在jupyter笔记本中运行脚本之前,我必须安装这些模块:

pip3 install jupyter lightkurve photutils

–并使用此命令查看图像结果:

plt.interactive(True)
%matplotlib

相关问题 更多 >