Skip to main content

qsm_core/inversion/
mod.rs

1//! Dipole inversion methods for QSM
2//!
3//! This module provides various methods to solve the inverse problem
4//! of estimating magnetic susceptibility from local field measurements.
5//!
6//! Methods include:
7//! - TKD: Truncated k-space division (fast, simple)
8//! - TSVD: Truncated SVD (zeros small values)
9//! - Tikhonov: L2 regularization (closed-form)
10//! - TV: Total variation regularization via ADMM (iterative)
11//! - NLTV: Nonlinear-data-term TV via ADMM (QSM.jl nltv)
12//! - RTS: Rapid two-step method
13//! - MEDI: Morphology-enabled dipole inversion (plain, with SMV, or MEDI-mSMV)
14//! - TGV: Total Generalized Variation (single-step from a field in ppm or one wrapped echo; α in ppm)
15//! - COSMOS: multi-orientation least squares (closed form, well-posed)
16//! - STI: susceptibility tensor imaging (multi-orientation, 6-component tensor)
17//! - STAR-QSM: streaking artifact reduction (STI Suite 3.0's `QSM_star`)
18
19pub mod admm;
20pub mod cosmos;
21pub mod sti;
22pub mod tkd;
23pub mod tikhonov;
24pub mod tv;
25pub mod nltv;
26pub mod rts;
27pub mod medi;
28pub mod msmv;
29pub mod tfi;
30pub mod tgv;
31pub mod ilsqr;
32pub mod star;
33pub mod lsqr_qsm;
34pub mod heidi;
35pub mod ndi;
36pub mod fansi;
37pub mod l1qsm;
38pub mod whqsm;
39pub mod hdqsm;
40pub mod amp_pe;
41pub mod tile_budget;
42#[cfg(feature = "onnx")]
43pub mod tiled;
44#[cfg(feature = "onnx")]
45pub mod xqsm;
46#[cfg(feature = "onnx")]
47pub mod qsmnet;
48pub mod qsmnetme;
49#[cfg(feature = "onnx")]
50pub mod autoqsm;
51pub mod iqsm_echo_weighting;
52pub use iqsm_echo_weighting::IqsmEchoWeighting;
53#[cfg(feature = "onnx")]
54pub mod iqsm;
55#[cfg(feature = "onnx")]
56pub mod iqsm_plus;
57#[cfg(feature = "onnx")]
58pub mod iqfm;
59#[cfg(feature = "onnx")]
60pub mod qsmgan;
61#[cfg(feature = "onnx")]
62pub mod lpcnn;
63#[cfg(feature = "onnx")]
64pub mod ir2qsm;
65#[cfg(feature = "onnx")]
66pub mod modl_qsm;
67#[cfg(feature = "onnx")]
68pub mod nextqsm;
69
70pub use cosmos::{cosmos, cosmos_weighted, uncovered_cone, CosmosParams, CONE_THRESHOLD, MAX_UNCOVERED_CONE};
71pub use sti::{sti, sti_forward, tensor_maps, StiParams, SusceptibilityTensor, TensorMaps, N_TENSOR};
72pub use tkd::{tkd, tsvd, TkdParams};
73pub use tikhonov::{tikhonov, TikhonovParams, Regularization};
74pub use tv::{tv_admm, TvParams};
75pub use nltv::{nltv, NltvParams};
76pub use rts::{rts, RtsParams};
77pub use medi::{extract_csf, medi, EchoMagnitudes, MediParams};
78pub use msmv::{msmv, MsmvOutput, MsmvParams};
79pub use tfi::{tfi, TfiKernel, TfiParams, TfiPrecision};
80pub use tgv::{
81    tgv_qsm, TgvInput, TgvParams, get_default_alpha, get_default_iterations, rad_per_ppm,
82};
83pub use ilsqr::{ilsqr, IlsqrParams, IlsqrPrecision, STI_DEFAULT_NITER, STI_DEFAULT_PAD_MM, STI_GUI_NITER, STI_GUI_PAD_MM, STI_PAD_MM};
84#[cfg(not(target_arch = "wasm32"))]
85#[doc(hidden)]
86pub use ilsqr::{ilsqr_traced, IlsqrTrace};
87pub use star::{star_qsm, StarParams, STAR_GUI_PAD, QSM_STAR_DEFAULT_PAD, STI_TEMPLATES_STAR_PAD};
88pub use lsqr_qsm::{lsqr_qsm, LsqrQsmParams, RESIDUAL_WEIGHTING_PER_TESLA};
89pub use heidi::{cone_fill_iterations, heidi, heidi_cone_fill, homogeneity_masks, HeidiParams, HomogeneityMasks};
90pub use admm::FansiKernel;
91pub use ndi::{ndi, NdiParams};
92pub use fansi::{fansi, FansiParams};
93pub use l1qsm::{l1qsm, L1QsmParams};
94pub use whqsm::{whqsm, WhQsmParams, WhQsmWeight};
95pub use hdqsm::{hdqsm, hdqsm_magnitude, HdQsmParams};
96pub use amp_pe::{amp_pe, AmpPeParams};
97pub use tile_budget::{
98    max_wasm_patch_edge, tile_bytes, tile_patch_size, tiles_within_wasm_budget, wasm_tiles_in_flight,
99    TileConfig, WASM_MAX_PATCH_ACTIVATION_BYTES, WASM_TILE_ACTIVATION_BUDGET,
100};
101#[cfg(feature = "onnx")]
102pub use tiled::{
103    check_wasm_patch_fits, tile_concurrency, tiled_field_inversion, tiled_scatter,
104    tiled_volume_algorithm, Tile,
105};
106#[cfg(feature = "onnx")]
107pub use xqsm::{xqsm, xqsm_tiled};
108#[cfg(feature = "onnx")]
109pub use qsmnet::{qsmnet, qsmnet_tiled, QsmnetNorm};
110pub use qsmnetme::{QsmnetmeNorm, QsmnetmeParams};
111#[cfg(feature = "onnx")]
112pub use qsmnetme::qsmnetme;
113#[cfg(feature = "onnx")]
114pub use autoqsm::autoqsm;
115#[cfg(feature = "onnx")]
116pub use iqsm::{iqsm, iqsm_multi_echo};
117#[cfg(feature = "onnx")]
118pub use iqsm_plus::{iqsm_plus, iqsm_plus_multi_echo};
119#[cfg(feature = "onnx")]
120pub use iqfm::{iqfm, iqfm_multi_echo};
121#[cfg(feature = "onnx")]
122pub use qsmgan::qsmgan;
123#[cfg(feature = "onnx")]
124pub use lpcnn::{lpcnn, lpcnn_tiled, LPCNN_ALPHA, LPCNN_GT_MEAN, LPCNN_GT_STD};
125#[cfg(feature = "onnx")]
126pub use ir2qsm::{ir2qsm, ir2qsm_tiled};
127#[cfg(feature = "onnx")]
128pub use modl_qsm::{modl_qsm, modl_qsm_tiled, MODL_ALPHA, MODL_MEAN, MODL_STD};
129#[cfg(feature = "onnx")]
130pub use nextqsm::{nextqsm, nextqsm_padded, nextqsm_tiled, NEXTQSM_LAMBDAS};