lightniing Projects Teams About
All projects

Denoising

Noise limits what can be measured in every voxel. Denoising separates signal from noise using structure the noise lacks: redundancy across many volumes, or the physics of how signal changes with echo time.

svht_denoiseME-ICAtedana

Diffusion denoising

Diffusion MRI acquires many volumes of the same anatomy. Within a small patch, the signal is described by a few principal components, while thermal noise spreads across all of them. Principal component analysis (PCA) denoising keeps the signal components and suppresses the rest. Small voxels and high b-values make raw images noisy, so these gains matter most for modern high-resolution acquisitions.

b=3000 s/mm² volume at 1.5 mm: input (left), MRtrix3 MPPCA (middle), svht_denoise (right)
b=3000 s/mm² volume at 1.5 mm: input (left), MRtrix3 MPPCA (middle), svht_denoise (right)

The popular Marchenko–Pastur PCA (MPPCA) method, implemented in MRtrix3 dwidenoise, relies on patented algorithms and is licensed for non-commercial research only. svht_denoise instead builds on earlier, unencumbered work: the singular value rules of Gavish and Donoho with overlapping patches (Manjón et al.), so no noise level has to be supplied. Its authors believe it falls outside those patents. It reduces the Rician noise floor of magnitude images, accepts phase data to avoid that floor entirely, and can also remove Gibbs ringing, matching MRtrix3 mrdegibbs about 1.5× faster.

Diffusion denoising140×140×92 × 297 volumes (speedup, higher is better) Diffusion denoising140×140×92 × 297 volumes (speedup, higher is better)MRtrix3 dwidenoise1xdwidenoise22.9xsvht_denoise7.3x
Illustrative Denoising benchmark figure

Benchmark source

Multi-echo ICA

Independent component analysis (ICA) splits fMRI data into components, but with a single echo each component must be judged by its spatial and temporal features alone. With three or more echoes, components can be classified by physics. Blood-oxygen-level-dependent (BOLD) signal changes T2*, so its amplitude scales with echo time (κ). Artifacts such as head motion change the initial signal intensity (S0), so their amplitude does not (ρ). Multi-echo ICA (ME-ICA) uses these scores to reject noise components objectively and automatically.

Multi-echo component classification Across three echoes, a BOLD component's percent signal change grows in proportion to echo time, while a non-BOLD component's is constant. Multi-echo ICA Echo-time dependence separates BOLD signal from artifact (echoes at 15, 35 and 55 ms) 01 BOLD component Signal change grows with echo time: high κ, accepted 0%1%2%0204060 echo time (ms) ΔS/S = −TE · ΔR2* 02 Non-BOLD component Signal change is flat across echoes: high ρ, rejected 0%1%2%0204060 echo time (ms) ΔS/S = ΔS0 / S0
Echo-time dependence separates BOLD signal from artifact

meica ports tedana to Rust as a native executable and as WebAssembly, so it runs in a browser without Python. Outputs match tedana's to floating-point rounding with identical classifications, using about half the memory.

Multi-echo ICA51×68×46 × 100 volumes, 3 echoes (speedup, higher is better) Multi-echo ICA51×68×46 × 100 volumes, 3 echoes (speedup, higher is better)tedana1xmeica (1 thread)1.41xtedana (no reports)1.49xmeica2.39x
Illustrative Denoising benchmark figure

Benchmark source

Links