SimpleITK 读取图像的一部分

SimpleITK reading a slice of an image

大家好。

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

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

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

从图像到它的数组

有人知道怎么做吗?

提前致谢!

使用 SimpleITK,您可以读取图像的 header,以获取其尺寸信息(以及其他 meta-data)。然后您可以告诉 ImageFileReader 只读取图像的 sub-section。

以下示例演示了如何操作:

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

关键是先调用ImageFileReader的ReadImageInformation方法。这将获取所有 header 信息。然后调用 SetExtractIndex 和 SetExtractSize 指定 sub-region 在调用 Execute 读取图像之前加载