Python:按亮度排列适合文件像素,忽略人工制品

Python: Order fits-file pixel by brightness, ignore artefacts

我有 4000 个来自 SPITZER 的拟合文件图像,每个图像在一段时间内都包含同一颗星。每个图像都是一个 32 像素 * 32 像素 * 64 个后续时间帧的光度立方体。我需要查看所有单帧并按亮度对像素进行排序。使用 Python 并不难,但有时我在帧中出现短暂的 events/artefacts,它比恒星最亮的像素更亮(见下文)。这些人工制品仅持续一两个后续时间范围

我怎样才能轻松纠正伪像?是否有一个 astropy/pyfits 包可以做到这一点?或者 SPITZER 中的某种坏像素标记(我知道开普勒图像有坏像素标记)?

可选:如果代码采用矢量化形式会很方便,避免循环,这样我就可以节省计算时间


两帧对比,左边一帧一切正常,右边一帧你在右上角看到这个伪像之一,比任何星形像素都亮。注意:人工制品没有达到饱和度。

根据对 "just google it" 的建议,我找到了一个天文函数 - DAOStarFinder - 它可以满足我的需求。它扫描图像中的光源,并且可以设置检测阈值,例如对象的 "roundness"、"sharpness" 或亮度必须分别介于 [-0.05,0.05]、[0.6,0.8] 或 >5*standard_deviation 之间。我必须说,我的印象是圆度和锐度测量并不一致,有时同一对象的值从一帧到另一帧变化很大。但是 DAOStarFinder 还为您提供了对象通量密度的粗略估计,我可以使用它来对源进行排序并过滤掉相关的源。这是DAOStarFinder的link到example script and to the documentation。这里的示例脚本明确:

>>> from astropy.stats import sigma_clipped_stats
>>> from photutils import datasets
>>> from photutils import DAOStarFinder

>>> hdu = datasets.load_star_image()    
>>> data = hdu.data[0:400, 0:400]    
>>> mean, median, std = sigma_clipped_stats(data, sigma=3.0, iters=5)
>>> daofind = DAOStarFinder(fwhm=3.0, threshold=5.*std)    
>>> sources = daofind(data - median)    

>>> print(sources)