Skip to content

Commit

Permalink
Merge pull request #161 from MagneticResonanceImaging/nh/regLSUpdate
Browse files Browse the repository at this point in the history
Update RegLS interface
  • Loading branch information
migrosser authored Nov 16, 2023
2 parents c259559 + 8221932 commit 27bd616
Show file tree
Hide file tree
Showing 22 changed files with 235 additions and 205 deletions.
2 changes: 1 addition & 1 deletion MRIFiles/test/runtests.jl
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
using Test, LinearAlgebra, MRIFiles, MRIReco, MRICoilSensitivities

using MRIReco.RegularizedLeastSquares
using Scratch
using LazyArtifacts
using ImageUtils
Expand Down
5 changes: 2 additions & 3 deletions MRIFiles/test/testBrukerFile.jl
Original file line number Diff line number Diff line change
Expand Up @@ -98,9 +98,8 @@ params = Dict{Symbol, Any}()
params[:reco] = "multiCoil" # encoding model
params[:reconSize] = acq.encodingSize
params[:sparseTrafo] = "Wavelet" #sparse trafo
params[:regularization] = "L1" # regularization
params[] = 30.0
params[:solver] = "admm" # solver
params[:reg] = L1Regularization(30.0) # regularization
params[:solver] = ADMM # solver
params[:iterations] = 3
params[:iterationsInner] = 2
params[] = 1.0e-1
Expand Down
4 changes: 2 additions & 2 deletions Project.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
name = "MRIReco"
uuid = "bdf86e05-2d2b-5731-a332-f3fe1f9e047f"
authors = ["Tobias Knopp <[email protected]>"]
version = "0.8.0"
version = "0.9.0"

[deps]
AxisArrays = "39de3d68-74b9-583c-8d2d-e117c070f3a9"
Expand All @@ -26,7 +26,7 @@ MRIOperators = "0.2"
PrecompileTools = "1"
ProgressMeter = "1.2"
Reexport = "0.2, 1"
RegularizedLeastSquares = "0.9.0, 0.10"
RegularizedLeastSquares = "0.11"
Unitful = "1.2"
julia = "1.6"

Expand Down
11 changes: 5 additions & 6 deletions docs/lit/examples/03-subspaceReconstruction.jl
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ using ImageUtils: shepp_logan
using LinearAlgebra
using Random
using MRIReco, MRISimulation, MRICoilSensitivities, MRISampling,MRIOperators
using MRIReco.RegularizedLeastSquares
color=Makie.wong_colors() # color for plots

N = 128
Expand Down Expand Up @@ -86,10 +87,9 @@ acqData_u2 = AcquisitionData(kspace);
params = Dict{Symbol,Any}()
params[:reconSize] = (N, N)
params[:reco] = "multiCoilMultiEcho"
params[:regularization] = "L2"
params[] = 1.e-3
params[:reg] = L2Regularization(1.e-3)
params[:iterations] = 1
params[:solver] = "cgnr"
params[:solver] = CGNR
params[:senseMaps] = reshape(coilsens, N, N, 1, nCh)

im_x = reconstruction(acqData, params).data # fully reconstruction
Expand Down Expand Up @@ -192,10 +192,9 @@ params = Dict{Symbol,Any}()
params[:reconSize] = (N, N)
params[:reco] = "multiCoilMultiEchoSubspace"

params[:regularization] = "L1"
params[:reg] = L1Regularization(0.001)
params[:sparseTrafo] = "Wavelet" #sparse trafo
params[] = 0.001
params[:solver] = "admm"
params[:solver] = ADMM
params[:senseMaps] = reshape(coilsens, N, N, 1, nCh)
params[:basis] = basis

Expand Down
5 changes: 2 additions & 3 deletions docs/src/SENSE.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,9 @@ acqData = simulation(I, params)
params = Dict{Symbol, Any}()
params[:reco] = "multiCoil"
params[:reconSize] = (N,N)
params[:regularization] = "L2"
params[] = 1.e-3
params[:reg] = L2Regularization(1.e-3)
params[:iterations] = 40
params[:solver] = "cgnr"
params[:solver] = CGNR
params[:senseMaps] = coilsens

# do reconstruction
Expand Down
14 changes: 6 additions & 8 deletions docs/src/compressedSensing.md
Original file line number Diff line number Diff line change
Expand Up @@ -52,11 +52,10 @@ params[:reco] = "multiCoil"
params[:reconSize] = (320,320)
params[:senseMaps] = smaps

params[:solver] = "cgnr"
params[:regularization] = "L2"
params[] = 1.e-4
params[:solver] = CGNR
params[:reg] = L2Regularization(1.e-4)
params[:iterations] = 5
params[:normalizeReg] = true
params[:normalizeReg] = MeasurementBasedNormalization()

img_cg = reconstruction(acqDataSub, params)
```
Expand All @@ -69,15 +68,14 @@ params[:reco] = "multiCoil"
params[:reconSize] = (320,320)
params[:senseMaps] = smaps

params[:solver] = "admm"
params[:regularization] = "TV"
params[] = 1.e-1 # 5.e-2
params[:solver] = ADMM
params[:reg] = TVRegularization(1.e-1, shape = (320, 320))
params[:iterations] = 50
params[] = 0.1
params[:absTol] = 1.e-4
params[:relTol] = 1.e-2
params[:tolInner] = 1.e-2
params[:normalizeReg] = true
params[:normalizeReg] = MeasurementBasedNormalization()

img_tv = reconstruction(acqDataSub, params)
```
Expand Down
5 changes: 2 additions & 3 deletions docs/src/custom.md
Original file line number Diff line number Diff line change
Expand Up @@ -85,11 +85,10 @@ params = Dict{Symbol,Any}()
params[:reco] = "standard"
params[:reconSize] = (nx,ny)
params[:iterations] = 50
params[] = 2.e-2
params[:regularization] = "L1"
params[:reg] = L1Regularization(2.e-2)
params[:sparseTrafo] = dictOp(D,(nx,ny),(px,py),2.e-2)
params[] = 0.1
params[:solver] = "admm"
params[:solver] = ADMM
params[:absTol] = 1.e-4
params[:relTol] = 1.e-2

Expand Down
16 changes: 7 additions & 9 deletions docs/src/examples/exampleCS.jl
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using PyPlot, MRIReco
using PyPlot, MRIReco, MRIReco.RegularizedLeastSquares

# load fully sampled data
f = ISMRMRDFile(@__DIR__()*"/data/knee_3dFSE_slice170.h5")
Expand Down Expand Up @@ -32,11 +32,10 @@ params[:reco] = "multiCoil"
params[:reconSize] = (320,320)
params[:senseMaps] = smaps

params[:solver] = "cgnr"
params[:regularization] = "L2"
params[] = 1.e-4
params[:solver] = CGNR
params[:reg] = L2Regularization(1.e-4)
params[:iterations] = 5
params[:normalizeReg] = true
params[:normalizeReg] = MeasurementBasedNormalization()

img_cg = reconstruction(acqDataSub, params)

Expand All @@ -47,15 +46,14 @@ params[:reco] = "multiCoil"
params[:reconSize] = (320,320)
params[:senseMaps] = smaps

params[:solver] = "admm"
params[:regularization] = "TV"
params[] = 1.e-1 # 5.e-2
params[:solver] = ADMM
params[:reg] = TVRegularization(1.e-1, shape = (320, 320))
params[:iterations] = 50
params[] = 0.1
params[:absTol] = 1.e-4
params[:relTol] = 1.e-2
params[:tolInner] = 1.e-2
params[:normalizeReg] = true
params[:normalizeReg] = MeasurementBasedNormalization()

img_tv = reconstruction(acqDataSub, params)

Expand Down
7 changes: 3 additions & 4 deletions docs/src/examples/exampleCustom.jl
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using Wavelets, DelimitedFiles, LinearAlgebra, PyPlot, MRIReco
using Wavelets, DelimitedFiles, LinearAlgebra, PyPlot, MRIReco, MRIReco.RegularizedLeastSquares

function analyzeImage(x::Vector{T},D::Matrix{T},xsize::NTuple{2,Int64},psize::NTuple{2,Int64};t0::Int64=size(D,2),tol=1e-3) where T
nx,ny = xsize
Expand Down Expand Up @@ -66,11 +66,10 @@ params = Dict{Symbol,Any}()
params[:reco] = "standard"
params[:reconSize] = (nx,ny)
params[:iterations] = 50
params[] = 2.e-2
params[:regularization] = "L1"
params[:reg] = L1Regularization(2.e-2)
params[:sparseTrafo] = dictOp(D,(nx,ny),(px,py),2.e-2)
params[] = 0.1
params[:solver] = "admm"
params[:solver] = ADMM
params[:absTol] = 1.e-4
params[:relTol] = 1.e-2

Expand Down
6 changes: 3 additions & 3 deletions docs/src/examples/exampleFieldmap.jl
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using MRIReco
using MRIReco, MRIReco.RegularizedLeastSquares

##### simple example ####

Expand Down Expand Up @@ -32,9 +32,9 @@ exportImage(filename, abs.(Ireco[:,:,1,1,1]) )

# now with fieldmap correction
params[:reco] = "standard"
params[:regularization] = "L2"
params[:reg] = L2Regularization(0.0)
params[:iterations] = 3
params[:solver] = "admm"
params[:solver] = ADMM
params[:correctionMap] = cmap
params[:alpha] = 1.75
params[:m] = 4.0
Expand Down
7 changes: 3 additions & 4 deletions docs/src/examples/exampleParallel/reconstruction.jl
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using MRIReco, FFTW, LinearAlgebra, BenchmarkTools
using MRIReco, FFTW, LinearAlgebra, BenchmarkTools, MRIReco.RegularizedLeastSquares

FFTW.set_num_threads(1);BLAS.set_num_threads(1)

Expand All @@ -16,10 +16,9 @@ acqData = AcquisitionData(raw)
params = Dict{Symbol, Any}()
params[:reco] = "multiCoil"
params[:reconSize] = (N,N)
params[:regularization] = "L2"
params[] = 1.e-3
params[:reg] = L2Regularization(1.e-3)
params[:iterations] = 40
params[:solver] = "cgnr"
params[:solver] = CGNR
params[:senseMaps] = coilsens
#params[:correctionMap] = cmap

Expand Down
7 changes: 3 additions & 4 deletions docs/src/examples/exampleSENSE.jl
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using PyPlot, MRIReco
using PyPlot, MRIReco, MRIReco.RegularizedLeastSquares

##### simple example ####

Expand Down Expand Up @@ -26,10 +26,9 @@ acqData = simulation(I, params)
params = Dict{Symbol, Any}()
params[:reco] = "multiCoil"
params[:reconSize] = (N,N)
params[:regularization] = "L2"
params[] = 1.e-3
params[:reg] = L2Regularization(1.e-3)
params[:iterations] = 40
params[:solver] = "cgnr"
params[:solver] = CGNR
params[:senseMaps] = coilsens
params[:toeplitz] = false
@time Ireco = reconstruction(acqData, params)
Expand Down
2 changes: 1 addition & 1 deletion docs/src/overview.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ following graph, the most important (not all) dependencies of MRIReco are visual

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.
is implemented in the NFFT.jl package, which has many applications beyond 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,
Expand Down
9 changes: 4 additions & 5 deletions examples/mridataorg/example.jl
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ end
# Download data
include("downloadData.jl")

using PyPlot, MRIReco, MRIFiles, MRICoilSensitivities
using PyPlot, MRIReco, MRIFiles, MRICoilSensitivities, MRIReco.RegularizedLeastSquares, FFTW

##################
## Data Loading ##
Expand Down Expand Up @@ -45,17 +45,16 @@ smaps = espirit(acqData2d, (6,6), 30, eigThresh_1=0.04, eigThresh_2=0.98)
params = Dict{Symbol, Any}()
params[:reco] = "multiCoil"
params[:reconSize] = Tuple(acqData2d.encodingSize[1:2])
params[:solver] = "admm"
params[:regularization] = "L1"
params[:solver] = ADMM
params[:reg] = L1Regularization(2.e-1)
params[:sparseTrafo] = "Wavelet"
params[] = 2.e-1
params[:iterations] = 30
params[] = 0.1
params[:absTol] = 1.e-4
params[:relTol] = 1.e-3
params[:tolInner] = 1.e-2
params[:senseMaps] = smaps
params[:normalizeReg] = true
params[:normalizeReg] = MeasurementBasedNormalization()

############################
## Perform reconstruction ##
Expand Down
1 change: 0 additions & 1 deletion src/MRIReco.jl
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ include("Reconstruction/Reconstruction.jl")
function __init__()
if Threads.nthreads() > 1
BLAS.set_num_threads(1)
FFTW.set_num_threads(1)
elseif Sys.iswindows()
BLAS.set_num_threads(1) # see https://github.com/JuliaLang/julia/issues/36976
end
Expand Down
Loading

0 comments on commit 27bd616

Please sign in to comment.