MRI Reconstruction (actionable)

SkillFiles & storage

Actionable MRI image reconstruction, turn raw k-space into an image, and actually run it. Use this WHENEVER the user wants to reconstruct MR data or says things like "reconstruct this k-space", "run BART on this", "get an image from this .cfl / .h5 / twix file", or asks about parallel imaging (ESPIRiT/SENSE/GRAPPA), compressed sensing (PICS / L1-wavelet), coil sensitivity estimation, coil combination, or non-Cartesian / NUFFT reconstruction. This agent prefers to EXECUTE the reconstruction with BART or SigPy (not just describe it). It covers classical/analytic reconstruction, for anything TRAINED (unrolled networks, VarNet, self-supervised, diffusion priors, fastMRI models) hand off to the deep-learning-recon skill. Triggers: k-space, coil sensitivities, ESPIRiT, PICS, undersampled reconstruction, radial/spiral recon, `.cfl`/`.hdr`, ISMRMRD, Siemens twix, GE P-file.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the MRI Reconstruction (actionable) skill

What this skill tells your AI

The instructions your AI receives, as published by kewang0622/mri-research-skill in skills/mri-reconstruction/SKILL.md and read by ahel’s review.

You are a reconstruction engineer: given k-space, produce an image — and run the pipeline, don't just talk about it. Default to BART (battle-tested, CLI, scriptable); use SigPy when the user is in Python. Confirm the data before running, then execute and inspect.

Workflow

0. Identify the k-space format (ask or inspect). BART works in its own .cfl/.hdr, so other formats need a conversion step:

  • BART .cfl + .hdr — native; dims must be [X Y Z COILS ...] (coils on dim 3). Ready to use.
  • Siemens twix .dat — bart twixread -A meas.dat ksp writes a .cfl (-A auto-guesses the dimensions; without it you must supply them explicitly via -x/-y/-z/-c/-s/-n, and a flagless call will not work). Then confirm with bart show -m ksp. Alternative: read in Python with twixtools/pymapVBVD and write a .cfl.
  • NumPy array — write a .cfl with BART's Python helper: PYTHONPATH=$TOOLBOX_PATH/python python -c "import cfl; cfl.writecfl(name, arr)" (cfl.py ships in BART's python/ directory — it is not on PyPI, and the unrelated bartpy package on PyPI is a decision-tree library, not this). Make sure coils land on dim 3.
  • ISMRMRD .h5 — BART has an ismrmrd tool, but it is a build-time option: the Makefile defaults to ISMRMRD=0, so a stock build has no bart ismrmrd command. Check with bart ismrmrd -h; if it's missing, either rebuild BART with ISMRMRD=1 (needs the ISMRMRD C++ library) or read the file with the Python ismrmrd package and cfl.writecfl. Vendor raw → ISMRMRD first via siemens_to_ismrmrd / ge_to_ismrmrd / philips_to_ismrmrd.

1. Estimate coil sensitivities (ESPIRiT):

bart ecalib -m1 -r 24 kspace sens

-m1 matters: ecalib computes two ESPIRiT map sets by default, and pics then returns a soft-SENSE result with a size-2 MAPS dimension instead of a single image — a silent wrong answer. -r caps the auto-extracted calibration region (24³ is already the default; lower it if your ACS is smaller).

2. Reconstruct:

# Fully sampled: inverse FFT + coil combine
bart fft -iu 7 kspace img_coils && bart rss 8 img_coils img

# Undersampled — parallel imaging + compressed sensing (the workhorse):
bart pics -l1 -r 0.01 kspace sens img     # l1-wavelet regularized
  • Non-Cartesian (radial/spiral/cones/rosette): you also need the trajectory. Use bart pics -t traj kspace sens img. For calibration, grid with the inverse NUFFT (bart nufft -i), not the adjoint (-a) — the adjoint leaves the sampling density in the data and biases the ESPIRiT maps. Get the trajectory from the sequence/ISMRMRD, or bart traj for nominal.
  • EPI is Cartesian. Its zig-zag traversal still samples a Cartesian grid, so do not reach for a trajectory/NUFFT. EPI needs ramp-sampling regridding and Nyquist-ghost / phase correction first, then the Cartesian path above; geometric distortion is corrected downstream (topup/FUGUE).

3. Inspect: check image dimensions, scaling, and orientation; look for residual aliasing (raise -r), over-smoothing (lower -r), or coil-combination errors.

Runnable helper

scripts/bart_recon.sh <kspace_cfl> <output_cfl> [l1_reg] [traj_cfl] runs an ESPIRiT → PI+CS pipeline on a BART .cfl k-space file. It assumes Cartesian data with coils on dim 3 and a fully-sampled ACS (calibration region); pass a trajectory .cfl as the 4th argument for genuinely non-Cartesian sampling (radial/spiral/cones/rosette — not EPI, which is Cartesian). It warns about these assumptions but can't fully verify them — check the header and adapt the regularization / calibration size to the data.

SigPy (Python) alternative

import sigpy as sp, sigpy.mri as mr
maps = mr.app.EspiritCalib(ksp).run()                     # coil maps
img  = mr.app.L1WaveletRecon(ksp, maps, lamda=0.01).run() # PI + CS
# non-Cartesian: build a NUFFT from coords, use mr.app.SenseRecon

Guardrails

Signals

GitHub stars
20
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
mri-reconstruction
Source
github.com/kewang0622/mri-research-skill