diff --git a/dev/API/index.html b/dev/API/index.html index 58925cd..2991420 100644 --- a/dev/API/index.html +++ b/dev/API/index.html @@ -1,9 +1,9 @@ -API · MRINavigator.jl

API

This page contains documentation of the public API of MRINavigator. 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. For example: ? findCenterline

Run compact pipeline

MRINavigator.defaultNavParamsFunction
params = defaultNavParams()

Define default parameters for data loading, navigator correction and image reconstruction.

Default parameters options are

  • slices::Union{Nothing, Vector} - number of the slices to be loaded, nothing means all slices
  • echoes::Union{Nothing, Vector} - number of the echoes to be loaded, nothing means all echoes
  • rep::Int - repetition to be loaded, the first repetition is 0. It is mandatory to select one
  • comp_sensit::Bool - compute the sensitivity maps using the reference scan
  • comp_centerline::Bool - use the Spinal Cord Toolbox (SCT) to find the centerlne position
  • trust_SCT::Bool - trust SCT or display the resutls and wait for user feedback with the julia REPL
  • use_centerline::Bool - use the spinal cord centerline information in the navigator-based correction
  • corr_type::String - correction type. Options: "none", "knav", "FFT", "FFT_unwrap"
  • FFT_interval::String - interval in mm to be considered for the FFT based approach

Additional required parameters are

  • path_imgData::String - path to the image data file in ISMRMRD format
  • path_refData::String - path to the reference data file in ISMRMRD format
  • path_sensit::String - path to the file where the sensitivity maps will be saved. The file extension must be .mat
  • path_noise::String - path to the file where the noise acquisition will be saved. The file extension must be .jld2
  • path_results::String - path to the results folder

Additional optional parameters are

  • path_niftiMap::String - path to the file where the reconstructed reference data will be saved in nifti format. The file extension must be .nii
  • path_centerline::String - path to the folder where the Spinal Cord Toolbox (SCT) centerline results will be saved
  • path_physio::String - path to the physiological trace recording in .mat format. The variable should be a two columns vector (1:time [ms], 2:trace). The time should be expressed in seconds from the beginning of the day and contain time points before and after the image acquisiton (at least 4 s).

ISMRMRD reference: https://onlinelibrary.wiley.com/doi/epdf/10.1002/mrm.26089 SCT reference: https://spinalcordtoolbox.com

source
MRINavigator.runNavPipelineFunction
runNavPipeline(params::Dict{Symbol, Any})

Run the navigator pipeline. Return reconstructed image and navigator correction output (check NavCorr!).

Arguments

  • params::Dict{Symbol, Any} - MRINavigator parameter structure, check defaultNavParams() for info
source
MRINavigator.saveNoiseFunction
saveNoise(path_imgData::String, path_noise::String)

Extract the noise acquisition form the image data and save it. Call ExtractNoiseData!, check this function for more info.

Arguments

  • path_imgData::String - path to the ISMRMRD file containing the image data
  • path_noise::String - path where the noise file will be saved

ISMRMRD reference: https://onlinelibrary.wiley.com/doi/epdf/10.1002/mrm.26089

source
MRINavigator.loadRawDataFunction
loadRawData(params::Dict{Symbol, Any})

Load the raw data file saved in ISMRMRD format in julia using MRIReco.jl Call ExtractNoiseData!, OrderSlices!, ReverseBipolar!, RemoveRef!. Check the specific functions for info.

MRIReco reference: https://onlinelibrary.wiley.com/doi/epdf/10.1002/mrm.28792 ISMRMRD reference: https://onlinelibrary.wiley.com/doi/epdf/10.1002/mrm.26089

Arguments

  • params::Dict{Symbol, Any} - MRINavigator parameter structure, check defaultNavParams() for info
source
MRINavigator.convertRawToAcqFunction
convertRawToAcq(rawData::::RawAcquisitionData)

Convert raw data to acquisition data using MRIReco.jl, then apply small adjustments. Return acquisition data structure.

MRIReco reference: https://onlinelibrary.wiley.com/doi/epdf/10.1002/mrm.28792

Arguments

  • rawData::RawAcquisitionData - raw data structure obtained loading raw data with MRIReco.jl
source

Coil sensitivity maps

MRINavigator.CompSensitFunction
sensit = CompSensit(acq::AcquisitionData, thresh = 0.13)

Compute the coils sensitivity maps with masking tuned for spinal cord imaging. Use MRICoilSensitivities.jl from MRIReco.jl alternatively.

MRIReco reference: https://onlinelibrary.wiley.com/doi/epdf/10.1002/mrm.28792

Arguments

  • acqData::RawAcquisitionData - acquisition data structure obtained converting raw data with MRIReco.jl
  • tresh::Float64 - masking threshold: increase for reduced mask size, decrease for extended mask size
source
MRINavigator.CompRoughMaskFunction
mask = CompRoughMask(acq::AcquisitionData, slices::Int64, thresh)

Return a rough mask for multiple slices that may not be homogeneous.

Arguments

  • acqData::RawAcquisitionData - acquisition data structure obtained converting raw data with MRIReco.jl
  • slices::Int64 - number of slices in acquisition data
  • tresh::Float64 - masking threshold: increase for reduced mask size, decrease for extended mask size

MRIReco reference: https://onlinelibrary.wiley.com/doi/epdf/10.1002/mrm.28792

source
MRINavigator.ResizeSensit!Function
sensit = ResizeSensit!(sensit::Array{Complex{T},4}, acqMap::AcquisitionData, acqData::AcquisitionData)

Resize and resample the coil sensitivity map to match the acquisition data field of view and resolution. This step is needed for the image reconstruction to run. Image data and reference data must have the same slice center.

Arguments

  • sensit::Array{Complex{T},4} - output of CompSensit(acq::AcquisitionData, thresh)
  • acqMap::RawAcquisitionData - acquisition data structure obtained converting raw reference data with MRIReco.jl
  • acqData::RawAcquisitionData - acquisition data structure obtained converting raw data with MRIReco.jl

MRIReco reference: https://onlinelibrary.wiley.com/doi/epdf/10.1002/mrm.28792

source
MRINavigator.CompResizeSaveSensitFunction
CompResizeSaveSensit(acqMap::AcquisitionData, acqData::AcquisitionData, path_sensit::String)

Compute, resize to the image data dimension and save the coils sensitivity maps with masking tuned for spinal cord imaging. Use MRICoilSensitivities.jl from MRIReco.jl alternatively.

MRIReco reference: https://onlinelibrary.wiley.com/doi/epdf/10.1002/mrm.28792

Arguments

  • acqMap::RawAcquisitionData - acquisition data structure obtained converting raw data with MRIReco.jl
  • acqData::RawAcquisitionData - acquisition data structure obtained converting raw data with MRIReco.jl
  • tresh::Float64 - masking treshold: increase for reduced mask size, decrease for extended mask size
source

Find centerline

MRINavigator.findCenterlineFunction
findCenterline(params::Dict{Symbol, Any})

Reconstruct the reference data, call spinal cord toolbox and find spinal cord centerline. If trust_SCT = false in the parameters dictionary the user interaction is required in the Julia REPL.

Arguments

  • params::Dict{Symbol, Any} - paramerters dictionary

SCT reference: https://spinalcordtoolbox.com

source
MRINavigator.ReconstructMapFunction

ReconstructMap(path_ref::String)

Reconstruct the coil sensitivity map using the MRIReco.jl function.

Arguments

  • path_rep::String - path of reference data in ISMRMRD format

MRIReco reference: https://onlinelibrary.wiley.com/doi/epdf/10.1002/mrm.28792 ISMRMRD reference: https://onlinelibrary.wiley.com/doi/epdf/10.1002/mrm.26089

source
MRINavigator.ReconstructSaveMapFunction
ReconstructSaveMap(path_nifti::String, path_ref::String)

Reconstruct the coil sensitivity map using the MRIReco.jl function and save it in nifti format without spatial information.

Arguments

  • path_nifti::String - path of the nifti file. The file must have .nii extension
  • path_rep::String - path of reference data in ISMRMRD format

MRIReco reference: https://onlinelibrary.wiley.com/doi/epdf/10.1002/mrm.28792 ISMRMRD reference: https://onlinelibrary.wiley.com/doi/epdf/10.1002/mrm.26089

source
MRINavigator.callSCTFunction
callSCT(params::Dict{Symbol, Any})

Call spinal cord toolbox and find spinal cord centerline. If trust_SCT = false in the parameters dictionary the user interaction is required in the Julia REPL

Arguments

  • params::Dict{Symbol, Any} - paramerters dictionary

SCT reference: https://spinalcordtoolbox.com

source
MRINavigator.comp_centerline_posFunction
centerline = comp_centerline_pos(addData::additionalNavInput)

Convert and return centerline position from the reference data cordinate to the acquisition data coordinates (number of voxels).

Arguments

  • addData::additionalNavInput - mandatory additional data structure obtained with the constructor: additionalNavInput
source

Utils

MRINavigator.ReconstructFunction
img = Reconstruct(acqd::AcquisitionData, sensit::Array{Complex{T},4}, noisemat::Union{Array{Complex{T}},Nothing} = nothing)

Call MRIReco.jl reconstruction function and return reconstructed image. Only single repetition in input.

Arguments

  • acqData::RawAcquisitionData - acquisition data structure obtained converting raw data with MRIReco.jl
  • sensit::Array{Complex{T},4} - coil sensitivity map matrix computed with CompSensit(acq::AcquisitionData, thresh = 0.135)
  • noisemat::Union{Array{Complex{T}},Nothing} = nothing - noise data extracted from the raw data structure with ExtractNoiseData!(rawData::RawAcquisitionData)

MRIReco reference: https://onlinelibrary.wiley.com/doi/epdf/10.1002/mrm.28792

source
MRINavigator.directrecoFunction
img = directreco(acq::AcquisitionData)

Call MRIReco.jl reconstruction function and return reconstructed image. Reconstruct coils separately.

Arguments

  • acqData::RawAcquisitionData - acquisition data structure obtained converting raw data with MRIReco.jl

MRIReco reference: https://onlinelibrary.wiley.com/doi/epdf/10.1002/mrm.28792

source
MRINavigator.niftiSaveImgFunction
niftiSaveImg(img::AbstractArray{T}, acq::AcquisitionData, path_nifti::String)

Save the module of the reconstruction output in nifti format, without spatial information.

Arguments

  • img::AbstractArray{T} - reconstruction output
  • acq::AcquisitionData - reconstruction input (MRIReco.jl) needed for saving the voxel dimension
  • path_nifti::String - path of the nifti file. The file must have .nii extension

MRIReco reference: https://onlinelibrary.wiley.com/doi/epdf/10.1002/mrm.28792

source
MRINavigator.NavCorr!Function
navOutput = NavCorr!(nav::Array{Complex{T}, 4}, acqData::AcquisitionData, params::Dict{Symbol, Any}, addData::additionalNavInput) where {T}

Compute the navigator-based correction and apply it to the acquisition data. Multiple pipelines are available: "knav", "FFT" and "FFTunwrap". Return navigator trace, spinal cord centerline in the reconstructed image coordinates, Correlation between navigator and belt data for each slice and position of wrapped points for each slices. Please choose the pipeline using the corrtype filed in the params dictionary.

Arguments

  • nav::Array{Complex{T}, 4} - navigator profiles obtained with the ExtractNavigator function
  • acqData::AcquisitionData - acquisition data structure obtained converting raw data with MRIReco.jl
  • params::Dict{Symbol, Any} - navigator correction paramerters dictionary
  • addData::additionalNavInput - mandatory additional data structure obtained with the constructor: additionalNavInput

MRIReco reference: https://onlinelibrary.wiley.com/doi/epdf/10.1002/mrm.28792

source
MRINavigator.wrap_corr!Function
wrap_corr!(nav::Array{Float64, 4}, wrapped_points::Array{Int8, 2}, correlation::Union{Array{Float64, 1}, Matrix{Float64}}, slices::Int64)

Unwrap the wrapped points identified with the find_wrapped funtion. These functions can be used only if physiological recording is available.

Arguments

  • nav::Array{T, 4} - phase estimates obtained from the navigator data
  • wrapped_points::Array{Int8, 2} - position of the wrapped points, output of find_wrapped
  • correlation::Union{Array{Float64, 1} - correlation values between the physiological recording the navigator estimates for each slice. Output of find_wrapped
  • slices::Int64 - number of slices
source
MRINavigator.find_wrappedFunction
find_wrapped(nav::Array{Float64, 4}, nav_time::Array{Float64, 2}, trace::Array{Float64, 2}, slices::Int64)

Identify the position of the wrapped points in the navigator phase estimates. The respiratory belt recording is necessary. Return the position of the wrapped points and the correlation between each navigator slice and the trace data.

Arguments

  • nav::Array{Float64, 4} - navigator phase estimates
  • nav_time::Array{Float64, 2} - navigator data timestamps in ms from the beginning of the day, for each slice
  • trace::Array{Float64, 2} - physiological trace recording. Two columns vector (1:time [ms], 2:trace). The first column contains the timestamps in ms from the beginning of the day. Include time points before and after the image acquisition (at least 2 s).
  • slices::Int64 - number of slices
source
MRINavigator.TE_corr!Function
nav = TE_corr!(nav::Array{T, 4}, acqd::AcquisitionData, dt_nav::Float64, TE_nav::Float64, numsamples::Int64, numechoes::Int64) where {T}

Compute the phase value for the navigator correction basing on the exact acquisition time of each data sample in the line and for each echo. Return a four-dimensional navigator array.

Arguments

  • nav::Array{T, 4} - phase estimates obtained from the navigator data
  • acqData::AcquisitionData - acquisition data structure obtained converting raw data with MRIReco.jl
  • dt_nav::Float64 - time interval between two samples in the frequency encoding direction
  • TE_nav::Float64 - echo time of the navigator readout
  • numsamples::Int64 - number of samples for each profile
  • numechoes::Int64 - number of echoes

MRIReco reference: https://onlinelibrary.wiley.com/doi/epdf/10.1002/mrm.28792

source
MRINavigator.apply_corr!Function
apply_corr!(nav::Array{T, 4}, acqd::AcquisitionData, numechoes::Int64, numlines::Int64, numsamples::Int64, numslices::Int64) where {T}

Apply the navigator-based correction to the acquisition data structure obtained loading the raw data with MRIReco.jl. After applying the correction the image should be reconstructed. Use the reconstruct function.

Arguments

  • nav::Array{T, 4} - phase estimates obtained from the navigator data
  • acqd::AcquisitionData - acquisition data structure obtained converting raw data with MRIReco.jl
  • numechoes::Int64 - number of echoes
  • numlines::Int64 - number of lines (profiles) for each slice and echo
  • numsamples::Int64 - number of samples for each profile
  • numslices::Int64 - number of slices

MRIReco reference: https://onlinelibrary.wiley.com/doi/epdf/10.1002/mrm.28792

source

Adjust data

MRINavigator.OrderSlices!Function
OrderSlices!(rawData::RawAcquisitionData)

Spatially order the slices in the MRIReco.jl raw data structure. The slices are ordered basing on the position coordinates saved in each profile. If these are not present the slices can not be ordered.

MRIReco reference: https://onlinelibrary.wiley.com/doi/epdf/10.1002/mrm.28792

Arguments

  • rawData::RawAcquisitionData - raw data structure obtained loading raw data with MRIReco.jl
source
MRINavigator.ExtractFlagsFunction
flags = ExtractFlags(rawData::RawAcquisitionData)

Extract the acquisition flags from the MRIReco.jl raw data profiles. Return a 31-element vector for each profile.

MRIReco reference: https://onlinelibrary.wiley.com/doi/epdf/10.1002/mrm.28792

Arguments

  • rawData::RawAcquisitionData - raw data structure obtained loading raw data with MRIReco.jl
source
MRINavigator.ExtractNoiseData!Function
noisemat = ExtractNoiseData!(rawData::RawAcquisitionData, flags::Array{Int64})

Extract and return the noise acquisition from the MRIReco.jl raw data. The noise acquisition is usually the first profile with slice = 0, contrast = 0, repetition = 0. The noise profile should have the 19th flag element equal to 1. Check this with ExtractFlags if errors occur.

MRIReco reference: https://onlinelibrary.wiley.com/doi/epdf/10.1002/mrm.28792

Arguments

  • rawData::RawAcquisitionData - raw data structure obtained loading raw data with MRIReco.jl
source
MRINavigator.ReverseBipolar!Function
ReverseBipolar!(rawData::RawAcquisitionData)

Reflect the MRIReco.jl raw data profiles for bipolar acquisition.

MRIReco reference: https://onlinelibrary.wiley.com/doi/epdf/10.1002/mrm.28792

Arguments

  • rawData::RawAcquisitionData - raw data structure obtained loading raw data with MRIReco.jl
source
MRINavigator.RemoveRef!Function
RemoveRef!(rawData::RawAcquisitionData, slices::Union{Vector{Int64}, Nothing}, echoes::Union{Vector{Int64}, Nothing})

Remove reference data that are not useful for the navigator-based correction from acquisitions with phase stabilization on Siemens scanners. Make sure that this is needed on your data checking the time stamps with mapVBVD in Matlab. Not robust to repeated calls, modifies rawData.

MRIReco reference: https://onlinelibrary.wiley.com/doi/epdf/10.1002/mrm.28792 mapVBVD reference: https://github.com/CIC-methods/FID-A/blob/master/inputOutput/mapVBVD/README.md

Arguments

  • rawData::RawAcquisitionData - raw data structure obtained loading raw data with MRIReco.jl
source
MRINavigator.CopyTE!Function
CopyTE!(rawData::RawAcquisitionData, acqData::AcquisitionData)

Copy the TE values from the MRIReco.jl raw data structure to the acquisition data structure.

MRIReco reference: https://onlinelibrary.wiley.com/doi/epdf/10.1002/mrm.28792

Arguments

  • rawData::RawAcquisitionData - raw data structure obtained loading raw data with MRIReco.jl
  • acqData::AcquisitionData - acquisition data structure obtained converting raw data with MRIReco.jl
source
MRINavigator.AdjustSubsampleIndices!Function
AdjustSubsampleIndices!(acqData::AcquisitionData)

Add subsamples indices in the MRIReco.jl acquisition data structure. Needed when converting data not acquired in the first repetition.

MRIReco reference: https://onlinelibrary.wiley.com/doi/epdf/10.1002/mrm.28792

Arguments

  • acqData::AcquisitionData - acquisition data structure obtained converting raw data with MRIReco.jl
source
MRINavigator.ExtractNavigatorFunction
(nav, nav_time) = ExtractNavigator(rawData::RawAcquisitionData, slices::Union{Vector{Int64}, Nothing})

Extract the navigator profiles from the MRIReco.jl raw data structure. These are registered with the same indices (contract, slice, encoding step) as the image data for the first echo time. Return a navigator array and a navigator time array. The navigator array has four dimensions in the following order: k-space samples, coils, k-space lines, slices. Effective only if the navigator profile was acquired after the first image profile.

MRIReco reference: https://onlinelibrary.wiley.com/doi/epdf/10.1002/mrm.28792

Arguments

  • rawData::RawAcquisitionData - raw data structure obtained loading raw data with MRIReco.jl
source
MRINavigator.selectEcho!Function
SelectEcho!(acqd, idx_echo)

Extract one or more echoes from the acquisition data structure

Arguments

  • acqd::AcquisitionData - acquisition data structure obtained converting raw data with MRIReco.jl
  • idx_echo::Vector{Int64} - vector containing the indexes of the echoes to be selected (starting from 0)

MRIReco reference: https://onlinelibrary.wiley.com/doi/epdf/10.1002/mrm.28792

source
MRINavigator.selectSlice!Function
SelectSlice!(acqd, nav, nav_time, idx_slice)

Extract one or more echoes from the acquisition data structure

Arguments

  • acqd::AcquisitionData - acquisition data structure obtained converting raw data with MRIReco.jl
  • idx_slice::Vector{Int64} - vector containing the indexes of the slices to be selected (starting from 0, downer slice)

Optional arguments with default value = nothing

  • nav::Union{Array{Complex{T}, 4}, Nothin} = nothing - navigator profiles obtained with the ExtractNavigator function
  • nav_time::Union{Array{Complex{Float32}, 2}, Nothing} - time stamps for the navigator data obtained with ExtractNavigator (in ms from the beginning of the day)

MRIReco reference: https://onlinelibrary.wiley.com/doi/epdf/10.1002/mrm.28792

source
MRINavigator.additionalNavInputType
Data = additionalNavInput(
+API · MRINavigator.jl

API

This page contains documentation of the public API of MRINavigator. 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. For example: ? findCenterline

Run compact pipeline

MRINavigator.defaultNavParamsFunction
params = defaultNavParams()

Define default parameters for data loading, navigator correction and image reconstruction.

Default parameters options are

  • slices::Union{Nothing, Vector} - number of the slices to be loaded, nothing means all slices
  • echoes::Union{Nothing, Vector} - number of the echoes to be loaded, nothing means all echoes
  • rep::Int - repetition to be loaded, the first repetition is 0. It is mandatory to select one
  • comp_sensit::Bool - compute the sensitivity maps using the reference scan
  • comp_centerline::Bool - use the Spinal Cord Toolbox (SCT) to find the centerlne position
  • trust_SCT::Bool - trust SCT or display the resutls and wait for user feedback with the julia REPL
  • use_centerline::Bool - use the spinal cord centerline information in the navigator-based correction
  • corr_type::String - correction type. Options: "none", "knav", "FFT", "FFT_unwrap"
  • FFT_interval::String - interval in mm to be considered for the FFT based approach

Additional required parameters are

  • path_imgData::String - path to the image data file in ISMRMRD format
  • path_refData::String - path to the reference data file in ISMRMRD format
  • path_sensit::String - path to the file where the sensitivity maps will be saved. The file extension must be .mat
  • path_noise::String - path to the file where the noise acquisition will be saved. The file extension must be .jld2
  • path_results::String - path to the results folder

Additional optional parameters are

  • path_niftiMap::String - path to the file where the reconstructed reference data will be saved in nifti format. The file extension must be .nii
  • path_centerline::String - path to the folder where the Spinal Cord Toolbox (SCT) centerline results will be saved
  • path_physio::String - path to the physiological trace recording in .mat format. The variable should be a two columns vector (1:time [ms], 2:trace). The time should be expressed in seconds from the beginning of the day and contain time points before and after the image acquisiton (at least 4 s).

ISMRMRD reference: https://onlinelibrary.wiley.com/doi/epdf/10.1002/mrm.26089 SCT reference: https://spinalcordtoolbox.com

source
MRINavigator.runNavPipelineFunction
runNavPipeline(params::Dict{Symbol, Any})

Run the navigator pipeline. Return reconstructed image and navigator correction output (check NavCorr!).

Arguments

  • params::Dict{Symbol, Any} - MRINavigator parameter structure, check defaultNavParams() for info
source
MRINavigator.saveNoiseFunction
saveNoise(path_imgData::String, path_noise::String)

Extract the noise acquisition form the image data and save it. Call ExtractNoiseData!, check this function for more info.

Arguments

  • path_imgData::String - path to the ISMRMRD file containing the image data
  • path_noise::String - path where the noise file will be saved

ISMRMRD reference: https://onlinelibrary.wiley.com/doi/epdf/10.1002/mrm.26089

source
MRINavigator.loadRawDataFunction
loadRawData(params::Dict{Symbol, Any})

Load the raw data file saved in ISMRMRD format in julia using MRIReco.jl Call ExtractNoiseData!, OrderSlices!, ReverseBipolar!, RemoveRef!. Check the specific functions for info.

MRIReco reference: https://onlinelibrary.wiley.com/doi/epdf/10.1002/mrm.28792 ISMRMRD reference: https://onlinelibrary.wiley.com/doi/epdf/10.1002/mrm.26089

Arguments

  • params::Dict{Symbol, Any} - MRINavigator parameter structure, check defaultNavParams() for info
source
MRINavigator.convertRawToAcqFunction
convertRawToAcq(rawData::::RawAcquisitionData)

Convert raw data to acquisition data using MRIReco.jl, then apply small adjustments. Return acquisition data structure.

MRIReco reference: https://onlinelibrary.wiley.com/doi/epdf/10.1002/mrm.28792

Arguments

  • rawData::RawAcquisitionData - raw data structure obtained loading raw data with MRIReco.jl
source

Coil sensitivity maps

MRINavigator.CompSensitFunction
sensit = CompSensit(acq::AcquisitionData, thresh = 0.13)

Compute the coils sensitivity maps with masking tuned for spinal cord imaging. Use MRICoilSensitivities.jl from MRIReco.jl alternatively.

MRIReco reference: https://onlinelibrary.wiley.com/doi/epdf/10.1002/mrm.28792

Arguments

  • acqData::RawAcquisitionData - acquisition data structure obtained converting raw data with MRIReco.jl
  • tresh::Float64 - masking threshold: increase for reduced mask size, decrease for extended mask size
source
MRINavigator.CompRoughMaskFunction
mask = CompRoughMask(acq::AcquisitionData, slices::Int64, thresh)

Return a rough mask for multiple slices that may not be homogeneous.

Arguments

  • acqData::RawAcquisitionData - acquisition data structure obtained converting raw data with MRIReco.jl
  • slices::Int64 - number of slices in acquisition data
  • tresh::Float64 - masking threshold: increase for reduced mask size, decrease for extended mask size

MRIReco reference: https://onlinelibrary.wiley.com/doi/epdf/10.1002/mrm.28792

source
MRINavigator.ResizeSensit!Function
sensit = ResizeSensit!(sensit::Array{Complex{T},4}, acqMap::AcquisitionData, acqData::AcquisitionData)

Resize and resample the coil sensitivity map to match the acquisition data field of view and resolution. This step is needed for the image reconstruction to run. Image data and reference data must have the same slice center.

Arguments

  • sensit::Array{Complex{T},4} - output of CompSensit(acq::AcquisitionData, thresh)
  • acqMap::RawAcquisitionData - acquisition data structure obtained converting raw reference data with MRIReco.jl
  • acqData::RawAcquisitionData - acquisition data structure obtained converting raw data with MRIReco.jl

MRIReco reference: https://onlinelibrary.wiley.com/doi/epdf/10.1002/mrm.28792

source
MRINavigator.CompResizeSaveSensitFunction
CompResizeSaveSensit(acqMap::AcquisitionData, acqData::AcquisitionData, path_sensit::String)

Compute, resize to the image data dimension and save the coils sensitivity maps with masking tuned for spinal cord imaging. Use MRICoilSensitivities.jl from MRIReco.jl alternatively.

MRIReco reference: https://onlinelibrary.wiley.com/doi/epdf/10.1002/mrm.28792

Arguments

  • acqMap::RawAcquisitionData - acquisition data structure obtained converting raw data with MRIReco.jl
  • acqData::RawAcquisitionData - acquisition data structure obtained converting raw data with MRIReco.jl
  • tresh::Float64 - masking treshold: increase for reduced mask size, decrease for extended mask size
source

Find centerline

MRINavigator.findCenterlineFunction
findCenterline(params::Dict{Symbol, Any})

Reconstruct the reference data, call spinal cord toolbox and find spinal cord centerline. If trust_SCT = false in the parameters dictionary the user interaction is required in the Julia REPL.

Arguments

  • params::Dict{Symbol, Any} - paramerters dictionary

SCT reference: https://spinalcordtoolbox.com

source
MRINavigator.ReconstructMapFunction

ReconstructMap(path_ref::String)

Reconstruct the coil sensitivity map using the MRIReco.jl function.

Arguments

  • path_rep::String - path of reference data in ISMRMRD format

MRIReco reference: https://onlinelibrary.wiley.com/doi/epdf/10.1002/mrm.28792 ISMRMRD reference: https://onlinelibrary.wiley.com/doi/epdf/10.1002/mrm.26089

source
MRINavigator.ReconstructSaveMapFunction
ReconstructSaveMap(path_nifti::String, path_ref::String)

Reconstruct the coil sensitivity map using the MRIReco.jl function and save it in nifti format without spatial information.

Arguments

  • path_nifti::String - path of the nifti file. The file must have .nii extension
  • path_rep::String - path of reference data in ISMRMRD format

MRIReco reference: https://onlinelibrary.wiley.com/doi/epdf/10.1002/mrm.28792 ISMRMRD reference: https://onlinelibrary.wiley.com/doi/epdf/10.1002/mrm.26089

source
MRINavigator.callSCTFunction
callSCT(params::Dict{Symbol, Any})

Call spinal cord toolbox and find spinal cord centerline. If trust_SCT = false in the parameters dictionary the user interaction is required in the Julia REPL

Arguments

  • params::Dict{Symbol, Any} - paramerters dictionary

SCT reference: https://spinalcordtoolbox.com

source
MRINavigator.comp_centerline_posFunction
centerline = comp_centerline_pos(addData::additionalNavInput)

Convert and return centerline position from the reference data cordinate to the acquisition data coordinates (number of voxels).

Arguments

  • addData::additionalNavInput - mandatory additional data structure obtained with the constructor: additionalNavInput
source

Utils

MRINavigator.ReconstructFunction
img = Reconstruct(acqd::AcquisitionData, sensit::Array{Complex{T},4}, noisemat::Union{Array{Complex{T}},Nothing} = nothing)

Call MRIReco.jl reconstruction function and return reconstructed image. Only single repetition in input.

Arguments

  • acqData::RawAcquisitionData - acquisition data structure obtained converting raw data with MRIReco.jl
  • sensit::Array{Complex{T},4} - coil sensitivity map matrix computed with CompSensit(acq::AcquisitionData, thresh = 0.135)
  • noisemat::Union{Array{Complex{T}},Nothing} = nothing - noise data extracted from the raw data structure with ExtractNoiseData!(rawData::RawAcquisitionData)

MRIReco reference: https://onlinelibrary.wiley.com/doi/epdf/10.1002/mrm.28792

source
MRINavigator.directrecoFunction
img = directreco(acq::AcquisitionData)

Call MRIReco.jl reconstruction function and return reconstructed image. Reconstruct coils separately.

Arguments

  • acqData::RawAcquisitionData - acquisition data structure obtained converting raw data with MRIReco.jl

MRIReco reference: https://onlinelibrary.wiley.com/doi/epdf/10.1002/mrm.28792

source
MRINavigator.niftiSaveImgFunction
niftiSaveImg(img::AbstractArray{T}, acq::AcquisitionData, path_nifti::String)

Save the module of the reconstruction output in nifti format, without spatial information.

Arguments

  • img::AbstractArray{T} - reconstruction output
  • acq::AcquisitionData - reconstruction input (MRIReco.jl) needed for saving the voxel dimension
  • path_nifti::String - path of the nifti file. The file must have .nii extension

MRIReco reference: https://onlinelibrary.wiley.com/doi/epdf/10.1002/mrm.28792

source
MRINavigator.NavCorr!Function
navOutput = NavCorr!(nav::Array{Complex{T}, 4}, acqData::AcquisitionData, params::Dict{Symbol, Any}, addData::additionalNavInput) where {T}

Compute the navigator-based correction and apply it to the acquisition data. Multiple pipelines are available: "knav", "FFT" and "FFTunwrap". Return navigator trace, spinal cord centerline in the reconstructed image coordinates, Correlation between navigator and belt data for each slice and position of wrapped points for each slices. Please choose the pipeline using the corrtype filed in the params dictionary.

Arguments

  • nav::Array{Complex{T}, 4} - navigator profiles obtained with the ExtractNavigator function
  • acqData::AcquisitionData - acquisition data structure obtained converting raw data with MRIReco.jl
  • params::Dict{Symbol, Any} - navigator correction paramerters dictionary
  • addData::additionalNavInput - mandatory additional data structure obtained with the constructor: additionalNavInput

MRIReco reference: https://onlinelibrary.wiley.com/doi/epdf/10.1002/mrm.28792

source
MRINavigator.wrap_corr!Function
wrap_corr!(nav::Array{Float64, 4}, wrapped_points::Array{Int8, 2}, correlation::Union{Array{Float64, 1}, Matrix{Float64}}, slices::Int64)

Unwrap the wrapped points identified with the find_wrapped funtion. These functions can be used only if physiological recording is available.

Arguments

  • nav::Array{T, 4} - phase estimates obtained from the navigator data
  • wrapped_points::Array{Int8, 2} - position of the wrapped points, output of find_wrapped
  • correlation::Union{Array{Float64, 1} - correlation values between the physiological recording the navigator estimates for each slice. Output of find_wrapped
  • slices::Int64 - number of slices
source
MRINavigator.find_wrappedFunction
find_wrapped(nav::Array{Float64, 4}, nav_time::Array{Float64, 2}, trace::Array{Float64, 2}, slices::Int64)

Identify the position of the wrapped points in the navigator phase estimates. The respiratory belt recording is necessary. Return the position of the wrapped points and the correlation between each navigator slice and the trace data.

Arguments

  • nav::Array{Float64, 4} - navigator phase estimates
  • nav_time::Array{Float64, 2} - navigator data timestamps in ms from the beginning of the day, for each slice
  • trace::Array{Float64, 2} - physiological trace recording. Two columns vector (1:time [ms], 2:trace). The first column contains the timestamps in ms from the beginning of the day. Include time points before and after the image acquisition (at least 2 s).
  • slices::Int64 - number of slices
source
MRINavigator.TE_corr!Function
nav = TE_corr!(nav::Array{T, 4}, acqd::AcquisitionData, dt_nav::Float64, TE_nav::Float64, numsamples::Int64, numechoes::Int64) where {T}

Compute the phase value for the navigator correction basing on the exact acquisition time of each data sample in the line and for each echo. Return a four-dimensional navigator array.

Arguments

  • nav::Array{T, 4} - phase estimates obtained from the navigator data
  • acqData::AcquisitionData - acquisition data structure obtained converting raw data with MRIReco.jl
  • dt_nav::Float64 - time interval between two samples in the frequency encoding direction
  • TE_nav::Float64 - echo time of the navigator readout
  • numsamples::Int64 - number of samples for each profile
  • numechoes::Int64 - number of echoes

MRIReco reference: https://onlinelibrary.wiley.com/doi/epdf/10.1002/mrm.28792

source
MRINavigator.apply_corr!Function
apply_corr!(nav::Array{T, 4}, acqd::AcquisitionData, numechoes::Int64, numlines::Int64, numsamples::Int64, numslices::Int64) where {T}

Apply the navigator-based correction to the acquisition data structure obtained loading the raw data with MRIReco.jl. After applying the correction the image should be reconstructed. Use the reconstruct function.

Arguments

  • nav::Array{T, 4} - phase estimates obtained from the navigator data
  • acqd::AcquisitionData - acquisition data structure obtained converting raw data with MRIReco.jl
  • numechoes::Int64 - number of echoes
  • numlines::Int64 - number of lines (profiles) for each slice and echo
  • numsamples::Int64 - number of samples for each profile
  • numslices::Int64 - number of slices

MRIReco reference: https://onlinelibrary.wiley.com/doi/epdf/10.1002/mrm.28792

source

Adjust data

MRINavigator.OrderSlices!Function
OrderSlices!(rawData::RawAcquisitionData)

Spatially order the slices in the MRIReco.jl raw data structure. The slices are ordered basing on the position coordinates saved in each profile. If these are not present the slices can not be ordered.

MRIReco reference: https://onlinelibrary.wiley.com/doi/epdf/10.1002/mrm.28792

Arguments

  • rawData::RawAcquisitionData - raw data structure obtained loading raw data with MRIReco.jl
source
MRINavigator.ExtractFlagsFunction
flags = ExtractFlags(rawData::RawAcquisitionData)

Extract the acquisition flags from the MRIReco.jl raw data profiles. Return a 31-element vector for each profile.

MRIReco reference: https://onlinelibrary.wiley.com/doi/epdf/10.1002/mrm.28792

Arguments

  • rawData::RawAcquisitionData - raw data structure obtained loading raw data with MRIReco.jl
source
MRINavigator.ExtractNoiseData!Function
noisemat = ExtractNoiseData!(rawData::RawAcquisitionData, flags::Array{Int64})

Extract and return the noise acquisition from the MRIReco.jl raw data. The noise acquisition is usually the first profile with slice = 0, contrast = 0, repetition = 0. The noise profile should have the 19th flag element equal to 1. Check this with ExtractFlags if errors occur.

MRIReco reference: https://onlinelibrary.wiley.com/doi/epdf/10.1002/mrm.28792

Arguments

  • rawData::RawAcquisitionData - raw data structure obtained loading raw data with MRIReco.jl
source
MRINavigator.ReverseBipolar!Function
ReverseBipolar!(rawData::RawAcquisitionData)

Reflect the MRIReco.jl raw data profiles for bipolar acquisition.

MRIReco reference: https://onlinelibrary.wiley.com/doi/epdf/10.1002/mrm.28792

Arguments

  • rawData::RawAcquisitionData - raw data structure obtained loading raw data with MRIReco.jl
source
MRINavigator.RemoveRef!Function
RemoveRef!(rawData::RawAcquisitionData, slices::Union{Vector{Int64}, Nothing}, echoes::Union{Vector{Int64}, Nothing})

Remove reference data that are not useful for the navigator-based correction from acquisitions with phase stabilization on Siemens scanners. Make sure that this is needed on your data checking the time stamps with mapVBVD in Matlab. Not robust to repeated calls, modifies rawData.

MRIReco reference: https://onlinelibrary.wiley.com/doi/epdf/10.1002/mrm.28792 mapVBVD reference: https://github.com/CIC-methods/FID-A/blob/master/inputOutput/mapVBVD/README.md

Arguments

  • rawData::RawAcquisitionData - raw data structure obtained loading raw data with MRIReco.jl
source
MRINavigator.CopyTE!Function
CopyTE!(rawData::RawAcquisitionData, acqData::AcquisitionData)

Copy the TE values from the MRIReco.jl raw data structure to the acquisition data structure.

MRIReco reference: https://onlinelibrary.wiley.com/doi/epdf/10.1002/mrm.28792

Arguments

  • rawData::RawAcquisitionData - raw data structure obtained loading raw data with MRIReco.jl
  • acqData::AcquisitionData - acquisition data structure obtained converting raw data with MRIReco.jl
source
MRINavigator.AdjustSubsampleIndices!Function
AdjustSubsampleIndices!(acqData::AcquisitionData)

Add subsamples indices in the MRIReco.jl acquisition data structure. Needed when converting data not acquired in the first repetition.

MRIReco reference: https://onlinelibrary.wiley.com/doi/epdf/10.1002/mrm.28792

Arguments

  • acqData::AcquisitionData - acquisition data structure obtained converting raw data with MRIReco.jl
source
MRINavigator.ExtractNavigatorFunction
(nav, nav_time) = ExtractNavigator(rawData::RawAcquisitionData, slices::Union{Vector{Int64}, Nothing})

Extract the navigator profiles from the MRIReco.jl raw data structure. These are registered with the same indices (contract, slice, encoding step) as the image data for the first echo time. Return a navigator array and a navigator time array. The navigator array has four dimensions in the following order: k-space samples, coils, k-space lines, slices. Effective only if the navigator profile was acquired after the first image profile.

MRIReco reference: https://onlinelibrary.wiley.com/doi/epdf/10.1002/mrm.28792

Arguments

  • rawData::RawAcquisitionData - raw data structure obtained loading raw data with MRIReco.jl
source
MRINavigator.selectEcho!Function
SelectEcho!(acqd, idx_echo)

Extract one or more echoes from the acquisition data structure

Arguments

  • acqd::AcquisitionData - acquisition data structure obtained converting raw data with MRIReco.jl
  • idx_echo::Vector{Int64} - vector containing the indexes of the echoes to be selected (starting from 0)

MRIReco reference: https://onlinelibrary.wiley.com/doi/epdf/10.1002/mrm.28792

source
MRINavigator.selectSlice!Function
SelectSlice!(acqd, nav, nav_time, idx_slice)

Extract one or more echoes from the acquisition data structure

Arguments

  • acqd::AcquisitionData - acquisition data structure obtained converting raw data with MRIReco.jl
  • idx_slice::Vector{Int64} - vector containing the indexes of the slices to be selected (starting from 0, downer slice)

Optional arguments with default value = nothing

  • nav::Union{Array{Complex{T}, 4}, Nothin} = nothing - navigator profiles obtained with the ExtractNavigator function
  • nav_time::Union{Array{Complex{Float32}, 2}, Nothing} - time stamps for the navigator data obtained with ExtractNavigator (in ms from the beginning of the day)

MRIReco reference: https://onlinelibrary.wiley.com/doi/epdf/10.1002/mrm.28792

source
MRINavigator.additionalNavInputType
Data = additionalNavInput(
     noisemat::Array{Complex{Float32}, 2},
     rawData::RawAcquisitionData,
     acqData::AcquisitionData,
     acqMap::Union{AcquisitionData, Nothing} = nothing,
     nav_time::Union{Array{Complex{Float32}, 2}, Nothing} = nothing,
     trace::Union{Matrix{Float64}, Nothing} = nothing,
-    centerline::Union{Vector{Float64}, Nothing} = nothing)

Construct the additional data structure that is needed as input to navCorr!

Arguments

  • noisemat::Array{Complex{Float32}, 2} - noise data obtained with ExtractNoiseData!
  • rawData::RawAcquisitionData - raw data structure obtained loading raw data with MRIReco.jl
  • acqData::AcquisitionData - acquisition data structure obtained converting raw data with MRIReco.jl

Optional arguments with default value = nothing

  • acqMap::Union{AcquisitionData, Nothing} = nothing - acquisition data structure obtained converting reference data with MRIReco.jl
  • nav_time::Union{Array{Complex{Float32}, 2}, Nothing} - time stamps for the navigator data obtained with ExtractNavigator (in ms from the beginning of the day)
  • trace::Union{Matrix{Float64}, Nothing} - respiratory trace time stamps and values in matrix with two colunms (1:time [ms], 2:trace). Include time points before and after the image acquisition (at least 2 s).
  • centerline::Union{Vector{Float64}, Nothing} - coordinates of the spinal cord ceterline obtained with callSCT

MRIReco reference: https://onlinelibrary.wiley.com/doi/epdf/10.1002/mrm.28792

source
+ centerline::Union{Vector{Float64}, Nothing} = nothing)

Construct the additional data structure that is needed as input to navCorr!

Arguments

  • noisemat::Array{Complex{Float32}, 2} - noise data obtained with ExtractNoiseData!
  • rawData::RawAcquisitionData - raw data structure obtained loading raw data with MRIReco.jl
  • acqData::AcquisitionData - acquisition data structure obtained converting raw data with MRIReco.jl

Optional arguments with default value = nothing

  • acqMap::Union{AcquisitionData, Nothing} = nothing - acquisition data structure obtained converting reference data with MRIReco.jl
  • nav_time::Union{Array{Complex{Float32}, 2}, Nothing} - time stamps for the navigator data obtained with ExtractNavigator (in ms from the beginning of the day)
  • trace::Union{Matrix{Float64}, Nothing} - respiratory trace time stamps and values in matrix with two colunms (1:time [ms], 2:trace). Include time points before and after the image acquisition (at least 2 s).
  • centerline::Union{Vector{Float64}, Nothing} - coordinates of the spinal cord ceterline obtained with callSCT

MRIReco reference: https://onlinelibrary.wiley.com/doi/epdf/10.1002/mrm.28792

source
diff --git a/dev/GettingStarted/index.html b/dev/GettingStarted/index.html index c8ad44b..e369610 100644 --- a/dev/GettingStarted/index.html +++ b/dev/GettingStarted/index.html @@ -21,4 +21,4 @@ params[:path_sensit] = params[:root_path] * params[:subject] * "/Results/senseMap_GRE.jld2" params[:path_noise] = params[:root_path] * params[:subject] * "/Results/noisemat.jld2" params[:path_results] = params[:root_path] * params[:subject] * "/Results/" -params[:file_name] = "gre2D"

User examples

Three user examples are available in the folder user examples:

Disclaimer

Siemens data only were used to develop MRINavigator. All the functions to adjust the data before running the pipeline (e.g., the function to extract the navigator profiles or to remove the reference profiles) have been tested on Siemens data only. There is no guarantee that all of these functions are needed and will work on other vendors data. Other vendors users should convert the raw data in ISMRMRD format and when loading these into the Julia framework they should make sure that all the needed information is present. Please start from the complete user example if doing this. The functions to compute and apply the corrections should then work correctly.

+params[:file_name] = "gre2D"

User examples

Three user examples are available in the folder user examples:

Disclaimer

Siemens data only were used to develop MRINavigator. All the functions to adjust the data before running the pipeline (e.g., the function to extract the navigator profiles or to remove the reference profiles) have been tested on Siemens data only. There is no guarantee that all of these functions are needed and will work on other vendors data. Other vendors users should convert the raw data in ISMRMRD format and when loading these into the Julia framework they should make sure that all the needed information is present. Please start from the complete user example if doing this. The functions to compute and apply the corrections should then work correctly.

diff --git a/dev/Pipelines/index.html b/dev/Pipelines/index.html index 8cd23b7..637f070 100644 --- a/dev/Pipelines/index.html +++ b/dev/Pipelines/index.html @@ -1,2 +1,2 @@ -Pipelines · MRINavigator.jl

Navigator-based correction pipelines

Standard navigator processing that has been developed for brain imaging is not sufficiently robust in the spinal cord due to the following:

  • Higher in-plane variability in the field distribution
  • Signal-to-noise ratio (SNR) is lower
  • Larger variations in signal contribution from different receiver coils compared to most anatomical regions

To face these challenges, we developed:

  • SNR weighted averaging of the navigator profile
  • mean phase removal to recenter the phase distribution and reduce wrapping
  • A fast Fourier transform (FFT) and spatial region selection step. This consists of applying a one-dimensional Fourier transform to each navigator profile and considering for the phase estimate only the data points in a certain spatial interval centered on the spinal cord.
  • Phase unwrapping function for the navigator estimates using the respiratory trace recording.

These features are combined in multiple pipelines as shown in the figure.

Pipelines

The available pipelines are:

  • k_nav is the k-space navigator processing commonly used for brain imaging, optimized with SNR weighted averaging and mean phase removal.
  • FFT_nav that includes an additional FFT and spatial region selection step compared to k_nav.
  • unwrap includes the phase unwrapping algorithm and makes use of the respiratory belt recordings.

MRINavigator is designed to be flexible and multiple analysis parameters are tuneable. It is possible to select the correction pipeline and parameters using the params dictionary. For more information check the Get started or API pages. Alternatively start julia from the command line, and type ? to enter the help REPL mode. Then enter

help?> defaultNavParams

Listed below are the main features and parameters the user can select and modify:

  • The Spinal cord toolbox (SCT) can be used to locate the spinal cord centerline position (params[:comp_centerline] = true). To do this the reference data, which are fully sampled, are reconstructed combining the coils, and saved in NIfTI format (params[:reconstruct_map] = true). The user can also manually locate the centerline if the automatic algorithm fails, selecting params[:trust_SCT] = false. Alternatively, the center of the image will be used (params[:use_centerline] = false).
  • The interval width for the region selection after the FFT step can be adjusted (params[:FFT_interval] = type number in millimeters).
  • The unwrap function can be applied both to the FFT and the k nav pipelines. To do this type params[:corr_type] = "FFT_unwrap" or params[:corr_type] = "knav_unwrap".
+Pipelines · MRINavigator.jl

Navigator-based correction pipelines

Standard navigator processing that has been developed for brain imaging is not sufficiently robust in the spinal cord due to the following:

  • Higher in-plane variability in the field distribution
  • Signal-to-noise ratio (SNR) is lower
  • Larger variations in signal contribution from different receiver coils compared to most anatomical regions

To face these challenges, we developed:

  • SNR weighted averaging of the navigator profile
  • mean phase removal to recenter the phase distribution and reduce wrapping
  • A fast Fourier transform (FFT) and spatial region selection step. This consists of applying a one-dimensional Fourier transform to each navigator profile and considering for the phase estimate only the data points in a certain spatial interval centered on the spinal cord.
  • Phase unwrapping function for the navigator estimates using the respiratory trace recording.

These features are combined in multiple pipelines as shown in the figure.

Pipelines

The available pipelines are:

  • k_nav is the k-space navigator processing commonly used for brain imaging, optimized with SNR weighted averaging and mean phase removal.
  • FFT_nav that includes an additional FFT and spatial region selection step compared to k_nav.
  • unwrap includes the phase unwrapping algorithm and makes use of the respiratory belt recordings.

MRINavigator is designed to be flexible and multiple analysis parameters are tuneable. It is possible to select the correction pipeline and parameters using the params dictionary. For more information check the Get started or API pages. Alternatively start julia from the command line, and type ? to enter the help REPL mode. Then enter

help?> defaultNavParams

Listed below are the main features and parameters the user can select and modify:

  • The Spinal cord toolbox (SCT) can be used to locate the spinal cord centerline position (params[:comp_centerline] = true). To do this the reference data, which are fully sampled, are reconstructed combining the coils, and saved in NIfTI format (params[:reconstruct_map] = true). The user can also manually locate the centerline if the automatic algorithm fails, selecting params[:trust_SCT] = false. Alternatively, the center of the image will be used (params[:use_centerline] = false).
  • The interval width for the region selection after the FFT step can be adjusted (params[:FFT_interval] = type number in millimeters).
  • The unwrap function can be applied both to the FFT and the k nav pipelines. To do this type params[:corr_type] = "FFT_unwrap" or params[:corr_type] = "knav_unwrap".
diff --git a/dev/index.html b/dev/index.html index 16c209f..e6316b2 100644 --- a/dev/index.html +++ b/dev/index.html @@ -1,2 +1,2 @@ -Home · MRINavigator.jl

MRINavigator

Magnetic Resonance Imaging Navigator-based corrections

Table of contents

Introduction

MRINavigator provides multiple navigator-based correction pipelines for Magnetic Resonance (MR) images. These aim at demodulating time-dependent field variations present in multi echo-gradient echo acquisitions. The package was developed with a focus on spinal cord imaging, but it can be used for multiple imaging applications. The corrections are to be applied to the raw data before the image reconstruction. MRIReco.jl can be used to reconstruct the images.

Note

MRINavigator.jl is newly published, and any feedback is welcome. Please report any bugs or feature requests as an Issue in Github.

Installation

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

pkg> add MRINavigator

This will install MRINavigator and all its dependencies. If you want to develop MRINavigator itself you can checkout MRINavigator locally as usual by calling

pkg> dev MRINavigator

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

Requirements

To use some package functionalities, external softwares are necessary. These include:

Using these toolboxes should improve the correction outcome of the pipelines including a Fourier transform (FFT) step. Use of SCT and FSLEyes is only relevant for spinal cord acquisitions. For additional information read the Get started and Navigator-based correction pipelines sections.

Testing MRINavigator

To make sure that the package is correctly installed, start julia from the command line, type ] to enter the package manager REPL mode. Then enter

pkg> test MRINavigator

Updating MRINavigator

To update MRINavigator to the latest version, start julia from the command line, type ] to enter the package manager REPL mode. Then enter

pkg> update MRINavigator

Multi-echo gradient-echo (GRE) sequences are commonly acquired both in research and clinical practice. However, one of their main limitations is the sensitivity to field instabilities both in space and time. Indeed, for the signal spatial encoding to be effective, a background homogeneous field in time and space is required. Time-varying background fields can lead to phase modulation between k-space lines, and therefore TE-dependent ghosting artefacts. Navigator readouts in the k-space center can be used to measure the intensity of the field fluctuations,enabling correct demodulation of the acquired signal before image reconstruction. The standard navigator-based correction was developed for brain imaging and it is not robust when applied in other areas e.g. the spinal cord. When failing, the correction can even exacerbate the problem. This package provides optimized post-processing pipelines to correct for dynamic field instabilities in GRE sequences. For additional information read the Navigator-based correction pipelines section.

Plotting

MRINavigator does not depend upon a particular plotting package since there are various plotting packages available in Julia. Feel free to use your package of choice.

Acknowledgements

This package uses the reconstruction functions and data structures available in MRIReco.jl. T. Knopp and M. Grosser (2021). MRIReco.jl: An MRI Reconstruction Framework written in Julia. Magnetic Resonance in Medicine. 2021.

Citing this work

If you use MRINavigator in you research please cite the following:

Optimised navigator correction of physiological field fluctuations in multi-echo GRE of the lumbar spinal cord at 3T. L Beghini, G David, M D Liechti, S Büeler, S J Vannesjo. 2023. Proceedings of the International Society for Magnetic Resonance in Medicine (ISMRM).

+Home · MRINavigator.jl

MRINavigator

Magnetic Resonance Imaging Navigator-based corrections

Table of contents

Introduction

MRINavigator provides multiple navigator-based correction pipelines for Magnetic Resonance (MR) images. These aim at demodulating time-dependent field variations present in multi echo-gradient echo acquisitions. The package was developed with a focus on spinal cord imaging, but it can be used for multiple imaging applications. The corrections are to be applied to the raw data before the image reconstruction. MRIReco.jl can be used to reconstruct the images.

Note

MRINavigator.jl is newly published, and any feedback is welcome. Please report any bugs or feature requests as an Issue in Github.

Installation

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

pkg> add MRINavigator

This will install MRINavigator and all its dependencies. If you want to develop MRINavigator itself you can checkout MRINavigator locally as usual by calling

pkg> dev MRINavigator

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

Requirements

To use some package functionalities, external softwares are necessary. These include:

Using these toolboxes should improve the correction outcome of the pipelines including a Fourier transform (FFT) step. Use of SCT and FSLEyes is only relevant for spinal cord acquisitions. For additional information read the Get started and Navigator-based correction pipelines sections.

Testing MRINavigator

To make sure that the package is correctly installed, start julia from the command line, type ] to enter the package manager REPL mode. Then enter

pkg> test MRINavigator

Updating MRINavigator

To update MRINavigator to the latest version, start julia from the command line, type ] to enter the package manager REPL mode. Then enter

pkg> update MRINavigator

Multi-echo gradient-echo (GRE) sequences are commonly acquired both in research and clinical practice. However, one of their main limitations is the sensitivity to field instabilities both in space and time. Indeed, for the signal spatial encoding to be effective, a background homogeneous field in time and space is required. Time-varying background fields can lead to phase modulation between k-space lines, and therefore TE-dependent ghosting artefacts. Navigator readouts in the k-space center can be used to measure the intensity of the field fluctuations,enabling correct demodulation of the acquired signal before image reconstruction. The standard navigator-based correction was developed for brain imaging and it is not robust when applied in other areas e.g. the spinal cord. When failing, the correction can even exacerbate the problem. This package provides optimized post-processing pipelines to correct for dynamic field instabilities in GRE sequences. For additional information read the Navigator-based correction pipelines section.

Plotting

MRINavigator does not depend upon a particular plotting package since there are various plotting packages available in Julia. Feel free to use your package of choice.

Acknowledgements

This package uses the reconstruction functions and data structures available in MRIReco.jl. T. Knopp and M. Grosser (2021). MRIReco.jl: An MRI Reconstruction Framework written in Julia. Magnetic Resonance in Medicine. 2021.

Citing this work

If you use MRINavigator in you research please cite the following:

Optimised navigator correction of physiological field fluctuations in multi-echo GRE of the lumbar spinal cord at 3T. L Beghini, G David, M D Liechti, S Büeler, S J Vannesjo. 2023. Proceedings of the International Society for Magnetic Resonance in Medicine (ISMRM).

diff --git a/dev/search/index.html b/dev/search/index.html index d7517d2..1990732 100644 --- a/dev/search/index.html +++ b/dev/search/index.html @@ -1,2 +1,2 @@ -Search · MRINavigator.jl

Loading search...

    +Search · MRINavigator.jl

    Loading search...