gpt4 book ai didi

python - 使用 numpy 和 pyfits 在 Python 中按比例缩小图像数组的更快方法

转载 作者:太空宇宙 更新时间:2023-11-04 01:20:31 34 4
gpt4 key购买 nike

我使用带有 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/math/其他?

最佳答案

您从 pyfits 获得的数据数组已经是一个 NumPy 数组。您不需要从中创建一个。此外,您可以一步简单地进行下采样:

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

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

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

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

mogrify -resize 25% *.fits

关于python - 使用 numpy 和 pyfits 在 Python 中按比例缩小图像数组的更快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21577840/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com