我有来自SPITZER的4000个拟合文件图像,每个图像在一段时间内包含相同的星形。每个图像是32像素×32像素×64随后时间帧的光度测量立方体。我需要浏览所有单帧并按亮度排列像素。使用Python并不难,但有时我在帧中有短暂的事件/人工制品,它比明星最亮的像素更亮(见下文)。这些人工制品仅持续一到两个后续的时间框架
如何轻松纠正人工制品?是否有astropy / pyfits包这样做?或者SPITZER中的某种坏像素标记(我知道开普勒图像标记了坏像素)?
可选:以矢量化形式提供代码,避免循环会很方便,这样我就可以节省计算时间
两个帧的比较,在左边一个一切都很好,在右上角看到的这个人工制品中的一个,比任何星形像素都亮。注意:人工制品没有达到饱和度。
答案 0 :(得分:1)
遵循“只用谷歌搜索”的建议,我发现了一个令人讨厌的功能-DAOStarFinder-可以满足我的需求。它扫描一幅图像的光源,并且可以设置检测阈值,例如物体的“圆度”,“清晰度”或亮度必须分别在[-0.05,0.05],[0.6,0.8]或> 5 * standard_deviation之间。我必须说,我给人的印象是圆度和锐度度量不能始终如一地工作,有时同一对象的值从一帧到另一帧变化很大。但是DAOStarFinder还为您提供了对象通量密度的粗略估计,我可以用它来对源进行排序并过滤掉相关的源。这是DAOStarFinder的example script和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)