OpenKSpace
A Rust library and CLI for Cartesian MRI k-space reconstruction from
ISMRMRD .h5 files.
See CHANGELOG.md for version history.
Features
I/O
- ISMRMRD HDF5 reader with full
AcquisitionHeaderparsing - Automatic extraction of noise and calibration scans
- Auto-detection of 2D vs 3D encoding from the data
Calibration passes
- Noise pre-whitening via per-coil noise covariance + Cholesky (Kellman & McVeigh 2005)
- Navigator-echo phase correction (removes N/2 ghosting)
- Readout oversampling removal (image-domain crop after IFFT)
- Partial-Fourier along ky via homodyne reconstruction (Noll 1991; McGibney 1993)
Reconstruction strategies (pluggable via the ReconStrategy trait)
| Strategy | Description |
|---|---|
ifft-rss |
Centred IFFT + root-sum-of-squares coil combination |
grappa |
k-space GRAPPA with ACS-fit convolution kernel (Griswold 2002) |
sense |
Image-domain SENSE unfold, ridge-stabilised (Pruessmann 1999), with optional g-factor map output |
cs |
L1-wavelet compressed sensing via FISTA (Lustig 2007; Beck & Teboulle 2009) |
SENSE coil-sensitivity maps can be estimated with either
- Walsh (eigenvector method, Walsh 2000), or
- ESPIRiT (auto-calibrating, Uecker 2014).
All strategies work on both 2D multi-slice and 3D Cartesian data. For 3D acquisitions with ky-only undersampling, parallel-imaging reconstructions decouple along kz via a 1-D IFFT, reducing the problem to independent per-slice unfolds.
Output
- PNG image output with percentile contrast windowing (default)
- NIfTI-1 single-file volume (
.nii) for downstream analysis tools; select with--format niftior--format both - Optional g-factor PNG output for SENSE (linear window
[1, p99])
Usage
openkspace info <file.h5> # print header metadata
openkspace probe <file.h5> # scan acquisition index ranges
openkspace recon <file.h5> # reconstruct all slices -> recon_out/
[--out <dir>] # output directory (default: recon_out/)
[--slice <N>] # reconstruct one slice only
[--fft auto|2d|3d] # FFT mode (default: auto)
[--strategy ifft-rss|grappa|sense|cs] # reconstruction strategy
[--no-prewhiten] # skip noise pre-whitening
[--no-phasecorr] # skip navigator phase correction
[--no-oversampling-removal] # keep 2x kx samples
[--no-partial-fourier] # skip homodyne
[--no-crop] # keep full oversampled FOV
[--pct-low <f>] [--pct-high <f>] # contrast window percentiles
[--format png|nifti|both] # output format (default: png)
GRAPPA:
[--grappa-kernel-ky <k>] [--grappa-kernel-kx <k>]
[--grappa-ridge <lam>]
SENSE:
[--sense-maps walsh|espirit]
[--sense-walsh-window <w>] [--sense-walsh-iters <n>]
[--espirit-kernel <k>] [--espirit-threshold <f>] [--espirit-iters <n>]
[--sense-ridge <lam>]
[--sense-gfactor] # compute g-factor
[--write-gfactor] # also emit g-factor PNGs
CS:
[--cs-iters <n>] [--cs-lambda <f>]
Examples
# Plain IFFT + RSS
# GRAPPA
# SENSE with ESPIRiT maps and g-factor output
# Compressed sensing
Workspace layout
| Crate | Description |
|---|---|
openkspace-io |
ISMRMRD reader, acquisition structs, calibration scan extraction |
openkspace-recon |
Reconstruction math: FFT, coil combination, prewhitening, phase correction, GRAPPA, SENSE, ESPIRiT, Walsh, CS |
openkspace-cli |
openkspace command-line binary |
Building
Requires Rust 1.75+ and HDF5 system libraries.
The openkspace binary is produced at target/release/openkspace.
Validation
A Python harness in scripts/ compares the Rust reconstruction against a reference on a per-slice basis using SSIM. It supports both ISMRMRD and FastMRI files (format is auto-detected). See scripts/README.md for details.
On the NYU/Meta FastMRI multicoil knee corpus (652 files, slices 0-35
each), the IFFT+RSS+center-crop pipeline achieves SSIM = 1.0000
against the reconstruction_rss ground truth bundled in each file,
confirming bit-exact agreement between the Rust implementation and the
reference reconstruction.
Citation
If you use OpenKSpace in research, please cite the underlying algorithm paper for whichever reconstruction method you invoked (see CREDITS.md) and, optionally, this repository.
License
Apache-2.0. See LICENSE.