Repository navigation
v0.3.0
Third release of the SlicerHeart 4D flow filters: noise-free images (synthetic phantoms) are handled, the velocity noise has one definition, and the hemodynamic quantities are computed 3 to 12 times faster.
Changed
- Automatic lumen segmentation grows closer to the vessel wall (
estimate_lumen). The lumen is grown into voxels whose RMS speed is abovegrowth_noise_factortimes that of the velocity noise. On 15 pediatric clinical cases, the velocity noise of the lumen estimate was 1.7 times (median, 1.1 to 2.6) that ofquality_report, because it was estimated in dark tissue too and with a biased estimator, so the lumen stopped short of the wall. On these cases the lumen volume grows by 21% (median, 5% to 30%). Lumens and plane flows computed with an earlier version differ; regenerate them. - One velocity noise definition for
quality_reportand the lumen estimate:noise_tissue_maskselects the tissue above the Otsu threshold of the magnitude (the noise scales with 1 / magnitude), andvelocity_noiseestimates the noise of each component (median of per-voxel variances, unbiased for Gaussian noise).velocity_noise_in_tissuereturns their RMS over the components, or each component withper_component=True. - The default
growth_noise_factoris 1.9 (was 2.0). It reproduces the flow error, coverage and leakage of the synthetic cases with known lumen.
Fixed
- Background correction failed on noise-free images ("only N static-tissue candidates"):
body_maskdropped voxels with constant velocity over time as zero filling or masked air, which on a noise-free phantom removed all static tissue. When many bright voxels have constant velocity, the body is now found by the Otsu threshold of the magnitude. Zero filling and masked air are dark, so measured data is not affected. - The lumen estimate failed on noise-free images ("no tissue selected by magnitude to estimate the velocity noise"). If no static tissue is left outside the lumen, the noise is estimated in all nonzero-magnitude voxels outside it (with a warning); a noise estimate of 0 gets a small speed floor, so rounding errors are not counted as flow.
Faster
On a clinical case (15 frames), with the same results:
| Step | v0.2.0 | v0.3.0 |
|---|---|---|
Lumen integrals (velocity_gradient on the lumen only) |
10.4 s | 3.6 s |
| Wall shear stress (one pseudo-inverse per sample pattern) | 4.8 s | 0.4 s |
| Pressure gradient | 35 s | 8 s |
| Relative pressure solve (frames in threads) | 25 s | 6.3 s |
Testing
- Noise-free phantoms with linear and quadratic background offsets (
tests/test_noise_free.py). - The clinical tests run case by case and keep one case in memory.