.h5 文件中的数据集,类型为“|V376">

问题描述 投票:0回答:1

我正在尝试从 .h5 文件获取 MRI 图像数据,但我认为打印图像所需的张量的数据集存储在 (10440,) 类型“|V376”> 数据集中。我需要的是一个方阵,我可以用 fft2 对其进行变换并可视化 k 空间。有没有办法知道我需要在哪里查找数据?我从这里下载了该文件:http://mridata.org/list?project=Stanford%202D%20FSE。我尝试下载不同的文件,但它们都有这种奇怪的类型......

我打印了 .h5 文件中的单数组中包含的“数据”项,我得到的是一个列表数组,每个列表末尾都有一个浮点数组。我最后提取了这些数组,但它们没有正方形,所以它们不能用来形成图像。

fft h5py
1个回答
0
投票

你应该认为HDF5是一个容器,而不是一个固定的格式。因此,如上所述,在了解架构之前,您无法读取数据集。我翻阅了 mridata.org 网站上的文档。这是一个复杂的模式!基本上,MRI 数据位于名为

['dataset']['data']
的数据集中。该数据集是复合数据集(例如,将数据类型的混合存储为“字段/列”)。让事情变得复杂的是,一些字段也是复合数据集。幸运的是,您想要的图像数据我认为位于一个简单的字段中(也称为
'data'
)。该字段包含对象数据(这就是使用此数据结构保存时 np.arrays 的存储方式)。

为了测试我的理论,我在引用的站点下载了第一个文件。 (文件名:

efac30a2-8b30-48e8-9a7c-aad2a05a46df.h5
。下面的代码询问文件并打印
['dataset']['data']
数据集的形状和数据类型。它有
shape= (5824,)
,因此有 5824 行图像数据。然后循环遍历数据集的前 10 行该数据集中的
'data'
字段并打印形状和 dtype。它显示它们都是
shape=(11264,)
dtype=float32
。注意
img_data_arr
是我认为的图像数据。

代码如下:

with h5py.File('efac30a2-8b30-48e8-9a7c-aad2a05a46df.h5','r') as h5f:
    for name, h5_obj in h5f['dataset'].items():
        if isinstance(h5_obj, h5py.Dataset):
            print(f'For dataset: {name}; Shape: {h5_obj.shape}')
            print(h5_obj.dtype)
            
    data = h5f['dataset']['data']['data']
    print('\nFor data field in data dataset:'\
          f'\nShape: {data.shape}, Dtype: {data.dtype}') 
    for i in range(10):
        img_data_arr = data[i][()]     
        print(i, img_data_arr.shape, img_data_arr.dtype) 

注意:mridata.org 网站还提供了 Python 代码,用于构建一套完整的工具来读取和处理这些数据。

© www.soinside.com 2019 - 2024. All rights reserved.