首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用numpy和pyfits在Python中缩小图像数组的快速方法

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

Stack Overflow用户
提问于 2014-02-05 12:52:02
回答 1查看 1.7K关注 0票数 2

我使用Python2.7.3与numpy和pyfits一起处理科学FITS文件。为了速度起见,我想以一半或四分之一的分辨率处理这些图像,并有以下代码:

代码语言:javascript
复制
# 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

这是可行的,但我想知道是否有一种更快、更自然的方法来减少数组。削减应尽早进行,其想法是,将处理的数据规模最小,可以接受。如果有一种方法可以读取经过简化的数据集,那将是非常理想的。但这种方法似乎并不存在(如果我错了,请纠正我)。小胖怎么样?或者是参与/数学/其他什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-05 12:56:46

pyfits获得的数据数组已经是一个NumPy数组。你不需要用它来创造一个。Moerover,您可以简单地在一个步骤中完成下采样:

代码语言:javascript
复制
img_data_r = hdulist[0].data[::4, ::4]

这不会复制数据,而只是以不同的步调复制一个新视图。如果您需要作为连续数组的下采样图像,请使用numpy.ascontiguousarray()

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

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

代码语言:javascript
复制
mogrify -resize 25% *.fits
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21577840

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档