我使用Python2.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这是可行的,但我想知道是否有一种更快、更自然的方法来减少数组。削减应尽早进行,其想法是,将处理的数据规模最小,可以接受。如果有一种方法可以读取经过简化的数据集,那将是非常理想的。但这种方法似乎并不存在(如果我错了,请纠正我)。小胖怎么样?或者是参与/数学/其他什么?
发布于 2014-02-05 12:56:46
从pyfits获得的数据数组已经是一个NumPy数组。你不需要用它来创造一个。Moerover,您可以简单地在一个步骤中完成下采样:
img_data_r = hdulist[0].data[::4, ::4]这不会复制数据,而只是以不同的步调复制一个新视图。如果您需要作为连续数组的下采样图像,请使用numpy.ascontiguousarray()。
这种下采样方法只保留16个像素中的一个,并且在所有其他像素中完全删除信息。如果您需要更高质量的下采样,而不是在代码中执行,那么最好使用Imagemagick对FITS文件进行降采样。这也将减少从磁盘读取文件所需的时间。
要将当前目录中的所有FITS文件转换到位(警告:大版本被覆盖),您可以使用
mogrify -resize 25% *.fitshttps://stackoverflow.com/questions/21577840
复制相似问题