参考资料:https://github.com/Deep-Imaging-Group/MD-Recon-Net(这份资料的数据似乎和现在官网的数据格式不太一样)
在这篇博客里,我们将学会如何使用 CC-359 数据集中的数据。这里我们针对 CC-359 中的 single_coil 部分。
CC-359 官网下载地址为:CC-359数据集
由于访问官网需要科学上网,这里我也放了一份到百度网盘中,方便大家下载。提取码:c9yt
首先我们需要明确是,这份数据集以 numpy 数组形式存储,其中的数据是图像的频域数据。每个 .npy 文件的尺寸为(img_nums, 256, 256, 2), 第一维为该 .npy 文件所含 MRI 图片的数量,第二、三维为每张图片的宽高(256 x 256),最后一维2代表频域数据的实部和虚部。
mask 为采样模板,尺寸为(256,256),由 0 、1组成。这里我使用的是顶部所列“参考资料”里的mask,也可以通过百度网盘下载。提取码:722w
代码如下:
import torch
import matplotlib.pyplot as plt
import numpy as np
import scipy.io as sio
def to_complex(data):
# from data[256,256,2] to [256,256]complex
data = data[:,:,0] + 1j*data[:,:,1]
return data
file_path = "/home/jinfeng/Desktop/Brain_workplace/Brain_datasets/Train/e13991s3_P01536.7.npy"
data = np.load(file_path)
# print(data.shape) # (170, 256, 256, 2),最后一维代表复数,实部和虚部分开存储
# mask 为所用的欠采样模板,(256,256)
mask = sio.loadmat("/home/jinfeng/Desktop/Brain_workplace/MD-Recon-Net-master/mask/brain/radial/radial_256_256_20.mat")['Umask']
target_kspace = data[100] # (256,256,2), 全采样 k-空间数据,最后一维代表复数,实部和虚部分开存储
# K空间欠采样
under_kspace = np.zeros_like(target_kspace)
under_kspace[:,:,0] = np.fft.ifftshift(np.where(mask == 0, 0,np.fft.fftshift(target_kspace[:,:,0]))) #保留大部分低频成分
under_kspace[:,:,1] = np.fft.ifftshift(np.where(mask == 0, 0,np.fft.fftshift(target_kspace[:,:,1]))) #保留大部分低频成分
#转成 tensor,之后训练网络的时候需要
target_kspace_tensor = torch.from_numpy(target_kspace)
under_kspace_tensor = torch.from_numpy(under_kspace)
#(256,256) 目标图像,直接由全采样 k-空间数据逆傅立叶变换而来
target_img_tensor = torch.ifft(target_kspace_tensor, 2, normalized=True)
under_img_tensor = torch.ifft(under_kspace_tensor, 2, normalized=True)
plt.figure()
plt.rcParams['figure.figsize'] = (20.0, 20.0)
plt.subplot(1,2,1)
plt.imshow(np.fft.fftshift(np.log(1+np.abs(to_complex(target_kspace_tensor.numpy())))),cmap='gray')
plt.title("full K space")
plt.subplot(1,2,2)
plt.imshow(np.abs(to_complex(target_img_tensor.numpy())),cmap='gray')
plt.title("full image space")
plt.show()
plt.figure()
plt.rcParams['figure.figsize'] = (20.0, 20.0)
plt.subplot(1,3,1)
plt.imshow(mask,cmap='gray')
plt.title("mask")
plt.subplot(1,3,2)
plt.imshow(np.fft.fftshift(np.log(1+np.abs(to_complex(under_kspace_tensor.numpy())))),cmap='gray')
plt.title("DownSample K space")
plt.subplot(1,3,3)
plt.imshow(np.abs(to_complex(under_img_tensor.numpy())),cmap='gray')
plt.title("DownSample image space")
plt.show()
运行结果如下: