天文图像处理工具--photutils介绍

photutils:天文图像处理工具,只要用来提取图像中的源

官方链接:https://photutils.readthedocs.io/en/stable/index.html

官方文档中各功能的用法介绍的很详细,其主要功能有:

  • 孔径测光(不懂)
  • PSF拟合(点扩散函数)
  • 天文图像中提取点源
  • 标记源的中心
  • 背景估计
  • psf核匹配
  • 估计探测到的源的形态参数

安装:

直接用pip install photutils安装的是1.0.2版本,而最新的是1.2.0,并且官方文档中的例子是基于1.2.0版的,所以用pip直接安装会使得例子跑不通,报缺少一些函数。

去git上下载新版本,却装不上,尽力了,无解,细节就不叙述了。

解决办法,先装老版本,缺少的函数或者报错的文件在git上找到相应的新版本文件,替换掉老版本安装路径里相应的py文件。

使用:

各个功能的使用方法直接看官方文档,但是文档的版本和实际自己安装的版本不一样,所以在遇到报错的时候要在自己电脑上装的包的源码里看怎么使用。一般版本之间都是函数的小改动,所以官方文档和源码结合一下就能弄明白报错怎么改。

样例:

标记出源

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import numpy as np
import matplotlib.pyplot as plt
from astropy.visualization import SqrtStretch
from astropy.visualization.mpl_normalize import ImageNormalize
import photutils
from photutils.datasets import make_100gaussians_image
from photutils.segmentation import detect_threshold
from astropy.convolution import Gaussian2DKernel
from astropy.stats import gaussian_fwhm_to_sigma
from photutils.segmentation import detect_sources
from photutils.segmentation import deblend_sources

# 生成数据,其实就是一个二维数组,里面有100个高斯分布的源
data = make_100gaussians_image()
# 背景阈值
threshold = detect_threshold(data, nsigma=2.)

sigma = 3.0 * gaussian_fwhm_to_sigma # FWHM = 3.
kernel = Gaussian2DKernel(sigma, x_size=3, y_size=3)
kernel.normalize()

# 探测源
segm = detect_sources(data, threshold, npixels=5, kernel=kernel)

# 把两个挨着的源分开
segm_deblend = deblend_sources(data, segm, npixels=5, kernel=kernel,
nlevels=32, contrast=0.001)

# 画出结果
norm = ImageNormalize(stretch=SqrtStretch())
fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(10, 12.5))
ax1.imshow(data, origin='lower', cmap='Greys_r', norm=norm)
ax1.set_title('Data')
cmap = segm.make_cmap(seed=123)
ax2.imshow(segm_deblend.outline_segments(), origin='lower', cmap=cmap, interpolation='nearest')
ax2.set_title('Segmentation Image')
plt.show()

结果:

image-20211003213117540