【问题标题】:Image data in mha brain tumor filemha 脑肿瘤文件中的图像数据
【发布时间】:2021-02-15 19:29:55
【问题描述】:

我有一个 MHA 文件,当我写的时候

from medpy.io import load
image_data, image_header = load("HG/0001/VSD.Brain.XX.O.MR_Flair/VSD.Brain.XX.O.MR_Flair.684.mha")
print(image_data.shape)

我得到一个元组 (160, 216, 176)。这些尺寸代表什么(供参考,这些是 BRATS 2013 的脑肿瘤图像)?感谢您的帮助。

编辑:在 Jupyter 上让滑块正常工作

import matplotlib.pyplot as plt
from ipywidgets import interact
import numpy as np
%matplotlib inline

@interact(x=(0, image_data.shape[2]))
def update(x):
    plt.imshow(np.flip(image_data[x].T, 0))

当然,您的代码可能适用于其他编辑器

【问题讨论】:

    标签: python image-processing medical medical-imaging


    【解决方案1】:

    根据documentation,load(image)“加载图像并返回一个ndarray,其中包含图像的像素内容以及标题对象。”

    medpy.io.load 的进一步下方,它说 image_data 是“图像数据为 numpy 数组,顺序为 x,y,z,c。”。


    编辑:因为我有点想看看这个文件中的实际内容,所以我编写了一个快速脚本(主要基于slider demo)来查看。我会把它留在这里,以防它对某人有用。 (点击“图层”滑块选择要绘制的z坐标。)

    from medpy.io import load
    
    image_data, image_header = load("/tmp/VSD.Brain.XX.O.MR_Flair.684.mha")
    
    import numpy as np
    import matplotlib.pyplot as plt
    from matplotlib.widgets import Slider, Button, RadioButtons
    
    fig, ax = plt.subplots()
    plt.subplots_adjust(bottom=0.25)
    
    axlayer = plt.axes([0.25, 0.1, 0.65, 0.03])
    slider_layer = Slider(axlayer, 'Layer', 1, image_data.shape[2], valinit=1, valstep=1)
    
    def update(val):
      layer = slider_layer.val
      ax.imshow(image_data[:,:,layer])
      fig.canvas.draw_idle()
    
    slider_layer.on_changed(update)
    
    ax.imshow(image_data[:,:,0])
    
    plt.show()
    

    (这间接证实了image_data 拥有一个 3-D 体素图像。)

    【讨论】:

    • 我的问题完全是关于 image_data 变量和每个维度的含义
    • 好吧,我的猜测是您的 mha 文件包含 3-D 图像吗?在这种情况下,这 3 个值可能是每个方向上的像素数。 (对不起,如果你自己想出了这么多。)
    【解决方案2】:

    只需在已接受的答案之上添加,我们也可以使用 subplotsanimation 可视化切片:

    from medpy.io import load
    image_data, image_header = load("VSD.Brain.XX.O.MR_Flair.684.mha")
    image_data = image_data / image_data.max()
    
    plt.figure(figsize=(20,32))
    plt.gray()
    plt.subplots_adjust(0,0,1,0.95,0.01,0.01)
    for i in range(ct.shape[0]):
        plt.subplot(16,10,i+1), plt.imshow(image_data[i]), plt.axis('off')
    plt.suptitle('Brain-Tumor CT-scan mha (raw) files', size=15)
    plt.show()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-24
      • 2017-09-12
      • 2019-09-13
      • 2020-10-11
      • 2020-08-04
      • 2012-03-19
      • 2020-03-07
      • 2022-12-25
      相关资源
      最近更新 更多