【问题标题】:Reading header information from .mha file从 .mha 文件中读取头信息
【发布时间】:2021-04-08 17:53:37
【问题描述】:

我只想从.mha 文件中读取标题。理想情况下,它会给我带来与仅读取带有元数据的 .mhd 文件相同的效果。
我正在使用 SimpleITK 进行阅读,虽然它可以很好地读取图像,但我特别想创建一个元数据字典。
.mha 基本上是 .mhd 与原始图像相结合,但我找不到任何关于如何将它们分开。我在 ITK 文档中找到了 here:

要跳过图像数据文件中的标头字节,请使用
HeaderSize = X
其中 X 是在读取图像数据之前要在文件开头跳过的字节数。如果您知道没有尾随字节(文件末尾的额外字节),您可以指定
HeaderSize = -1
MetaImage 会自动计算数据文件中提取的字节数,假设这些字节在数据文件的头部,并在开始读取图像数据之前自动跳过它们。

但我在 SimpleITK 中找不到此功能。

【问题讨论】:

    标签: python itk simpleitk medical-imaging


    【解决方案1】:

    有一个 SimpleITK 功能允许您执行此操作,该功能通常用于 DICOM 和 nifti 文件格式。我用它只读取 MHD 文件,而不将原始数据拉入内存:

    import pathlib
    import SimpleITK as sitk
    
    #Use pathlib so it works on whatever OS
    mha_dir = pathlib.Path("/you/files/location")
    mha_file = str(mha_dir.joinpath(mha_file))
    
    #Set up the reader and get the file information 
    reader = sitk.ImageFileReader()
    reader.SetFileName(mha_file)   # Give it the mha file as a string
    reader.LoadPrivateTagsOn()     # Make sure it can get all the info
    reader.ReadImageInformation()  # Get just the information from the file
    
    # From here you can just parse out whatever you want, just like a SimpleITK image
    
    xdim, ydim, zdim = reader.GetSize() # If you want the x, y, z 
    xres, yres, zres = reader.GetSpacing() # If you want the image resolution, etc.
    
    meta_keys = reader.GetMetaDataKeys()
    for key in meta_keys:
        print(key)
        print(reader.GetMetaData(f'{key}'))
    
    
    

    【讨论】:

    • 不幸的是,它并没有解决我的问题,因为我不想阅读图像,而是我只想拥有标题信息,而在这里,sitk 并没有在其元数据中显示它并且有没有足够的Get() 函数来提取所有这些(例如解剖方向)
    • 我的 RAM 永远不会在 14 GB 文件中使用它,所以我认为它不会在文件中读取。如果您想要 mha 中存在的元数据,您可以使用 reader.GetMetaDataKeys(),然后您可以像这样运行它们:reader.GetMetaData('ITK_original_direction') 等。
    • 这就是问题所在。 SimpleITK 不读取标头信息。我在发布到堆栈之前先尝试了您的方法,但它返回一个关于使用 MetaImageIO 读取的元数据键,没有别的。
    • 这真的很奇怪。我得到了 5 个可用的元数据密钥。你用什么来写mha文件?我想知道它是否与正在编写的内容的格式有关,然后被 SimpleITK 识别。 NIFTI 文件格式或人类可读的 MHD 文件类型是否适用于您正在尝试的内容?如果没有,可能值得探索直接解析字节,这有点复杂。
    • 我尝试过使用 nifti 和 dicom,它就像你描述的那样在那里工作,但使用 mha 或 mhd 我就是无法让它工作。也许我有一个奇怪的数据集。我尝试直接解析字节,但我想出或找到的每种方法都包括读取所有出于性能原因而欠佳的图像数据(它将用于读取许多系列图像)
    猜你喜欢
    • 2013-06-28
    • 1970-01-01
    • 2013-09-19
    • 2013-12-22
    • 1970-01-01
    • 2014-05-27
    • 2011-05-09
    • 1970-01-01
    • 2015-08-20
    相关资源
    最近更新 更多