2

我正在使用带有 numpy 和 pyfits 的 Python 2.7.3 来处理科学 FITS 文件。为了速度,我想以一半或四分之一的分辨率处理图像,并拥有以下代码:

# Read red image
hdulist = pyfits.open(red_fn)
img_data = hdulist[0].data
hdulist.close()
img_data_r = numpy.array(img_data, dtype=float)
# Scale it down to one quarter size
my=[]
for line in img_data_r[::4]:
    myline=[]
    for item in line[::4]:
        myline.append(item)
    my.append(myline)
img_data_r = my

这行得通,但我想知道是否有更快、更原生的方法来减少数组。减少应该尽早发生,其想法是要处理的数据具有最小的可接受大小。如果有一种使用 pyfits 读取精简数据集的方法,那将是理想的。但是这样的方法似乎不存在(如果我错了,请纠正我)。numpy 怎么样?还是 scipy/数学/其他?

4

1 回答 1

3

您从中获得的数据数组pyfits已经是一个 NumPy 数组。您无需从中创建一个。此外,您只需一步即可进行下采样:

img_data_r = hdulist[0].data[::4, ::4]

这不会复制数据,而是简单地复制具有不同步幅的新视图。如果您需要将下采样图像作为连续数组,请使用numpy.ascontiguousarray().

这种下采样的方法只保留了十六分之一的像素,而完全丢弃了所有其他像素中的信息。如果您需要更高质量的下采样,而不是在您的代码中进行,您最好使用 Imagemagick 对您的 FITS 文件进行下采样。这也将减少从磁盘读取文件所需的时间。

要转换当前目录中的所有 FITS 文件(警告:大版本会被覆盖),您可以使用

mogrify -resize 25% *.fits
于 2014-02-05T12:56:46.990 回答