1

假设我有大量数据存储在 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 GB)。

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

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

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

4

1 回答 1

1

你说它“显然不能存储在内存中”,但下面的计算却不然。

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

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

但是,为了处理您需要做的修补工作,您可以将每个像素从一个文件流式传输到另一个文件。这假定格式是使用线性编码格式(如 BMP 或 TIFF)的无损位图。只需读取每个文件并附加到您的结果文件。

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

于 2017-09-22T05:30:32.720 回答