1

我正在尝试读取 czi 格式的图像,但是因为它们需要大量内存,所以我尝试在 memmap 文件中读取它们。

这是我使用的代码>

import czifile as czi
fileName = "Zimt3.czi"
# read file to binary
file = czi.CziFile(fileName)
imageArr = file.asarray(out="/media/my drive/Temp/temp.bin")

现在 imageArr 是 memmap 中维度为 (9,3,29584,68084,1) 的变量。这些是来自 Carl Zeiss 设备的高分辨率显微图像。

这是更多规格的屏幕截图。 ImageArr 规格

我认为这意味着 imageArr 包含 9 个尺寸为 (29584,68084,3) 的图像,但我无法提取这种 numpy 数组来可视化为图像。请您帮我将 memmap 中的 (9,3,29584,68084,1) 转换为 (29584,68084,3) 图像。

4

1 回答 1

0

它看起来像一个非常大的文件。如果你只是想可视化它,你可以使用 slideio python 包(http://slideio.com)。它利用内部图像金字塔。您可以以高分辨率读取部分图像或以低分辨率读取整个图像。下面的代码重新缩放图像,使传递的光栅的宽度为 500 像素(计算高度以保持图像大小比例)。

import slideio
import matplotlib.pyplot as plt

slide = slideio.open_slidei(file_path="Zimt3.czi",driver_id="CZI")
scene = slide.get_scene(0)
block = scene.read_block(size=(500,0))

plt.imshow(scene.read_block())

请注意,如果 matplotlib 有 1 或 3 个通道,它们可以显示图像。一个 CZI 文件可以有任意数量的通道。在这种情况下,您必须选择要显示的频道:

block = scene.read_block(size=(500,0), channel_indices=[0,2,5])

可视化的另一个问题可能是您的文件是 3D 或 4D 图像。在这种情况下,slideio 返回 3d 或 4d numpy 数组。Matplotlib 无法显示 3d 或 4d 图像。您将需要寻找特定的可视化包或选择 z 切片和/或时间范围:

block = scene.read_block(size=(500,0), channel_indices=[0,2,5], slices=(0,1), frames=(1,2))

有关更多详细信息,请参阅包文档。

于 2020-09-07T09:01:59.217 回答