◆ FORGE Suite
GitHubMechanical Neuroimaging Lab · Univ. of Delaware
Skip to content

How to Choose and Configure Regularization

The MRE inverse problem is ill-posed, so a reconstruction needs regularization to be stable. This page helps you pick and configure it. For every regularizer's fields, constructor, and penalty functional, see Regularization in the API reference.

The three kinds

Sentinel's regularizers act at three different points in the iteration, and you will normally combine them:

Choosing a penalty

You wantUse
General smoothing, a sane defaultTikhonovReg
To preserve edges between regions of different stiffnessTotalVariationReg
To use known anatomical regions as prior informationSoftPriorReg
To keep properties inside a physical rangeExteriorConstraintReg
To penalize violation of the momentum equationForceBalanceReg

Tikhonov smooths across everything, including real boundaries. Total variation is the one to reach for when you expect genuine stiffness contrast and Tikhonov is blurring it away.

ForceBalanceReg has its own calibration guidance, including how relative and absolute weights differ — see its section in Regularization before enabling it.

The defaults

If you do not specify regularization, InversionProblem applies default_regularization(), which is:

julia
[SpatialFilter(), CGResidualScaling(), VanHouten(), McGarryBounds()]

a spatial filter, CG residual scaling, Van Houten clipping, and McGarry bounds. That combination is what the bundled examples and the test suite run, so it is the best-supported starting point.

Scheduling the weight

A strong penalty early keeps the first iterations stable; a weaker penalty later lets the data pull the reconstruction into detail. Ramp the weight with WeightSchedule rather than picking one compromise value:

julia
ws = WeightSchedule(start_weight = 1e-2, end_weight = 1e-4,
                    max_iter = 20, delay = 0)
tikhonov = TikhonovReg(1, ws, ws, material)

The weight interpolates linearly from start_weight to end_weight over max_iter iterations, after delay iterations at the starting value.

Not every regularizer takes a schedule

TikhonovReg and TotalVariationReg take WeightSchedule values for their real and imaginary weights. ExteriorConstraintReg takes a plain Float64 weight instead. Check the constructor in Regularization before passing a schedule.

CG residual scaling

CG residual scaling is configured alongside the regularizers but is not a penalty — it is a solver parameter carried by the solve configuration, and it materializes no regularization object. See cg_update_scale in Regularization.

Next