Photutils 是一个用于从天文学图像中提取定量数据的 Astropy 协调包,定位为替代 SExtractor、DAOPHOT 等传统工具的模块化 Python 接口,并与 Astropy 生态集成。官方文档位于 https://photutils.readthedocs.io/ ,代码仓库位于 https://github.com/astropy/photutils 。常见搜索模式包括 photutils.aperture、photutils.detection、photutils.background、photutils.psf。
用途方面,资料列出以下使用场景:在天文图像中检测恒星或星系(DAOStarFinder、IRAFStarFinder);使用圆形、椭圆形或矩形孔径测量目标亮度;执行 PSF 拟合测光(对拥挤星场尤其必要);估计并减去复杂的二维背景(天空背景);计算天文源的质心(精确中心);执行“等光度分析”(测量星系形状);基于阈值对图像进行分割。
核心原则包括三点。第一,背景优先:没有正确的背景减除就无法获得准确的光度,Photutils 提供估计全局与局部天空水平的工具。第二,孔径测光与 PSF 测光之别:孔径测光是对固定形状内的像素求和,最适合孤立源或星系;PSF 测光是用恒星的数学模型拟合数据,最适合重叠恒星或高精度工作。第三,单位与 WCS:Photutils 完全支持单位感知;若图像带有 WCS 元数据,孔径可以用天球坐标(度)而非仅像素来定义。
主要能力与常用模块:背景估计(photutils.background)提供 Background2D、MedianBackground 等,用于稳健的二维背景映射,并可报告全局中位背景;源检测(photutils.detection)提供 DAOStarFinder 与 IRAFStarFinder 两种寻星算法;孔径测光(photutils.aperture)支持 CircularAperture、CircularAnnulus 及 aperture_photometry,并可通过环形孔径做局部背景减除;PSF 测光(photutils.psf)提供 BasicPSFFitter、IntegratedGaussianPRF、MMMBackground 等,用于拟合重叠源并可获取残差图像;质心计算(photutils.centroids)提供 centroid_com 与 centroid_2dg 等方法。
使用方式:安装命令为 pip install photutils。标准导入包括 numpy、matplotlib.pyplot、astropy.units、photutils.detection 的 DAOStarFinder、photutils.aperture 的 CircularAperture 与 aperture_photometry、photutils.background 的 Background2D 与 MedianBackground。基本流程为:先检测源(如 DAOStarFinder(fwhm=3.0, threshold=5.*std) 作用于 image - background),再在检测位置上定义孔径(如 CircularAperture(positions, r=4.0)),最后执行孔径测光(aperture_photometry(image - background, apertures))。资料还给出背景估计、源检测、孔径测光、PSF 测光、质心计算及完整“检测到星等”流程的代码示例。
关键规则方面,资料建议:先减背景;对天空水平变化的图像使用 Background2D 的二维网格估计;为准确估计误差向 aperture_photometry 提供探测器增益;使寻星器的 fwhm 参数与图像实际 PSF 匹配;将孔径向量化,一个 CircularAperture 对象可容纳数千个位置;若具备 WCS,使用 SkyAperture 以 RA/Dec 定义孔径。同时提示:不要忽略掩膜像素(宇宙射线、饱和星等坏像素应通过 mask 传入);不要使用过小孔径(损失光,需孔径校正)或过大孔径(引入噪声);不要盲目信任默认值,应把孔径叠加到图像上验证;不要混淆像素与天空单位。资料还列出反模式示例(手动像素求和、在原始高背景数据上检测)及其正确替代写法。
适用场景与限制:适用于天文图像中的源检测、亮度测量、拥挤星场处理、二维背景估计与减除、质心定位、星系形状分析与阈值分割。限制与常见问题是:拥挤星场中孔径测光会失效,应改用 PSF 测光;背景减除过于激进时暗星可能出现负的 aperture_sum,需在取对数前过滤 aperture_sum > 0 的结果;坐标顺序为 (x, y) 即 (列, 行),访问 numpy 数组应为 image[y, x]。性能方面,资料提到当前 Photutils 并非所有拟合器都原生支持 n_jobs,可通过将图像分块并行处理;对大图可使用 aperture.to_mask() 只提取相关子数组。关于收费、价格、平台可用性等,资料未提供。