繁体   English   中英

使用numpy和pyfits在Python中缩小图像数组的更快方法

[英]Faster method of scaling down image array in Python using numpy and pyfits

我正在将Python 2.7.3与numpy和pyfits配合使用,以处理科学的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

这行得通,但是我想知道是否有更快,更本地化的方法来减少阵列。 减少应该尽早进行,其想法是要处理的数据具有最小的可接受大小。 如果有一种方法可以读取带有pyfit的精简数据集,那将是理想的选择。 但是这种方法似乎不存在(如果我错了,请纠正我)。 numpy怎么样? 还是scipy / math /其他?

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

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

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

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

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

mogrify -resize 25% *.fits

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM