diff --git a/dev/API/index.html b/dev/API/index.html index e8e7d38b..6ee71b01 100644 --- a/dev/API/index.html +++ b/dev/API/index.html @@ -1,2 +1,2 @@ -API · Julia MRI Package

API

This page contains documentation of the public API of MRIReco. In the Julia REPL one can access this documentation by entering the help mode with ? and then writing the function for which the documentation should be shown.

Operators

Operators are implemented as subtypes of AbstractLinearOperator, which is defined in the package LinearOperators.jl. Such operators must provide a function implementing the product and a function implementing the product with the adjoint. Furthermore, the number of rows and columns of the operator must be specified.

Missing docstring.

Missing docstring for MRIReco.encodingOps2d_simple. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.encodingOps3d_simple. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.encodingOps2d_parallel. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.encodingOps3d_parallel. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.encodingOp2d_multiEcho. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.encodingOp3d_multiEcho. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.encodingOp2d_multiEcho_parallel. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.encodingOp3d_multiEcho_parallel. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.fourierEncodingOp2d. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.fourierEncodingOp3d. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.ExplicitOp(shape::NTuple{D,Int64}, tr::Trajectory, correctionmap::Array{ComplexF64,D}; MRIReco.echoImage::Bool=false, kargs...) where D. Check Documenter's build log for details.

Missing docstring.

Missing docstring for RegularizedLeastSquares.FFTOp(T::Type, shape::Tuple, shift=true). Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.NFFTOp(shape::Tuple, tr::Trajectory; nodes=nothing, kargs...). Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.FieldmapNFFTOp(shape::NTuple{D,Int64}, tr::Trajectory, correctionmap::Array{ComplexF64,D}; method::String="nfft", echoImage::Bool=true, alpha::Float64=1.75, m::Float64=3.0, K=20, kargs...) where D. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.SamplingOp. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.SensitivityOp. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.SparseOp. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.RegularizedLeastSquares.WeightingOp. Check Documenter's build log for details.

Datatypes

Missing docstring.

Missing docstring for MRIReco.AcquisitionData. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.AcquisitionData(tr::T,kdata::Array{Matrix{ComplexF64},3} ; seqInfo=Dict{Symbol,Any}() , idx=nothing , encodingSize=Int64[0,0,0] , fov=Float64[0,0,0] , kargs...) where T <: Union{Trajectory,Vector{Trajectory}}. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.trajectory(acqData::AcquisitionData,i::Int64=1). Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.numContrasts(acqData::AcquisitionData). Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.numChannels. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.numSlices. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.numRepetitions. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.kData. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.multiEchoData. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.multiCoilData. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.multiCoilMultiEchoData. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.profileData. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.samplingDensity. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.changeEncodingSize2D. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.convert3dTo2d. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.RawAcquisitionData. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.trajectory(f::RawAcquisitionData; slice::Int=1, contrast::Int=1). Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.rawdata(f::RawAcquisitionData). Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.AcquisitionData(f::RawAcquisitionData). Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.RawAcquisitionData(f::ISMRMRDFile, dataset="dataset"). Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.AcquisitionData(f::ISMRMRDFile, dataset="dataset"). Check Documenter's build log for details.

Trajectories

Missing docstring.

Missing docstring for MRIReco.Trajectory. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.trajectory(trajName::AbstractString, numProfiles::Int, numSamplingPerProfile::Int; MRIReco.numSlices::Int64=1, TE::Float64=0.0, AQ::Float64=1.e-3, kargs...). Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.string(tr::Trajectory). Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.echoTime(tr::Trajectory). Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.acqTimePerProfile(tr::Trajectory). Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.numProfiles(tr::Trajectory). Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.numSamplingPerProfile(tr::Trajectory). Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.numSlices(tr::Trajectory). Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.isCircular(tr::Trajectory). Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.isCartesian(tr::Trajectory). Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.dims(tr::Trajectory). Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.kspaceNodes(tr::Trajectory). Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.readoutTimes(tr::Trajectory). Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.CartesianTrajectory. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.EPITrajectory. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.OneLine2dTrajectory. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.RadialTrajectory. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.SpiralTrajectory. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.SpiralTrajectoryVarDens. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.CartesianTrajectory3D. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.KooshballTrajectory. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.StackOfStarsTrajectory. Check Documenter's build log for details.

Sequences

Missing docstring.

Missing docstring for MRIReco.MESequence. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.numContrasts(seq::MESequence). Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.echoTimes(seq::MESequence). Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.flipAngles(seq::MESequence). Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.echoAmplitudes(seq::MESequence, R1::Float64, R2::Float64, numStates=nothing). Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.epgAmplitudes(seq::MESequence, R1::Real, R2::Real, numStates=nothing). Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.epgRotation. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.epgRelaxation. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.epgDephasing. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.rfRotation. Check Documenter's build log for details.

Sampling

Missing docstring.

Missing docstring for MRIReco.sample. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.sample_kspace(data::AbstractArray,redFac::Float64,patFunc::AbstractString;kargs...). Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.sample_kspace(acqData::AcquisitionData,redFac::Float64, patFunc::AbstractString; rand=true, profiles=true, seed = 1234, kargs...). Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.sample_regular(shape::Tuple, redFac::Float64; kargs...). Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.sample_random(shape::Tuple{Int64,Int64},redFac::Float64;calsize::Int64=0,kargs...). Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.sample_poissondisk(shape::Tuple{Int64,Int64},redFac::Float64;calsize::Int64=0, seed::Int64=1234,kargs...). Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.sample_vdpoisson(shape::Tuple{Int64,Int64},redFac::Float64; seed::Int64=1234,kargs...). Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.sample_lines(shape::Tuple{Int64,Int64},redFac::Float64;sampleFunc="random",kargs...). Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.calculateIncoherence(acqData::AcquisitionData, recoParams::Dict, slice=1). Check Documenter's build log for details.

Simulation

Missing docstring.

Missing docstring for MRIReco.simulation(image::Array{T,3}, simParams::Dict) where T<:Union{ComplexF64,Float64}. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.simulation(image::Array{T,3}, simParams::Dict, filename::String; force=false) where T<:Union{ComplexF64,Float64}. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.simulation(image::Array{T,2}, simParams::Dict) where T<:Union{ComplexF64,Float64}. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.simulation(tr::Trajectory , image::Array{ComplexF64} , correctionMap = [] ; opName="fast" , senseMaps=[] , verbose=true , kargs...). Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.simulation(seq::AbstractSequence, tr::Vector{Trajectory} , image::Array{ComplexF64,3} ; opName="fast" , r1map=[] , r2map=[] , fmap=[] , senseMaps=[] , verbose=true , kargs...). Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.addNoise(x::Vector, snr::Float64, complex= true). Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.addNoise(acqData::AcquisitionData, snr::Float64). Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.addNoise!(acqData::AcquisitionData, snr::Float64). Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.birdcageSensitivity. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.quadraticFieldmap. Check Documenter's build log for details.

Reconstruction

MRIReco.reconstructionMethod
reconstruction(acqData::AcquisitionData, recoParams::Dict)

Performs image reconstruction of an AcquisitionData object. Parameters are specified in a dictionary.

Reconstruction types are specified by the symbol :reco. Valid reconstruction names are:

  • :direct - direct Fourier reconstruction
  • :standard - iterative reconstruction for all contrasts, coils & slices independently
  • :multiEcho - iterative joint reconstruction of all echo images
  • :multiCoil - SENSE-type iterative reconstruction
  • :multiCoilMultiEcho - SENSE-type iterative reconstruction of all echo images
source
MRIReco.reconstructionMethod
reconstruction(acqData::AcquisitionData, recoParams::Dict,filename::String; force=false)

performs the same image reconstrucion as reconstruction(acqData::AcquisitionData, recoParams::Dict) and saves the image in a file with name filename. If force=false, the reconstructed image is loaded from the the file filename if the latter is present.

source
MRIReco.setupIterativeRecoFunction
setupIterativeReco(acqData::AcquisitionData, recoParams::Dict)

builds relevant parameters and operators from the entries in recoParams

relevant parameters

  • reconSize::NTuple{2,Int64} - size of image to reconstruct
  • weights::Vector{Vector{Complex{<:AbstractFloat}}} - sampling density of the trajectories in acqData
  • sparseTrafo::AbstractLinearOperator - sparsifying transformation
  • reg::Regularization - Regularization to be used
  • normalize::Bool - adjust regularization parameter according to the size of k-space data
  • solvername::String - name of the solver to use
  • senseMaps::Array{Complex{<:AbstractFloat}} - coil sensitivities
  • correctionMap::Array{Complex{<:AbstractFloat}} - fieldmap for the correction of off-resonance effects
  • method::String="nfft" - method to use for time-segmentation when correctio field inhomogeneities
  • noiseData::Array{ComplexF64} - noise acquisition for noise decorelation

sparseTrafo and reg can also be speficied using their names in form of a string.

source
Missing docstring.

Missing docstring for MRIReco.reconstruction_direct_2d. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.reconstruction_direct_3d. Check Documenter's build log for details.

MRIReco.reconstruction_simpleFunction

Performs iterative image reconstruction independently for the data of all coils, contrasts and slices

Arguments

  • acqData::AcquisitionData - AcquisitionData object
  • reconSize::NTuple{2,Int64} - size of image to reconstruct
  • reg::Regularization - Regularization to be used
  • sparseTrafo::AbstractLinearOperator - sparsifying transformation
  • weights::Vector{Vector{Complex{<:AbstractFloat}}} - sampling density of the trajectories in acqData
  • solvername::String - name of the solver to use
  • (normalize::Bool=false) - adjust regularization parameter according to the size of k-space data
  • (params::Dict{Symbol,Any}) - Dict with additional parameters
source
MRIReco.reconstruction_multiEchoFunction

Performs a iterative image reconstruction jointly for all contrasts. Different slices and coil images are reconstructed independently.

Arguments

  • acqData::AcquisitionData - AcquisitionData object
  • reconSize::NTuple{2,Int64} - size of image to reconstruct
  • reg::Regularization - Regularization to be used
  • sparseTrafo::AbstractLinearOperator - sparsifying transformation
  • weights::Vector{Vector{Complex{<:AbstractFloat}}} - sampling density of the trajectories in acqData
  • solvername::String - name of the solver to use
  • (normalize::Bool=false) - adjust regularization parameter according to the size of k-space data
  • (params::Dict{Symbol,Any}) - Dict with additional parameters
source
MRIReco.reconstruction_multiCoilFunction

Performs a SENSE-type iterative image reconstruction. Different slices and contrasts images are reconstructed independently.

Arguments

  • acqData::AcquisitionData - AcquisitionData object
  • reconSize::NTuple{2,Int64} - size of image to reconstruct
  • reg::Regularization - Regularization to be used
  • sparseTrafo::AbstractLinearOperator - sparsifying transformation
  • weights::Vector{Vector{Complex{<:AbstractFloat}}} - sampling density of the trajectories in acqData
  • L_inv::Array{Complex{<:AbstractFloat}} - noise decorrelation matrix
  • solvername::String - name of the solver to use
  • senseMaps::Array{Complex{<:AbstractFloat}} - coil sensitivities
  • (normalize::Bool=false) - adjust regularization parameter according to the size of k-space data
  • (params::Dict{Symbol,Any}) - Dict with additional parameters
source
MRIReco.reconstruction_multiCoilMultiEchoFunction

Performs a SENSE-type iterative image reconstruction which reconstructs all contrasts jointly. Different slices are reconstructed independently.

Arguments

  • acqData::AcquisitionData - AcquisitionData object
  • reconSize::NTuple{2,Int64} - size of image to reconstruct
  • reg::Regularization - Regularization to be used
  • sparseTrafo::AbstractLinearOperator - sparsifying transformation
  • weights::Vector{Vector{Complex{<:AbstractFloat}}} - sampling density of the trajectories in acqData
  • solvername::String - name of the solver to use
  • senseMaps::Array{Complex{<:AbstractFloat}} - coil sensitivities
  • (normalize::Bool=false) - adjust regularization parameter according to the size of k-space data
  • (params::Dict{Symbol,Any}) - Dict with additional parameters
source
Missing docstring.

Missing docstring for MRIReco.espirit. Check Documenter's build log for details.

MRIReco.nrmsdFunction
nrmsd(I,Ireco)

computes the normalized root mean squared error of the image Ireco with respect to the image I.

source
+API · Julia MRI Package

API

This page contains documentation of the public API of MRIReco. In the Julia REPL one can access this documentation by entering the help mode with ? and then writing the function for which the documentation should be shown.

Operators

Operators are implemented as subtypes of AbstractLinearOperator, which is defined in the package LinearOperators.jl. Such operators must provide a function implementing the product and a function implementing the product with the adjoint. Furthermore, the number of rows and columns of the operator must be specified.

Missing docstring.

Missing docstring for MRIReco.encodingOps2d_simple. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.encodingOps3d_simple. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.encodingOps2d_parallel. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.encodingOps3d_parallel. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.encodingOp2d_multiEcho. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.encodingOp3d_multiEcho. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.encodingOp2d_multiEcho_parallel. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.encodingOp3d_multiEcho_parallel. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.fourierEncodingOp2d. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.fourierEncodingOp3d. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.ExplicitOp(shape::NTuple{D,Int64}, tr::Trajectory, correctionmap::Array{ComplexF64,D}; MRIReco.echoImage::Bool=false, kargs...) where D. Check Documenter's build log for details.

Missing docstring.

Missing docstring for RegularizedLeastSquares.FFTOp(T::Type, shape::Tuple, shift=true). Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.NFFTOp(shape::Tuple, tr::Trajectory; nodes=nothing, kargs...). Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.FieldmapNFFTOp(shape::NTuple{D,Int64}, tr::Trajectory, correctionmap::Array{ComplexF64,D}; method::String="nfft", echoImage::Bool=true, alpha::Float64=1.75, m::Float64=3.0, K=20, kargs...) where D. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.SamplingOp. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.SensitivityOp. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.SparseOp. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.RegularizedLeastSquares.WeightingOp. Check Documenter's build log for details.

Datatypes

Missing docstring.

Missing docstring for MRIReco.AcquisitionData. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.AcquisitionData(tr::T,kdata::Array{Matrix{ComplexF64},3} ; seqInfo=Dict{Symbol,Any}() , idx=nothing , encodingSize=Int64[0,0,0] , fov=Float64[0,0,0] , kargs...) where T <: Union{Trajectory,Vector{Trajectory}}. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.trajectory(acqData::AcquisitionData,i::Int64=1). Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.numContrasts(acqData::AcquisitionData). Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.numChannels. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.numSlices. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.numRepetitions. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.kData. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.multiEchoData. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.multiCoilData. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.multiCoilMultiEchoData. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.profileData. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.samplingDensity. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.changeEncodingSize2D. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.convert3dTo2d. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.RawAcquisitionData. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.trajectory(f::RawAcquisitionData; slice::Int=1, contrast::Int=1). Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.rawdata(f::RawAcquisitionData). Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.AcquisitionData(f::RawAcquisitionData). Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.RawAcquisitionData(f::ISMRMRDFile, dataset="dataset"). Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.AcquisitionData(f::ISMRMRDFile, dataset="dataset"). Check Documenter's build log for details.

Trajectories

Missing docstring.

Missing docstring for MRIReco.Trajectory. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.trajectory(trajName::AbstractString, numProfiles::Int, numSamplingPerProfile::Int; MRIReco.numSlices::Int64=1, TE::Float64=0.0, AQ::Float64=1.e-3, kargs...). Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.string(tr::Trajectory). Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.echoTime(tr::Trajectory). Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.acqTimePerProfile(tr::Trajectory). Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.numProfiles(tr::Trajectory). Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.numSamplingPerProfile(tr::Trajectory). Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.numSlices(tr::Trajectory). Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.isCircular(tr::Trajectory). Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.isCartesian(tr::Trajectory). Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.dims(tr::Trajectory). Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.kspaceNodes(tr::Trajectory). Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.readoutTimes(tr::Trajectory). Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.CartesianTrajectory. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.EPITrajectory. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.OneLine2dTrajectory. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.RadialTrajectory. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.SpiralTrajectory. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.SpiralTrajectoryVarDens. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.CartesianTrajectory3D. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.KooshballTrajectory. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.StackOfStarsTrajectory. Check Documenter's build log for details.

Sequences

Missing docstring.

Missing docstring for MRIReco.MESequence. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.numContrasts(seq::MESequence). Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.echoTimes(seq::MESequence). Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.flipAngles(seq::MESequence). Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.echoAmplitudes(seq::MESequence, R1::Float64, R2::Float64, numStates=nothing). Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.epgAmplitudes(seq::MESequence, R1::Real, R2::Real, numStates=nothing). Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.epgRotation. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.epgRelaxation. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.epgDephasing. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.rfRotation. Check Documenter's build log for details.

Sampling

Missing docstring.

Missing docstring for MRIReco.sample. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.sample_kspace(data::AbstractArray,redFac::Float64,patFunc::AbstractString;kargs...). Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.sample_kspace(acqData::AcquisitionData,redFac::Float64, patFunc::AbstractString; rand=true, profiles=true, seed = 1234, kargs...). Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.sample_regular(shape::Tuple, redFac::Float64; kargs...). Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.sample_random(shape::Tuple{Int64,Int64},redFac::Float64;calsize::Int64=0,kargs...). Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.sample_poissondisk(shape::Tuple{Int64,Int64},redFac::Float64;calsize::Int64=0, seed::Int64=1234,kargs...). Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.sample_vdpoisson(shape::Tuple{Int64,Int64},redFac::Float64; seed::Int64=1234,kargs...). Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.sample_lines(shape::Tuple{Int64,Int64},redFac::Float64;sampleFunc="random",kargs...). Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.calculateIncoherence(acqData::AcquisitionData, recoParams::Dict, slice=1). Check Documenter's build log for details.

Simulation

Missing docstring.

Missing docstring for MRIReco.simulation(image::Array{T,3}, simParams::Dict) where T<:Union{ComplexF64,Float64}. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.simulation(image::Array{T,3}, simParams::Dict, filename::String; force=false) where T<:Union{ComplexF64,Float64}. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.simulation(image::Array{T,2}, simParams::Dict) where T<:Union{ComplexF64,Float64}. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.simulation(tr::Trajectory , image::Array{ComplexF64} , correctionMap = [] ; opName="fast" , senseMaps=[] , verbose=true , kargs...). Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.simulation(seq::AbstractSequence, tr::Vector{Trajectory} , image::Array{ComplexF64,3} ; opName="fast" , r1map=[] , r2map=[] , fmap=[] , senseMaps=[] , verbose=true , kargs...). Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.addNoise(x::Vector, snr::Float64, complex= true). Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.addNoise(acqData::AcquisitionData, snr::Float64). Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.addNoise!(acqData::AcquisitionData, snr::Float64). Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.birdcageSensitivity. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.quadraticFieldmap. Check Documenter's build log for details.

Reconstruction

MRIReco.reconstructionMethod
reconstruction(acqData::AcquisitionData, recoParams::Dict)

Performs image reconstruction of an AcquisitionData object. Parameters are specified in a dictionary.

Reconstruction types are specified by the symbol :reco. Valid reconstruction names are:

  • :direct - direct Fourier reconstruction
  • :standard - iterative reconstruction for all contrasts, coils & slices independently
  • :multiEcho - iterative joint reconstruction of all echo images
  • :multiCoil - SENSE-type iterative reconstruction
  • :multiCoilMultiEcho - SENSE-type iterative reconstruction of all echo images
source
MRIReco.reconstructionMethod
reconstruction(acqData::AcquisitionData, recoParams::Dict,filename::String; force=false)

performs the same image reconstrucion as reconstruction(acqData::AcquisitionData, recoParams::Dict) and saves the image in a file with name filename. If force=false, the reconstructed image is loaded from the the file filename if the latter is present.

source
MRIReco.setupIterativeRecoFunction
setupIterativeReco(acqData::AcquisitionData, recoParams::Dict)

builds relevant parameters and operators from the entries in recoParams

relevant parameters

  • reconSize::NTuple{2,Int64} - size of image to reconstruct
  • weights::Vector{Vector{Complex{<:AbstractFloat}}} - sampling density of the trajectories in acqData
  • sparseTrafo::AbstractLinearOperator - sparsifying transformation
  • reg::Regularization - Regularization to be used
  • normalize::Bool - adjust regularization parameter according to the size of k-space data
  • solvername::String - name of the solver to use
  • senseMaps::Array{Complex{<:AbstractFloat}} - coil sensitivities
  • correctionMap::Array{Complex{<:AbstractFloat}} - fieldmap for the correction of off-resonance effects
  • method::String="nfft" - method to use for time-segmentation when correctio field inhomogeneities
  • noiseData::Array{ComplexF64} - noise acquisition for noise decorelation

sparseTrafo and reg can also be speficied using their names in form of a string.

source
Missing docstring.

Missing docstring for MRIReco.reconstruction_direct_2d. Check Documenter's build log for details.

Missing docstring.

Missing docstring for MRIReco.reconstruction_direct_3d. Check Documenter's build log for details.

MRIReco.reconstruction_simpleFunction

Performs iterative image reconstruction independently for the data of all coils, contrasts and slices

Arguments

  • acqData::AcquisitionData - AcquisitionData object
  • reconSize::NTuple{2,Int64} - size of image to reconstruct
  • reg::Regularization - Regularization to be used
  • sparseTrafo::AbstractLinearOperator - sparsifying transformation
  • weights::Vector{Vector{Complex{<:AbstractFloat}}} - sampling density of the trajectories in acqData
  • solvername::String - name of the solver to use
  • (normalize::Bool=false) - adjust regularization parameter according to the size of k-space data
  • (params::Dict{Symbol,Any}) - Dict with additional parameters
source
MRIReco.reconstruction_multiEchoFunction

Performs a iterative image reconstruction jointly for all contrasts. Different slices and coil images are reconstructed independently.

Arguments

  • acqData::AcquisitionData - AcquisitionData object
  • reconSize::NTuple{2,Int64} - size of image to reconstruct
  • reg::Regularization - Regularization to be used
  • sparseTrafo::AbstractLinearOperator - sparsifying transformation
  • weights::Vector{Vector{Complex{<:AbstractFloat}}} - sampling density of the trajectories in acqData
  • solvername::String - name of the solver to use
  • (normalize::Bool=false) - adjust regularization parameter according to the size of k-space data
  • (params::Dict{Symbol,Any}) - Dict with additional parameters
source
MRIReco.reconstruction_multiCoilFunction

Performs a SENSE-type iterative image reconstruction. Different slices and contrasts images are reconstructed independently.

Arguments

  • acqData::AcquisitionData - AcquisitionData object
  • reconSize::NTuple{2,Int64} - size of image to reconstruct
  • reg::Regularization - Regularization to be used
  • sparseTrafo::AbstractLinearOperator - sparsifying transformation
  • weights::Vector{Vector{Complex{<:AbstractFloat}}} - sampling density of the trajectories in acqData
  • L_inv::Array{Complex{<:AbstractFloat}} - noise decorrelation matrix
  • solvername::String - name of the solver to use
  • senseMaps::Array{Complex{<:AbstractFloat}} - coil sensitivities
  • (normalize::Bool=false) - adjust regularization parameter according to the size of k-space data
  • (params::Dict{Symbol,Any}) - Dict with additional parameters
source
MRIReco.reconstruction_multiCoilMultiEchoFunction

Performs a SENSE-type iterative image reconstruction which reconstructs all contrasts jointly. Different slices are reconstructed independently.

Arguments

  • acqData::AcquisitionData - AcquisitionData object
  • reconSize::NTuple{2,Int64} - size of image to reconstruct
  • reg::Regularization - Regularization to be used
  • sparseTrafo::AbstractLinearOperator - sparsifying transformation
  • weights::Vector{Vector{Complex{<:AbstractFloat}}} - sampling density of the trajectories in acqData
  • solvername::String - name of the solver to use
  • senseMaps::Array{Complex{<:AbstractFloat}} - coil sensitivities
  • (normalize::Bool=false) - adjust regularization parameter according to the size of k-space data
  • (params::Dict{Symbol,Any}) - Dict with additional parameters
source
Missing docstring.

Missing docstring for MRIReco.espirit. Check Documenter's build log for details.

MRIReco.nrmsdFunction
nrmsd(I,Ireco)

computes the normalized root mean squared error of the image Ireco with respect to the image I.

source
diff --git a/dev/SENSE/index.html b/dev/SENSE/index.html index 5186d779..78b025de 100644 --- a/dev/SENSE/index.html +++ b/dev/SENSE/index.html @@ -31,4 +31,4 @@ # do reconstruction Ireco = reconstruction(acqData, params) -

Below one can see the orignal phantom on the left and the reconstruction on the right:

Phantom Reconstruction

+

Below one can see the orignal phantom on the left and the reconstruction on the right:

Phantom Reconstruction

diff --git a/dev/acquisitionData/index.html b/dev/acquisitionData/index.html index 7d5c29f4..36f8d18b 100644 --- a/dev/acquisitionData/index.html +++ b/dev/acquisitionData/index.html @@ -13,4 +13,4 @@ subsampleIndices::Vector{Array{Int64}} encodingSize::Vector{Int64} fov::Vector{Float64} -end

It consists of the sequence informations stored in a dictionary, the k-space trajectory, the k-space data, and several parameters describing the dimension of the data and some additional index vectors.

The k-space data kdata has three dimensions encoding

  1. dim : contrasts/echoes
  2. dim : slices
  3. dim : repetitions

Each element is a matrix encoding

  1. dim : k-space nodes
  2. dim : channels/coils

In case of undersampled data, the subsampling indices are stored in subsampleIndices. One check if the data is undersampled by checking if isempty(subsampleIndices).

The encoded space is stored in the field encodingSize. It is especially relevant for non-Cartesian trajectories where it is not clear upfront, how large the grid size for reconstruction should be chosen. Finally fov describes the physical lengths of the encoding grid.

+end

It consists of the sequence informations stored in a dictionary, the k-space trajectory, the k-space data, and several parameters describing the dimension of the data and some additional index vectors.

The k-space data kdata has three dimensions encoding

  1. dim : contrasts/echoes
  2. dim : slices
  3. dim : repetitions

Each element is a matrix encoding

  1. dim : k-space nodes
  2. dim : channels/coils

In case of undersampled data, the subsampling indices are stored in subsampleIndices. One check if the data is undersampled by checking if isempty(subsampleIndices).

The encoded space is stored in the field encodingSize. It is especially relevant for non-Cartesian trajectories where it is not clear upfront, how large the grid size for reconstruction should be chosen. Finally fov describes the physical lengths of the encoding grid.

diff --git a/dev/compressedSensing/index.html b/dev/compressedSensing/index.html index 5ac554b3..da30c810 100644 --- a/dev/compressedSensing/index.html +++ b/dev/compressedSensing/index.html @@ -36,4 +36,4 @@ params[:tolInner] = 1.e-2 params[:normalizeReg] = true -img_tv = reconstruction(acqDataSub, params)

Lets compare the results, left the regular SENSE reconstruction and right the TV reglarized solution:

SENSE TV

+img_tv = reconstruction(acqDataSub, params)

Lets compare the results, left the regular SENSE reconstruction and right the TV reglarized solution:

SENSE TV

diff --git a/dev/custom/index.html b/dev/custom/index.html index ecdaa7ca..d25f4b9a 100644 --- a/dev/custom/index.html +++ b/dev/custom/index.html @@ -64,4 +64,4 @@ img_d = reconstruction(acqData,params)

For comparison, let us perform the same reconstruction as above but with a Wavelet transform

delete!(params, :sparseTrafo)
 params[:sparseTrafoName] = "Wavelet"
 
-img_w = reconstruction(acqData,params)

The following pictures shows the wavelet based CS reconstruction on the left and the dictionary based CS reconstruction on the right:

BrainWavelet BrainDict

For reference, the original data is shown here:

BrainOrig

One can clearly see that the dictionary approach performs better than a simple Wavelet L1 prior.

+img_w = reconstruction(acqData,params)

The following pictures shows the wavelet based CS reconstruction on the left and the dictionary based CS reconstruction on the right:

BrainWavelet BrainDict

For reference, the original data is shown here:

BrainOrig

One can clearly see that the dictionary approach performs better than a simple Wavelet L1 prior.

diff --git a/dev/filehandling/index.html b/dev/filehandling/index.html index 357e7c81..1f8a2d46 100644 --- a/dev/filehandling/index.html +++ b/dev/filehandling/index.html @@ -9,4 +9,4 @@ save(fout, raw)

which will generate an ISMRMRD file containing the data.

Conversion

It should now be no surprise that MRIReco.jl does also allow for file conversion:

f = BrukerFile("brukerfileCart")
 raw = RawAcquisitionData(f)
 fout = ISMRMRDFile("outputfile.h5")
-save(fout, raw)

Currently, this is only limited to converting Bruker files into ISMRMRD files but the infrastructure is not limited to that.

+save(fout, raw)

Currently, this is only limited to converting Bruker files into ISMRMRD files but the infrastructure is not limited to that.

diff --git a/dev/generated/examples/01-binning/index.html b/dev/generated/examples/01-binning/index.html index cf203086..384d0b46 100644 --- a/dev/generated/examples/01-binning/index.html +++ b/dev/generated/examples/01-binning/index.html @@ -47,10 +47,10 @@ "Commit e4ee485e909 (2023-07-05 09:39 UTC)" "Platform Info:" " OS: Linux (x86_64-linux-gnu)" - " CPU: 2 × Intel(R) Xeon(R) Platinum 8272CL CPU @ 2.60GHz" + " CPU: 2 × Intel(R) Xeon(R) Platinum 8370C CPU @ 2.80GHz" " WORD_SIZE: 64" " LIBM: libopenlibm" - " LLVM: libLLVM-14.0.6 (ORCJIT, skylake-avx512)" + " LLVM: libLLVM-14.0.6 (ORCJIT, icelake-server)" " Threads: 1 on 2 virtual cores" ""

And with the following package versions

import Pkg; Pkg.status()
Status `~/work/MRIReco.jl/MRIReco.jl/docs/Project.toml`
   [13f3f980] CairoMakie v0.10.6
@@ -65,4 +65,4 @@
   [9be66c26] MRISampling v0.1.1 `/home/runner/work/MRIReco.jl/MRIReco.jl:MRISampling#master`
   [8988da37] MRISimulation v0.1.1 `/home/runner/work/MRIReco.jl/MRIReco.jl:MRISimulation#master`
   [b77e0a4c] InteractiveUtils
-Info Packages marked with ⌃ have new versions available and may be upgradable.

This page was generated using Literate.jl.

+Info Packages marked with ⌃ have new versions available and may be upgradable.

This page was generated using Literate.jl.

diff --git a/dev/generated/examples/02-extractKspace/index.html b/dev/generated/examples/02-extractKspace/index.html index 014fad27..c3ae9a46 100644 --- a/dev/generated/examples/02-extractKspace/index.html +++ b/dev/generated/examples/02-extractKspace/index.html @@ -59,10 +59,10 @@ "Commit e4ee485e909 (2023-07-05 09:39 UTC)" "Platform Info:" " OS: Linux (x86_64-linux-gnu)" - " CPU: 2 × Intel(R) Xeon(R) Platinum 8272CL CPU @ 2.60GHz" + " CPU: 2 × Intel(R) Xeon(R) Platinum 8370C CPU @ 2.80GHz" " WORD_SIZE: 64" " LIBM: libopenlibm" - " LLVM: libLLVM-14.0.6 (ORCJIT, skylake-avx512)" + " LLVM: libLLVM-14.0.6 (ORCJIT, icelake-server)" " Threads: 1 on 2 virtual cores" ""

And with the following package versions

import Pkg; Pkg.status()
Status `~/work/MRIReco.jl/MRIReco.jl/docs/Project.toml`
   [13f3f980] CairoMakie v0.10.6
@@ -77,4 +77,4 @@
   [9be66c26] MRISampling v0.1.1 `/home/runner/work/MRIReco.jl/MRIReco.jl:MRISampling#master`
   [8988da37] MRISimulation v0.1.1 `/home/runner/work/MRIReco.jl/MRIReco.jl:MRISimulation#master`
   [b77e0a4c] InteractiveUtils
-Info Packages marked with ⌃ have new versions available and may be upgradable.

This page was generated using Literate.jl.

+Info Packages marked with ⌃ have new versions available and may be upgradable.

This page was generated using Literate.jl.

diff --git a/dev/gettingStarted/index.html b/dev/gettingStarted/index.html index b46f9029..8fa9c2b7 100644 --- a/dev/gettingStarted/index.html +++ b/dev/gettingStarted/index.html @@ -17,4 +17,4 @@ params = Dict{Symbol, Any}() params[:reco] = "direct" params[:reconSize] = (N,N) -Ireco = reconstruction(acqData, params)

We will go through the program step by step. First we create a 2D shepp logan phantom of size N=256. Then we setup a dictionary that defines the simulation parameters. Here, we chose a simple radial trajectory with 402 spokes and 512 samples per profile. We use a gridding-based simulator by setting params[:simulation] = "fast"

After setting up the parameter dictionary params, the simulation is performed by calling

acqData = simulation(I, params)

The result simulation function outputs an acquisition object that is discussed in more detail in the section Acquisition Data. The acquisition data can also be stored to or loaded from a file, which will be discussed in section File Handling.

Using the acquisition data we can perform a reconstruction. To this end, again a parameter dictionary is setup and some basic configuration is done. In this case, for instance we specify that we want to apply a simple NFFT-based gridding reconstruction. The reconstruction is invoked by calling

Ireco = reconstruction(acqData, params)

The resulting image is of type AxisArray and has 5 dimensions. One can display the image object by calling

imshow(abs.(Ireco[:,:,1,1,1]))

Alternatively one can store the image into a file, which will be discussed in the section on Images.

The original phantom and the reconstructed image are shown below

Phantom Reconstruction

We will discuss reconstruction in more detail in the sections on Offresonance Correction, Parallel Imaging, and Compressed Sensing

+Ireco = reconstruction(acqData, params)

We will go through the program step by step. First we create a 2D shepp logan phantom of size N=256. Then we setup a dictionary that defines the simulation parameters. Here, we chose a simple radial trajectory with 402 spokes and 512 samples per profile. We use a gridding-based simulator by setting params[:simulation] = "fast"

After setting up the parameter dictionary params, the simulation is performed by calling

acqData = simulation(I, params)

The result simulation function outputs an acquisition object that is discussed in more detail in the section Acquisition Data. The acquisition data can also be stored to or loaded from a file, which will be discussed in section File Handling.

Using the acquisition data we can perform a reconstruction. To this end, again a parameter dictionary is setup and some basic configuration is done. In this case, for instance we specify that we want to apply a simple NFFT-based gridding reconstruction. The reconstruction is invoked by calling

Ireco = reconstruction(acqData, params)

The resulting image is of type AxisArray and has 5 dimensions. One can display the image object by calling

imshow(abs.(Ireco[:,:,1,1,1]))

Alternatively one can store the image into a file, which will be discussed in the section on Images.

The original phantom and the reconstructed image are shown below

Phantom Reconstruction

We will discuss reconstruction in more detail in the sections on Offresonance Correction, Parallel Imaging, and Compressed Sensing

diff --git a/dev/image/index.html b/dev/image/index.html index 6235b4e2..d545c862 100644 --- a/dev/image/index.html +++ b/dev/image/index.html @@ -1,2 +1,2 @@ -Images · Julia MRI Package

Images

All reconstructed data is stored as an AxisArray. The AxisArrays package is part of the Images package family, which groups all image processing related functionality together. We note that the term Image does not restrict the dimensionality of the data types to 2D but in fact images can be of arbitrary dimensionality.

The reconstructed MRI image I is an AxisArray and has five dimensions. The first three are the spatial dimension x, y, and z, whereas dimension four encodes the number of echos that have been reconstructed, while dimension five encodes individual coils that may have been reconstructed independently. By using an AxisArray the object does not only consist of the data but it additionally encodes the physical size of the image as well as the echo times. To extract the ordinary Julia array one can simply use Ireco.data.

The advantage of encoding the physical dimensions is the image data can be stored without loosing the dimensions of the data. For instance one can call

saveImage(filename, I)

to store the image and

I = loadImage(filename)

to load the image. Currently, MRIReco does support the NIfTI file format. By default, saveImage stores the data complex valued if the image I is complex valued. To store the magnitude image one can call

saveImage(filename, I, true)
+Images · Julia MRI Package

Images

All reconstructed data is stored as an AxisArray. The AxisArrays package is part of the Images package family, which groups all image processing related functionality together. We note that the term Image does not restrict the dimensionality of the data types to 2D but in fact images can be of arbitrary dimensionality.

The reconstructed MRI image I is an AxisArray and has five dimensions. The first three are the spatial dimension x, y, and z, whereas dimension four encodes the number of echos that have been reconstructed, while dimension five encodes individual coils that may have been reconstructed independently. By using an AxisArray the object does not only consist of the data but it additionally encodes the physical size of the image as well as the echo times. To extract the ordinary Julia array one can simply use Ireco.data.

The advantage of encoding the physical dimensions is the image data can be stored without loosing the dimensions of the data. For instance one can call

saveImage(filename, I)

to store the image and

I = loadImage(filename)

to load the image. Currently, MRIReco does support the NIfTI file format. By default, saveImage stores the data complex valued if the image I is complex valued. To store the magnitude image one can call

saveImage(filename, I, true)
diff --git a/dev/index.html b/dev/index.html index 00e5af64..e7f6408d 100644 --- a/dev/index.html +++ b/dev/index.html @@ -1,2 +1,2 @@ -Home · Julia MRI Package

MRIReco.jl

Magnetic Resonance Imaging Reconstruction

Introduction

MRIReco is a Julia packet for magnetic resonance imaging. It contains algorithms for the simulation and reconstruction of MRT data and is both easy to use and flexibly expandable.

Both direct and iterative methods are available for image reconstruction. In particular, modern compressed sensing algorithms such as ADMM can be used.

The MRT imaging operator can be set up for a variety of scanning patterns (cartesian, spiral, radial, ...) and can take into account field inhomogeneity as well as the use of coil arrays. The operator can be quickly evaluated using NFFT-based methods.

One strength of the package is that it is strongly modular and uses high quality Julia packages. These are e.g.

  • NFFT.jl and FFTW.jl for fast Fourier transformations
  • Wavelets.jl for sparsification
  • LinearOperators.jl in order to be able to divide the imaging operator modularly into individual parts
  • RegularizedLeastSquares.jl for modern algorithms for solving linear optimization problems

This interaction allows new algorithms to be easily integrated into the software framework. It is not necessary to program in C/C++ but the advantages of the scientific high-level language Julia can be used.

Note

MRIReco.jl is work in progress and in some parts not entirely optimized. In particular the FFT and NFFT implementation are currently limited to the CPU and do not support GPU acceleration yet.

Installation

Start julia and open the package mode by entering ]. Then enter

add MRIReco

This will install MRIReco and all its dependencies. If you want to develop MRIReco itself you can checkout MRIReco by calling

dev MRIReco

More information on how to develop a package can be found in the Julia documentation.

Plotting

On purpose MRIReco is not depending on a particular plotting package since there are various plotting packages in the Julia ecosystem. Within the examples outlined in the tutorial we will use PyPlot for plotting but you may prefer using the Plots package. You can add both packages the same way MRIReco has been added.

Tutorial

There is a Jupyter-based tutorial on MRIReco at

https://github.com/MagneticResonanceImaging/MRIRecoTutorial

that has been presented at the ISMRM conference in Montreal 2019. Since the API has slightly changed, we, however recommend that you read this documentation and in particular execute the example scripts as is described in the Getting Started section.

+Home · Julia MRI Package

MRIReco.jl

Magnetic Resonance Imaging Reconstruction

Introduction

MRIReco is a Julia packet for magnetic resonance imaging. It contains algorithms for the simulation and reconstruction of MRT data and is both easy to use and flexibly expandable.

Both direct and iterative methods are available for image reconstruction. In particular, modern compressed sensing algorithms such as ADMM can be used.

The MRT imaging operator can be set up for a variety of scanning patterns (cartesian, spiral, radial, ...) and can take into account field inhomogeneity as well as the use of coil arrays. The operator can be quickly evaluated using NFFT-based methods.

One strength of the package is that it is strongly modular and uses high quality Julia packages. These are e.g.

  • NFFT.jl and FFTW.jl for fast Fourier transformations
  • Wavelets.jl for sparsification
  • LinearOperators.jl in order to be able to divide the imaging operator modularly into individual parts
  • RegularizedLeastSquares.jl for modern algorithms for solving linear optimization problems

This interaction allows new algorithms to be easily integrated into the software framework. It is not necessary to program in C/C++ but the advantages of the scientific high-level language Julia can be used.

Note

MRIReco.jl is work in progress and in some parts not entirely optimized. In particular the FFT and NFFT implementation are currently limited to the CPU and do not support GPU acceleration yet.

Installation

Start julia and open the package mode by entering ]. Then enter

add MRIReco

This will install MRIReco and all its dependencies. If you want to develop MRIReco itself you can checkout MRIReco by calling

dev MRIReco

More information on how to develop a package can be found in the Julia documentation.

Plotting

On purpose MRIReco is not depending on a particular plotting package since there are various plotting packages in the Julia ecosystem. Within the examples outlined in the tutorial we will use PyPlot for plotting but you may prefer using the Plots package. You can add both packages the same way MRIReco has been added.

Tutorial

There is a Jupyter-based tutorial on MRIReco at

https://github.com/MagneticResonanceImaging/MRIRecoTutorial

that has been presented at the ISMRM conference in Montreal 2019. Since the API has slightly changed, we, however recommend that you read this documentation and in particular execute the example scripts as is described in the Getting Started section.

diff --git a/dev/offresonance/index.html b/dev/offresonance/index.html index b470c305..89fc6aa8 100644 --- a/dev/offresonance/index.html +++ b/dev/offresonance/index.html @@ -29,4 +29,4 @@ params[:K] = 28 # do reconstruction -Ireco = reconstruction(acqData, params)

The considered quadratic fieldmap looks like this:

Fieldmap

The reconstruction without and with offresonance correction are shown below:

NoCorrection Reconstruction

+Ireco = reconstruction(acqData, params)

The considered quadratic fieldmap looks like this:

Fieldmap

The reconstruction without and with offresonance correction are shown below:

NoCorrection Reconstruction

diff --git a/dev/operators/index.html b/dev/operators/index.html index 61a49271..baeece83 100644 --- a/dev/operators/index.html +++ b/dev/operators/index.html @@ -1,2 +1,2 @@ -Imaging Operators · Julia MRI Package

Imaging Operators

The mapping between the proton density and the recorded signal is linear in MRI and can be described in the continuous case as an integral equation and in the discrete case as a matrix vector multiplication.

Depending on the imaging scenario, the MRI system matrix can have various different forms. It may encode a Cartesian, or a spiral trajectory. It may take offresonance into account, and it may also encode the sensitivity of the receive coil.

MRIReco implements various MRI imaging operators. In all cases, the operators have a dedicated Julia type that acts as a matrix. The operator E thus can be applied to a vector x by calling E*x. Similarly, the adjoint can be applied by adjoint(E)*x. We note at this point that the adjoint operation is lazy in Julia and thus the matrix adjoint(E) is never explicitly arranged.

MRIReco currently implements the following operators:

  • FFTOp: A multidimensional FFT operator
  • NFFTOp: A multidimensional operator for non-equidistant FFTs
  • FieldmapNFFTOp: An operator that takes complex correction terms into account
  • SensitivityMapOp: An operator for building a SENSE reconstruction. Has to be combined with one of the former encoding operators
  • SamplingOp: An operator that describes the (sub)sampling of full trajectories. The operator is used for Compressed Sensing reconstruction
  • WaveletOp: A multidimensional operator for applying Wavelet transformations

Each of these operators can be build by calling the corresponding constructor. Alternatively one can use the EncodingOp constructor that allows for high-level construction of the imaging operator.

+Imaging Operators · Julia MRI Package

Imaging Operators

The mapping between the proton density and the recorded signal is linear in MRI and can be described in the continuous case as an integral equation and in the discrete case as a matrix vector multiplication.

Depending on the imaging scenario, the MRI system matrix can have various different forms. It may encode a Cartesian, or a spiral trajectory. It may take offresonance into account, and it may also encode the sensitivity of the receive coil.

MRIReco implements various MRI imaging operators. In all cases, the operators have a dedicated Julia type that acts as a matrix. The operator E thus can be applied to a vector x by calling E*x. Similarly, the adjoint can be applied by adjoint(E)*x. We note at this point that the adjoint operation is lazy in Julia and thus the matrix adjoint(E) is never explicitly arranged.

MRIReco currently implements the following operators:

  • FFTOp: A multidimensional FFT operator
  • NFFTOp: A multidimensional operator for non-equidistant FFTs
  • FieldmapNFFTOp: An operator that takes complex correction terms into account
  • SensitivityMapOp: An operator for building a SENSE reconstruction. Has to be combined with one of the former encoding operators
  • SamplingOp: An operator that describes the (sub)sampling of full trajectories. The operator is used for Compressed Sensing reconstruction
  • WaveletOp: A multidimensional operator for applying Wavelet transformations

Each of these operators can be build by calling the corresponding constructor. Alternatively one can use the EncodingOp constructor that allows for high-level construction of the imaging operator.

diff --git a/dev/overview/index.html b/dev/overview/index.html index 42fab881..2aeb2c2c 100644 --- a/dev/overview/index.html +++ b/dev/overview/index.html @@ -1,2 +1,2 @@ -Overview · Julia MRI Package

Overview

As outlined in the introduction MRIReco.jl MRIReco has the philosophy to to reuse functionality provided by other Julia package and basically add the MRI specific functionality. This approach is enabled by the Julia package manager that can handle all dependencies automatically. Packages are therefore considered to be cheap in Julia so that modularization can be done across packages. In the following graph, the most important (not all) dependencies of MRIReco are visualized.

Dependencies

Most importantly, all iterative solvers are implemented in RegularizedLeastSquares.jl so that MRIReco can benefit from all improvements made in that package. Gridding is implemented in the NFFT.jl package, which has many applications byond MRI. Sparsifying transformations are usually also not MRI specific and therefore implemented in independent packages (e.g. Wavelets.jl). For storing image data MRIReco.jl uses NiFTI.jl. Dicom data can potentially be saved by the DICOM.jl package, which, however, is not a hard dependency of MRIReco.

Data Types and Flow

An overview about the most important data types and the data flow during recosntruction is given in the following figure.

DataFlow

Raw data is usually obtained from files (discussed in File Handling). Since the data layout of the RawAcquisitionData object is not perfectly suited for reconstruction, we

+Overview · Julia MRI Package

Overview

As outlined in the introduction MRIReco.jl MRIReco has the philosophy to to reuse functionality provided by other Julia package and basically add the MRI specific functionality. This approach is enabled by the Julia package manager that can handle all dependencies automatically. Packages are therefore considered to be cheap in Julia so that modularization can be done across packages. In the following graph, the most important (not all) dependencies of MRIReco are visualized.

Dependencies

Most importantly, all iterative solvers are implemented in RegularizedLeastSquares.jl so that MRIReco can benefit from all improvements made in that package. Gridding is implemented in the NFFT.jl package, which has many applications byond MRI. Sparsifying transformations are usually also not MRI specific and therefore implemented in independent packages (e.g. Wavelets.jl). For storing image data MRIReco.jl uses NiFTI.jl. Dicom data can potentially be saved by the DICOM.jl package, which, however, is not a hard dependency of MRIReco.

Data Types and Flow

An overview about the most important data types and the data flow during recosntruction is given in the following figure.

DataFlow

Raw data is usually obtained from files (discussed in File Handling). Since the data layout of the RawAcquisitionData object is not perfectly suited for reconstruction, we

diff --git a/dev/search/index.html b/dev/search/index.html index b6c877c6..2cb2ce43 100644 --- a/dev/search/index.html +++ b/dev/search/index.html @@ -1,2 +1,2 @@ -Search · Julia MRI Package

Loading search...

    +Search · Julia MRI Package

    Loading search...

      diff --git a/dev/sequences/index.html b/dev/sequences/index.html index d46d5358..eeff413b 100644 --- a/dev/sequences/index.html +++ b/dev/sequences/index.html @@ -1,2 +1,2 @@ -- · Julia MRI Package
      +- · Julia MRI Package
      diff --git a/dev/trajectories/index.html b/dev/trajectories/index.html index e4014919..eb8d3af1 100644 --- a/dev/trajectories/index.html +++ b/dev/trajectories/index.html @@ -3,4 +3,4 @@ kspaceNodes(tr::Trajectory) readoutTimes(tr::Trajectory)

      For instance we can define a spiral, radial, and cartesian trajectory using

      tr = trajectory("Spiral", 1, 600, windings=10)
       tr = trajectory("Cartesian", 13, 50, EPI_factor=1)
      -tr = trajectory("Radial", 13, 50)

      A variable density spiral can be generated by

      tr = trajectory("SpiralVarDens", 3, 200)

      The k-space nodes can then be accessed by

      nodes = kspaceNodes(tr)

      The script generating the following image can be executed by running the following from within the Julia REPL:

      include(joinpath(dirname(pathof(MRIReco)),"../docs/src/examples/exampleTrajectories.jl"))

      Trajectories

      +tr = trajectory("Radial", 13, 50)

      A variable density spiral can be generated by

      tr = trajectory("SpiralVarDens", 3, 200)

      The k-space nodes can then be accessed by

      nodes = kspaceNodes(tr)

      The script generating the following image can be executed by running the following from within the Julia REPL:

      include(joinpath(dirname(pathof(MRIReco)),"../docs/src/examples/exampleTrajectories.jl"))

      Trajectories