1

祝大家有美好的一天。

我的 HDD (9.7 Gb) 上碰巧有一个非常大的 .mha 文件,它是大脑的 3D 图像。我知道这张图片的形状,并且出于报告的需要,我想提取它的一部分,以获得可以保存为 .png 的 2D 图像。

问题是我的 16 Gb RAM 计算机不允许我加载完整的图像,因此我想知道是否有一种方法可以提取该图像的 2D 切片而不将整个图像加载到 RAM 中。对于较小的图像,我使用sitk.GetArrayFromImage(sitk.ReadImage(fileName))并输入它,pyplot.imshow()但这意味着加载我想要避免的整个图像。

我想了一段时间来numpy.memmap创建一个临时.npy文件,我可以在其中存储整个数组,然后获取它的一部分,但是我无法使用sitk.GetArrayFromImage(sitk.ReadImage(fileName)).

有谁知道如何做到这一点?

提前致谢 !

4

1 回答 1

1

使用 SimpleITK,您可以读取图像的标题,以获取其大小信息(和其他元数据)。然后你可以告诉 ImageFileReader 只读取图像的一个子部分。

以下示例演示了如何执行此操作:

https://simpleitk.readthedocs.io/en/master/link_AdvancedImageReading_docs.html

关键是先调用ImageFileReader 的ReadImageInformation 方法。这将获取所有标题信息。然后调用 SetExtractIndex 和 SetExtractSize 指定要加载的子区域,然后调用 Execute 读取图像。

于 2020-07-31T13:39:56.147 回答