用Python构建高分辨率图像

时间:2013-06-06 11:40:40

标签: python image numpy matplotlib large-data

假设我有大量数据存储在HDF5数据文件中(大小:20k x 20k,如果不是更多),我想使用Python从所有这些数据创建一个图像。显然,这些大量数据无法在没有错误的情况下打开并存储在内存中。因此,是否有其他库或方法不需要将所有数据转储到内存中然后处理成图像(如库:image,matplotlib,numpy等处理它)?

感谢。

这个问题来自我提出的类似问题:Generating pcolormesh images from very large data sets saved in H5 files with Python但我认为我在这里提出的问题涉及更广泛的应用。


编辑(7.6.2013)

请允许我进一步澄清我的问题:在第一个问题(链接)中,我使用了我能想到的最简单的方法,从存储在多个文件中的大量数据中生成图像。此方法用于导入数据,使用matplotlib生成pcolormesh图,然后从该图中保存高分辨率图像。但是这种方法存在明显的内存限制。在出现内存错误之前,我只能从文件中导入大约10个数据集。

在那个问题中,我问是否有更好的方法将数据集(保存在HDF5文件中)拼凑到一个图像中,而不将所有数据导入计算机的内存。 (我可能需要将这些数据集中的100个拼凑成一个单独的图像。)另外,我需要用Python做所有事情以使其自动化(因为这个脚本需要经常运行不同的数据集)。

我试图使用各种库来实现这个问题时发现的真正问题是:我如何使用Python中的高分辨率图像?例如,如果我有一个非常高分辨率的PNG图像,我怎么能用Python操作它(裁剪,分割,运行fft等)?根据我的经验,在尝试导入高分辨率图像时,我总是遇到记忆问题(想想显微镜或望远镜上的高分辨率图片(我的应用是显微镜))。有没有设计用于处理此类图像的库?

或者,相反,如何从Python中保存在文件中的大量数据中生成高分辨率图像?同样,数据文件可能是任意大的(如果不是更大,则为5-6千兆字节)。

但在我的实际应用中,我的问题是:是否有一个库或某种技术可以让我从我的设备中获取所有数据集(保存在HDF5中)并将它们一起修补从所有这些生成图像?或者我可以将所有数据集保存在单个(非常大)的HDF5文件中。那我怎么能导入这个文件,然后从它的数据创建一个图像?

我不关心在某些交互式情节中显示数据。情节的分辨率并不重要。我可以轻松地使用较低的分辨率,但我必须能够从数据中生成并保存高分辨率图像。

希望这能澄清我的问题。请随意询问有关我的问题的任何其他问题。

1 个答案:

答案 0 :(得分:0)

你说它“显然不能存储在内存中”,但以下计算则另有说法。

20,000 * 20,000 pixels * 4 channels = 1.6GB

最合理的现代计算机有8GB到16GB的内存,因此处理1.6GB应该不是问题。

但是,为了处理您需要执行的拼接处理,您可以将每个像素从一个文件流式传输到另一个文件。这假设格式是使用线性编码格式(如BMP或TIFF)的无损位图。只需阅读每个文件并附加到结果文件即可。

如果文件大小不同或在某种类型的网格中拼凑在一起,您可能需要有点聪明。在这种情况下,您需要计算结果图像的总尺寸并偏移文件写入指针。