You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从类型为|V376的H5文件提取可用于FFT2的MRI图像方阵?

解决Stanford 2D FSE H5文件的K空间数据提取问题

第一步:解析|V376类型的二进制数据

|V376是固定长度的字节数组类型,每个元素对应376字节的MRI原始采集数据(封装了K空间采样点、编码信息等),不是直接可用的数值张量,需要先解析为复数形式:

  1. 读取原始字节数据:
    import h5py
    import numpy as np
    
    with h5py.File('your_file.h5', 'r') as f:
        raw_byte_data = f['data'][()]  # 获取(10440,)的字节数组
    
  2. 转译复数采样点:Stanford 2D FSE数据通常用**16位整数对(实部+虚部)**存储复数,376字节对应94个复数点(94×4字节=376)。直接把整段字节转成int16数组,再组合为复数:
    int_array = np.frombuffer(raw_byte_data.tobytes(), dtype=np.int16)
    complex_kspace_raw = int_array[::2] + 1j * int_array[1::2]
    

第二步:重构K空间方阵

一维复数数组需要根据扫描参数重构为二维方阵,先从H5文件中提取关键参数(用f.visit(print)遍历所有键,找config或acquisition组下的参数):

  • reconMatrixSizeX/frequency_encode_steps:频率编码方向点数(通常是方阵边长,如256/320)
  • reconMatrixSizeY/phase_encode_steps:相位编码方向点数(与X一致即为方阵)

重构示例

假设参数为reconMatrixSizeX=256、reconMatrixSizeY=256:

# 截取对应长度的采样点,reshape为二维方阵
kspace_matrix = complex_kspace_raw[:256*256].reshape((256, 256))

如果原始复数数组长度远大于方阵总点数,说明是多切片/多回波数据,需先按切片拆分再取单切片数据reshape。

第三步:验证与可视化

重构完成后即可进行FFT变换和可视化:

import matplotlib.pyplot as plt

# K空间可视化
plt.figure(figsize=(8,8))
plt.imshow(np.log1p(np.abs(np.fft.fftshift(kspace_matrix))), cmap='gray')
plt.title('K-space')
plt.show()

# 转换为图像空间
recon_image = np.abs(np.fft.ifft2(np.fft.fftshift(kspace_matrix)))
plt.figure(figsize=(8,8))
plt.imshow(recon_image, cmap='gray')
plt.title('Reconstructed MRI Image')
plt.show()

补充提示

  • 若找不到参数,可尝试用256、320、512等常见MRI方阵尺寸reshape,观察重构图像是否合理。
  • 部分文件的字节块可能包含头信息(如前几个字节是相位编码索引),可打印前几个字节块的前10字节,判断是否有固定规律的数值,再剥离头信息后解析复数数据。

内容的提问来源于stack exchange,提问作者Giovanni Petrone

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 01:45:11