MagneticResonanceImaging / MRIReco.jl

Julia Package for MRI Reconstruction
https://magneticresonanceimaging.github.io/MRIReco.jl/latest/
Other
85 stars 22 forks source link

Conversion / reconstruction of multi-echo data converted from kspace to acquisitionData failed #150

Closed aTrotier closed 1 year ago

aTrotier commented 1 year ago

Reconstruction failed because only one trajectory is available in the AcquisitionData structure for Multi-echo acquisition

Example :


# ## Setup and define global variable
using CairoMakie
using ImageUtils: shepp_logan
using LinearAlgebra
using Noise, Random
using MRIReco, MRISimulation, MRICoilSensitivities, MRISampling
#using QuantitativeMRI

N = 128
T = ComplexF32

# ## simulate T2 shepp logan phantom
x = T.(shepp_logan(N))
rmap = 5.0 * abs.(x)
coilsens = T.(birdcageSensitivity(N, 8, 1.5))
TEnum = collect(2.e-2:2.e-2:50.e-2)

# simulation
params = Dict{Symbol,Any}()
params[:simulation] = "fast"
params[:trajName] = "Cartesian"
params[:numProfiles] = floor(Int64, N)
params[:numSamplingPerProfile] = N
params[:r2map] = rmap
params[:T_echo] = TEnum
params[:seqName] = "ME"
params[:refocusingAngles] = Float64.(repeat([pi], length(TEnum)))
params[:senseMaps] = coilsens

acqData = simulation(real(x), params)

for i = 1:size(acqData.kdata,1)
  add_gauss!(acqData.kdata[i,1,1],0.3)
end

# ## Subsampling the kspace
for echo = 1:length(TEnum)
  cal_disk = sample_vdpoisson((N,N),8.0;calsize = 14)
end
mask = zeros(Int32,N,N)
mask[cal_disk] .= 1
heatmap(mask)

kspace = kDataCart(acqData)
kspace = kspace .* mask

acqData_u = AcquisitionData(kspace)

# Reconstruct the image with a standard reconstruction
params = Dict{Symbol,Any}()
params[:reconSize] = (N, N)
params[:reco] = "multiCoilMultiEcho"
#params[:sparseTrafo] = "nothing" #"nothing" #sparse trafo
params[:regularization] = "L2"
params[:λ] = 1.e-3
params[:iterations] = 1
params[:solver] = "cgnr"
params[:senseMaps] = reshape(coilsens, N, N, 1, 8)

im_x = reconstruction(acqData_u, params).data
aTrotier commented 1 year ago

solved in #148