diff --git a/datasets/colorado-boulder/README.md b/datasets/colorado-boulder/README.md
index 60e1bee..42b5aeb 100644
--- a/datasets/colorado-boulder/README.md
+++ b/datasets/colorado-boulder/README.md
@@ -1,5 +1,6 @@
---
-pretty_name: "OpenH-RF — Tracked Swept Synthetic Aperture 3D Phantom Dataset"
+name: colorado-boulder
+pretty_name: "Tracked Swept Synthetic Aperture Ultrasound Datasets"
license: cc-by-4.0
task_categories:
- generalized-reconstruction
@@ -14,63 +15,89 @@ size_categories:
- n<1K
---
-# Tracked Swept Synthetic Aperture 3D Phantom Ultrasound Dataset
+# Tracked Swept Synthetic Aperture Ultrasound Datasets
-## Dataset Description
+| 2D ATS 539 phantom | 3D phantom | In-vivo quadriceps |
+|:---:|:---:|:---:|
+|  |  |  |
+| [`Sub-dataset-1`](https://huggingface.co/datasets/nvidia/OpenH-RF/tree/main/colorado-boulder/Sub-dataset-1) | [`Sub-dataset-2`](https://huggingface.co/datasets/nvidia/OpenH-RF/tree/main/colorado-boulder/Sub-dataset-2) | [`Sub-dataset-3`](https://huggingface.co/datasets/nvidia/OpenH-RF/tree/main/colorado-boulder/Sub-dataset-3) |
-This dataset contains tracked swept synthetic aperture (SSA) ultrasound acquisitions of a 3D ultrasound imaging phantom. The data were acquired using a Verasonics Vantage research ultrasound system with a P4-2 phased array transducer.
+*Motion-compensated tracked SSA reconstructions, one per sub-dataset. Each frame beamforms the raw RF channel data with its own tracked probe pose; a 40 mm window of frames is then coherently summed to synthesise a larger effective aperture, and the window slides along the freehand sweep.*
-The dataset includes raw RF channel data, acquisition parameters, probe geometry, transmit information, and frame-wise tracked probe pose metadata. Its purpose is to provide a reproducible example of motion-compensated SSA reconstruction from raw channel data using the zea/OpenH-RF data format.
+## Dataset Description
-This dataset contains phantom data only. It does not contain human subject data, animal data, or protected health information (PHI).
+This dataset contains tracked swept synthetic aperture (SSA) ultrasound acquisitions from three targets: a 2D ATS 539 multipurpose imaging phantom, a 3D ultrasound imaging phantom, and in-vivo quadriceps muscle from healthy volunteer participants.
-## Dataset Contributor(s)
+The data were acquired using a Verasonics Vantage research ultrasound system with a P4-2 phased array transducer. The dataset includes raw RF channel data, acquisition parameters, probe geometry, transmit information, and frame-wise tracked probe pose metadata.
-**Contributing organization:** University of Colorado Boulder, Bottenus Lab
+The purpose of this dataset is to provide reproducible examples for generalized ultrasound reconstruction, with a particular focus on motion-compensated tracked SSA reconstruction using the zea/OpenH-RF data format.
-**Contributors:**
+The phantom acquisitions do not contain human subject data, animal data, or protected health information (PHI). The in-vivo acquisitions were collected from healthy volunteer participants and de-identified prior to release.
-- Anet Sanchez
-- Nick Bottenus
+## Dataset Contributor(s)
+
+- Anet Sanchez (University of Colorado Boulder, Bottenus Lab)
+- Nick Bottenus (University of Colorado Boulder, Bottenus Lab)
## Dataset Creation Date
-06/24/2025
+Data were collected between 08/23/2024 and 06/30/2026.
## License / Terms of Use
-This dataset is released under the Creative Commons Attribution 4.0 International License (CC BY 4.0).
-
-The contributed data consist exclusively of phantom ultrasound acquisitions and are cleared for release under CC BY 4.0. Patient consent, clinical data-use agreements, and PHI de-identification are not applicable because the dataset does not contain human subject data.
+[Creative Commons Attribution 4.0 International (CC BY 4.0)](https://creativecommons.org/licenses/by/4.0/legalcode.en). Retain attribution and identify modifications when reusing the data.
## Intended Usage
-This dataset is intended for research on generalized ultrasound reconstruction, with a particular focus on tracked swept synthetic aperture imaging, motion-compensated beamforming, coherent compounding, and ultrasound image-quality evaluation.
+This dataset is intended for research on generalized ultrasound reconstruction, with a specific focus on tracked swept synthetic aperture imaging, motion-compensated beamforming, coherent compounding, and ultrasound image-quality evaluation.
-For SSA reconstruction, each raw RF frame is beamformed using its corresponding tracked transducer pose. The resulting beamformed IQ frames are placed on a common reconstruction grid and coherently summed to synthesize a larger effective aperture. Because the reconstruction relies on coherent compounding, summation is performed before envelope detection, normalization, and log compression.
+For SSA reconstruction, each raw RF frame is beamformed using its corresponding tracked transducer pose. The resulting beamformed frames are placed on a common reconstruction grid and coherently summed to synthesize a larger effective aperture. Because the reconstruction relies on coherent compounding, summation is performed before envelope detection, normalization, and log compression.
## Dataset Characterization
-- **Data Collection Method:** Phantom ultrasound acquisition
-- **Labeling Method:** N/A; no manual labels or segmentation masks are provided
-- **Acquisition System:** Verasonics Vantage research ultrasound scanner with a Verasonics P4-2 phased array transducer
+The dataset includes acquisitions from three targets:
+
+- 2D ATS 539 multipurpose imaging phantom
+- 3D ultrasound imaging phantom
+- In-vivo quadriceps muscle from healthy volunteer participants
+
+The ATS 539 multipurpose imaging phantom contains:
+
+- Wire targets
+- Cylindrical lesions
+- Tissue-mimicking speckle regions
+
+These targets may be used to assess spatial resolution, contrast, lesion visibility, and speckle characteristics.
+
+### Data Collection Method
+
+Each acquisition consisted of a freehand sweep in the lateral direciton of the transducer. All 64 array elements were used during receive. Diverging waves were generated using a negative virtual source while activating the 20 central array elements during transmit. For in-vivo targets the transducer was manually swept along the longitudinal direction of the quadriceps while transmitting diverging waves at 400 Hz. The transducer was optically tracked using an NDI Polaris Vega® XT optical tracking system manufactured by Northern Digital Inc., Ontario, Canada.
+
+### Labeling Method
-### Acquisition Details
+None (N/A).
-The transducer was manually swept over the phantom field of view while diverging-wave transmissions were acquired at 400 Hz. All 64 array elements were used on receive.
+### Acquisition System
-Diverging waves were generated using a negative virtual source with the 20 central array elements active on transmit.
+- Verasonics Vantage research ultrasound scanner
+- Verasonics P4-2 phased array transducer
+- 64 elements
+- Reconstruction center frequency: 2.5 MHz
+- Sampling frequency: 10 MHz
+- Optical tracking: NDI Polaris Vega XT
-The transducer was optically tracked using an NDI Polaris Vega® XT optical tracking system manufactured by Northern Digital Inc., Ontario, Canada.
+## Processing the Dataset
-### Probe and Geometry
+The acquisitions can be processed with the `reconstruct.py` [script](https://github.com/open-h/OpenH-RF/blob/main/datasets/colorado-boulder/reconstruct.py) as provided in the [OpenH-RF GitHub repository](https://github.com/open-h/OpenH-RF), together with the `pipeline.yaml` definition in this folder and the [zea library](https://github.com/tue-bmd/zea). The script streams the data from the Hugging Face Hub.
-The acquisition used a Verasonics P4-2 phased array transducer with 64 elements. The center frequency stored in the acquisition and used for reconstruction is 2.5 MHz.
+The script selects tracked frames at roughly 1 mm lateral spacing and writes the reconstruction to `ssa_bmode.png`. Point `ZEA_FILE` at any acquisition in the corpus to reconstruct it. [`assets/main_bmode.png`](./assets/main_bmode.png) was produced this way, compounding the full sweep into one image; the loops at the top of this card slide a shorter aperture window along the sweep instead.
-The probe geometry, transmit origins, transmit delays, transmit apodization, and other acquisition parameters are stored in the zea/OpenH-RF file. Frame-wise probe translations and rotations are stored using the native `metadata/probe_pose` structure.
+`reconstruct.py` defines the custom `apply_probe_pose` operation that `pipeline.yaml` refers to, which applies the frame-wise `metadata/probe_pose` to the probe geometry and transmit origins before beamforming.
## Dataset Format
+[zea v0.1.7](https://github.com/tue-bmd/zea)
+
The dataset is distributed in the zea/OpenH-RF HDF5 format.
Each file includes:
@@ -84,20 +111,19 @@ Each file includes:
- Frame-wise tracked probe translations
- Frame-wise tracked probe rotations
-The stored RF channel data have not been beamformed, envelope detected, normalized, or log compressed. The accompanying reconstruction pipeline performs these processing steps.
+The stored RF channel data have not been beamformed, demodulated, envelope detected, normalized, or log compressed. These processing steps are performed by the accompanying reconstruction pipeline.
## Dataset Quantification
-**Current OpenH-RF release:** 62 HDF5 files; 16.04 GB (16,037,117,952 bytes) stored; root `zea_version` **0.1.6**. Sizes include all HDF5 contents and use decimal units (MB = 10^6 bytes, GB = 10^9 bytes, TB = 10^12 bytes), not decoded-array memory or original-source download sizes.
-
-- **Number of phantom objects:** 1
-- **Number of acquisitions:** 10
-- **Number of RF frames per acquisition:** 1200
-- **Number of transmit events per frame:** 1
-- **Number of receive elements:** 64
-- **Number of active transmit elements:** 20
+- Number of phantom objects: 2
+- Number of volunteer participants: 7
+- Number of acquisitions: 62
+- Number of RF frames per acquisition: 1200–1600
+- Number of transmit events per frame: 1
+- Number of receive elements: 64
+- Number of active transmit elements: 20
-### Per-File Feature Summary
+### Per-acquisition contents
| Feature | Shape | Data type | Units | Description |
|---|---:|---|---|---|
@@ -111,64 +137,40 @@ The stored RF channel data have not been beamformed, envelope detected, normaliz
## Subject Metadata
-### Metadata Schema Migration
-
-The zea 0.1.6 migration uses these approved metadata locations:
-
-| Legacy location | Canonical location |
-|---|---|
-| Dataset `metadata/subject_id` | Dataset `metadata/subject/id` |
-| Dataset `metadata/subject_type` | Dataset `metadata/subject/type` |
-| Dataset `metadata/us_machine` | Root HDF5 attribute `us_machine` |
-
-Read the machine name with `f.attrs["us_machine"]`, not `f["us_machine"]`.
-Subject values and their existing attributes are preserved. The machine
-string is preserved; migration stops for review if its legacy dataset has
-attributes that cannot be represented without loss. No numerical arrays are
-rescaled or otherwise changed by these relocations.
-
-The three-field pilot passed full array and metadata parity checks with the
-approved description changes and `transmit_only=False` default. Full-release
-migration is still pending. Replacement files are uploaded only after
-per-file validation; readers supporting both revisions should check the
-canonical locations first, then the legacy locations.
+This dataset contains acquisitions from two ultrasound imaging phantoms and healthy volunteer participants.
-
-This dataset contains one 3D ultrasound imaging phantom.
-
-- **Subject type:** 3D phantom
-- **Anatomical region:** Not applicable
-- **Human participants:** None
-- **Animal subjects:** None
-- **Protected health information:** None
-- **Scanner:** Verasonics Vantage
-- **Probe:** Verasonics P4-2 phased array
+- Subject types: 2D imaging phantom, 3D phantom, and in-vivo human ultrasound data
+- 2D phantom model: ATS 539
+- 2D phantom target types: wires, cylindrical lesions, and tissue-mimicking speckle
+- In-vivo anatomical region: quadriceps muscle
+- Human participants: healthy volunteer participants for the in-vivo dataset
+- Animal subjects: None
+- Protected health information: None
+- Scanner: Verasonics Vantage
+- Probe: Verasonics P4-2 phased array
## Data Validation
-The submission includes a `zea.Pipeline` that reconstructs a representative tracked SSA B-mode image from the raw RF channel data.
+The submission includes a `zea.Pipeline` that reconstructs representative tracked SSA B-mode images from the raw RF channel data.
The pipeline performs:
1. Frame-wise demodulation
2. Application of the tracked probe pose
3. Delay-and-sum beamforming onto a common reconstruction grid
-4. Coherent summation of the beamformed IQ frames
+4. Coherent SSA compounding
5. Envelope detection
6. Normalization
7. Log compression
-The reconstruction is defined in `pipeline.yaml` and executed using `reconstruct.py`. A representative reconstructed B-mode image is included with the dataset.
-
## Known Issues
- Optical tracking measurements may contain small position and orientation uncertainties.
- Reconstruction quality depends on tracking calibration accuracy and coherent alignment between frames.
-
+- The in-vivo dataset is intended for research use and has not been optimized for clinical workflows.
## Ethical Considerations
-This dataset contains phantom ultrasound data only. It does not contain human participants, animal subjects, personal identifiers, clinical records, or protected health information.
-
-Human-subject consent and institutional review board approval are therefore not applicable.
-
+- **Phantom data:** phantom ultrasound acquisitions only — no human participants, animal subjects, personal identifiers or clinical records; consent and IRB approval are not applicable.
+- **In-vivo data:** acquired from healthy volunteer participants with informed consent under IRB-approved protocol #24-0176, and de-identified prior to release.
+- No protected health information (PHI) or participant-identifying metadata is included in the released files.
diff --git a/datasets/colorado-boulder/assets/main_bmode.png b/datasets/colorado-boulder/assets/main_bmode.png
new file mode 100644
index 0000000..58c52eb
Binary files /dev/null and b/datasets/colorado-boulder/assets/main_bmode.png differ
diff --git a/datasets/colorado-boulder/assets/ssa-sweep-invivo.gif b/datasets/colorado-boulder/assets/ssa-sweep-invivo.gif
new file mode 100644
index 0000000..4163acb
Binary files /dev/null and b/datasets/colorado-boulder/assets/ssa-sweep-invivo.gif differ
diff --git a/datasets/colorado-boulder/assets/ssa-sweep-phantom2d.gif b/datasets/colorado-boulder/assets/ssa-sweep-phantom2d.gif
new file mode 100644
index 0000000..1f0cb16
Binary files /dev/null and b/datasets/colorado-boulder/assets/ssa-sweep-phantom2d.gif differ
diff --git a/datasets/colorado-boulder/assets/ssa-sweep-phantom3d.gif b/datasets/colorado-boulder/assets/ssa-sweep-phantom3d.gif
new file mode 100644
index 0000000..ab26f61
Binary files /dev/null and b/datasets/colorado-boulder/assets/ssa-sweep-phantom3d.gif differ
diff --git a/datasets/colorado-boulder/reconstruct.py b/datasets/colorado-boulder/reconstruct.py
index e7a4def..f2e693e 100644
--- a/datasets/colorado-boulder/reconstruct.py
+++ b/datasets/colorado-boulder/reconstruct.py
@@ -51,35 +51,30 @@
# --- Inputs -----------------------------------------------------------------
# Defaults stream straight from the published corpus. Swap any of these for a
# local path to run against your own copy.
-DATA_FILE = "hf://nvidia/OpenH-RF/colorado-boulder/Sub-dataset-1/sub-phantom2d_01_tracked-ssa.hdf5"
-PIPELINE_FILE = HERE / "pipeline.yaml"
-OUTPUT_PNG = HERE / "ssa_bmode.png"
-
-
-# ============================================================
-# Custom operation: ApplyProbePose
-# ============================================================
-# Rotates/translates the probe geometry and transmit origin by the tracked
-# probe pose of the current frame. Placed before Beamform in the pipeline.
-# The per-frame pose (probe_translation, probe_rotation) is supplied by the
-# enclosing Map, which slices them frame-by-frame alongside the data.
-# These ops are defined here, not in zea: a pipeline.yaml naming them resolves
-# only once this module is imported. See https://github.com/open-h/OpenH-RF
+ZEA_FILE = "hf://nvidia/OpenH-RF/colorado-boulder/Sub-dataset-1/sub-phantom2d_01_tracked-ssa.hdf5"
+CONFIG = HERE / "pipeline.yaml" # written by build_pipeline() below; this is what the run loads
+OUT = HERE / "ssa_bmode.png"
+HF_CONFIG = "hf://nvidia/OpenH-RF/colorado-boulder/pipeline.yaml" # where CONFIG is published
+FRAME_SPACING = 1e-3 # select tracked frames every 1 mm along the sweep
+
+
@ops_registry("apply_probe_pose")
class ApplyProbePose(Operation):
- """Apply the tracked probe pose of one frame before beamforming."""
+ """Apply the tracked probe pose of one frame before beamforming.
+
+ Rotates and translates the probe geometry and transmit origins by the pose
+ of the current frame, so that every frame shares one coordinate system. The
+ per-frame pose is sliced off ``probe_translation`` / ``probe_rotation`` by
+ the enclosing :class:`Map`.
+
+ This operation lives here rather than in zea, so a ``pipeline.yaml`` naming
+ ``apply_probe_pose`` only resolves once this module has been imported.
+ """
def __init__(self, **kwargs):
super().__init__(additional_output_keys=["probe_geometry", "transmit_origins"], **kwargs)
- def call(
- self,
- probe_translation,
- probe_rotation,
- probe_geometry,
- transmit_origins,
- **kwargs,
- ):
+ def call(self, probe_translation, probe_rotation, probe_geometry, transmit_origins, **kwargs):
t = ops.reshape(ops.cast(probe_translation, "float32"), (3,))
q = ops.reshape(ops.cast(probe_rotation, "float32"), (4,))
q = q / (ops.sqrt(ops.sum(q * q)) + 1e-12)
@@ -125,103 +120,81 @@ def call(
}
-# ============================================================
-# One single pipeline
-# ============================================================
-# Map runs the frame-wise part (pose + beamforming) once per tracked frame,
-# slicing data / probe_translation / probe_rotation along the frame axis.
-# The stacked beamformed IQ frames are then coherently summed (Sum) before
-# envelope detection, as required for SSA.
-def create_and_save_pipeline():
- pipeline = Pipeline(
+def build_pipeline() -> Pipeline:
+ """Define the tracked swept synthetic aperture beamforming pipeline in code.
+
+ ``Map`` beamforms one tracked frame at a time, each with its own pose. The
+ stacked frames are coherently summed before envelope detection, which is
+ what makes this a synthetic aperture rather than incoherent compounding.
+ """
+ return Pipeline(
operations=[
Map(
operations=[
- Squeeze(axis=0), # (1, n_tx=1, n_ax, n_el, n_ch) -> (n_tx=1, n_ax, n_el, n_ch)
+ Squeeze(axis=0),
Cast(dtype="float32"),
Demodulate(),
ApplyProbePose(),
Beamform(beamformer="delay_and_sum", enable_pfield=False),
- ExpandDims(axis=0), # restore the frame axis so Map can stack frames
+ ExpandDims(axis=0), # restore the frame axis so Map can stack
],
argnames=["data", "probe_translation", "probe_rotation"],
- batch_size=1, # one tracked frame at a time (each frame has its own pose)
+ batch_size=1,
),
- Sum(axis=0), # coherent compounding of the beamformed IQ frames
+ Sum(axis=0),
EnvelopeDetect(),
Normalize(),
LogCompress(),
],
with_batch_dim=False,
)
- pipeline.to_yaml(str(PIPELINE_FILE))
-# ============================================================
-# Main reconstruction
-# ============================================================
+def select_sweep_frames(x_positions, spacing):
+ """Indices of the frames closest to a uniform ``spacing`` along the sweep."""
+ step = spacing * np.sign(x_positions[-1] - x_positions[0])
+ targets = np.arange(x_positions[0], x_positions[-1] + 0.5 * step, step, dtype=np.float32)
+ return np.array([np.argmin(np.abs(x_positions - target)) for target in targets])
+
+
def main():
- zea.init_device(device="cpu", verbose=False)
+ zea.init_device(verbose=False)
- create_and_save_pipeline()
- pipeline = Pipeline.from_path(str(PIPELINE_FILE))
+ # Define the pipeline in code, save it to pipeline.yaml, then load it back.
+ build_pipeline().to_yaml(str(CONFIG))
+ pipeline = Pipeline.from_path(str(CONFIG))
- # ------------------------------------------------------------
- # Load zea parameters and raw data
- # ------------------------------------------------------------
- with zea.File(str(DATA_FILE), mode="r") as file:
- parameters = file.load_parameters(
+ # Load acquisition parameters, raw RF data and the tracked probe pose
+ with zea.File(ZEA_FILE) as f:
+ parameters = f.load_parameters(
xlims=(-0.05, 0.05),
zlims=(0.01, 0.13),
ylims=(0.0, 0.0),
f_number=0.75,
dynamic_range=(-50, 0),
)
- raw_data = np.array(file.data.raw_data).astype(np.float32)
- probe_pose = file.metadata.probe_pose
- probe_translation = np.array(probe_pose.translation).astype(np.float32)
- probe_rotation = np.array(probe_pose.rotation).astype(np.float32)
-
- # ------------------------------------------------------------
- # Select frames based on approximately uniform x-spacing
- # ------------------------------------------------------------
- desired_dx_m = 1e-3 # 1 mm spacing along x
- x_motion = probe_translation[:, 0] # x position for each frame, in meters
- direction = np.sign(x_motion[-1] - x_motion[0])
- dx = desired_dx_m * direction
- desired_x_positions = np.arange(x_motion[0], x_motion[-1] + 0.5 * dx, dx, dtype=np.float32)
- frame_indices = np.array(
- [np.argmin(np.abs(x_motion - x_target)) for x_target in desired_x_positions]
- )
-
- # Center the selected sweep around the reconstruction grid
- probe_translation = probe_translation - np.mean(probe_translation[frame_indices], axis=0)
-
- # ------------------------------------------------------------
- # Run the pipeline
- # ------------------------------------------------------------
- inputs = pipeline.prepare_parameters(parameters)
- output = pipeline(
- data=raw_data[frame_indices],
- probe_translation=probe_translation[frame_indices],
- probe_rotation=probe_rotation[frame_indices],
- **inputs,
- )
- bmode = np.squeeze(ops.convert_to_numpy(output["data"]))
-
- # ------------------------------------------------------------
- # Save B-mode image
- # ------------------------------------------------------------
- flatgrid_np = ops.convert_to_numpy(inputs["flatgrid"])
- x_plot = flatgrid_np[:, 0] * 1e3
- z_plot = flatgrid_np[:, 2] * 1e3
-
+ raw_data = f.data.raw_data[:]
+ probe_translation = f.metadata.probe_pose.translation[:]
+ probe_rotation = f.metadata.probe_pose.rotation[:]
+
+ # Thin the sweep to a uniform spacing and centre it on the reconstruction grid
+ frames = select_sweep_frames(probe_translation[:, 0], FRAME_SPACING)
+ probe_translation = probe_translation - np.mean(probe_translation[frames], axis=0)
+
+ bmode = pipeline(
+ data=raw_data[frames],
+ probe_translation=probe_translation[frames],
+ probe_rotation=probe_rotation[frames],
+ **pipeline.prepare_parameters(parameters),
+ )["data"]
+
+ # Save PNG
zea.visualize.set_mpl_style()
plt.figure(figsize=(6, 7))
plt.imshow(
- bmode,
+ np.squeeze(ops.convert_to_numpy(bmode)),
cmap="gray",
- extent=[np.min(x_plot), np.max(x_plot), np.max(z_plot), np.min(z_plot)],
+ extent=parameters.extent_imshow * 1e3,
aspect="auto",
)
plt.xlabel("x [mm]")
@@ -230,9 +203,9 @@ def main():
cax = make_axes_locatable(plt.gca()).append_axes("right", size="5%", pad=0.05)
plt.gcf().colorbar(plt.gci(), cax=cax, label="dB")
plt.tight_layout()
- plt.savefig(str(OUTPUT_PNG), dpi=200, bbox_inches="tight")
+ plt.savefig(str(OUT), dpi=200, bbox_inches="tight")
plt.close()
- print(f"\nSaved reconstruction to: {OUTPUT_PNG}")
+ print(f"Saved to {OUT}")
if __name__ == "__main__":
diff --git a/datasets/concordia/README.md b/datasets/concordia/README.md
index 9ce90d4..e53b6e2 100644
--- a/datasets/concordia/README.md
+++ b/datasets/concordia/README.md
@@ -1,5 +1,6 @@
---
-pretty_name: "OpenH-RF — SynthUS-FSA"
+name: concordia
+pretty_name: "SynthUS-FSA"
license: cc-by-4.0
task_categories:
- image-to-image
@@ -16,36 +17,24 @@ size_categories:
- 1K M. Sharifzadeh, S. Goudarzi, A. Tang, H. Benali, and H. Rivaz, "Mitigating
-> aberration-induced noise: A deep learning-based aberration-to-aberration approach,"
-> *IEEE Transactions on Medical Imaging*, vol. 43, no. 12, pp. 4380–4392, 2024.
+SynthUS-FSA is a fully synthetic corpus of pre-beamformed full-synthetic-aperture (FSA) ultrasound channel-data captures, generated with the Field II simulator to model a 128-element L11-5v linear array. Each capture fires one transmit event per element (128 transmits, receive on all 128 elements), so every element-to-element combination is retained and any receive/transmit beamforming scheme (focused B-mode, multi-angle plane-wave compounding, diverging-wave, adaptive/compressive schemes) can be retrospectively synthesized from the same channel data. The dataset is packaged in [zea](https://zea.readthedocs.io) format — the OpenH-RF reference Python library for ultrasound file I/O and beamforming — which every `.hdf5` file and `reconstruct.py` depend on. The dataset targets three OpenH-RF task categories: (1) generalized reconstruction (FSA channel data paired with a synthesized full synthetic-aperture B-mode as ground truth), (2) compressed sensing / adaptive transmit (retrospective sub-selection of the 128 transmit events — derived from the same captures, no additional files), and (3) segmentation (binary echogenicity masks on a subset of phantoms). All data is simulated — no clinical, phantom-hardware, or animal acquisition is involved.
+
+A similar data-generation approach was used in Sharifzadeh et al. (2024). Users of this dataset are kindly requested to cite that work:
+
+> M. Sharifzadeh, S. Goudarzi, A. Tang, H. Benali, and H. Rivaz, "Mitigating aberration-induced noise: A deep learning-based aberration-to-aberration approach," *IEEE Transactions on Medical Imaging*, vol. 43, no. 12, pp. 4380–4392, 2024.
## Dataset Contributor(s)
-Mostafa Sharifzadeh (mostafa.sharifzadeh@mail.concordia.ca) and Hassan Rivaz
-(hassan.rivaz@concordia.ca), IMPACT Lab, Concordia University.
+- Mostafa Sharifzadeh (IMPACT Lab, Concordia University)
+- Hassan Rivaz (IMPACT Lab, Concordia University)
## Dataset Creation Date
@@ -53,127 +42,68 @@ Mostafa Sharifzadeh (mostafa.sharifzadeh@mail.concordia.ca) and Hassan Rivaz
## License / Terms of Use
-CC BY 4.0.
-
-- **Simulated channel data, phantom parameters, and reconstruction/segmentation
- labels** are generated by the contributors (Field II simulation outputs) and
- released under CC BY 4.0.
-- **Segmentation mask shapes** (anechoic/hypoechoic/hyperechoic classes, 750
- captures) are sourced from [Open Images V7](https://storage.googleapis.com/openimages/web/factsfigures_v7.html)'s
- animal-class segmentation annotations (Google LLC). Only the binary mask is used — never the underlying source photograph. Open Images V7
- licenses its annotations, including segmentation masks, under CC BY 4.0; the
- source photographs themselves carry a separate CC BY 2.0 license but are not
- used anywhere in this dataset.
-- **Diverse-echogenicity amplitude-weight maps** (1,000 captures) are photographs
- from Wikimedia Commons, restricted to the `CC-BY-4.0` category and verified
- per-image against each file's `CC BY 4.0` license field before acceptance.
- `wikimedia_commons_metadata.csv`, at the dataset root, credits each one: a row
- per capture, keyed by `DatasetFile` for `image_0751.hdf5` through
- `image_1750.hdf5`, giving the source URL, Commons file page, author, title and
- license. No photograph appears in the dataset in its original form. Each was
- converted to grayscale, resampled to the 400 × 450 weight-map grid,
- histogram-equalized and rescaled to `[0, 1]`. Values above 0.9 were then set to
- 1 and values below 0.1 to 0, producing the weight map stored as
- `data/diverse_source_image`. This conversion is implemented in
- `wikimedia_commons_postprocess.py`.
-- **Point-target phantoms** (250 captures) use no external asset — purely
- synthetic point scatterers.
-
-All channel data was generated with Field II (Jensen/DTU), distributed for free academic use. Field II's terms do not
-restrict redistribution or licensing of simulation *output* data. Per Field II's terms, any use of this dataset should cite:
-J.A. Jensen, "Field: A Program for Simulating Ultrasound Systems," *Med. Biol.
-Eng. Comp.*, 1996; and J.A. Jensen and N.B. Svendsen, "Calculation of Pressure
-Fields from Arbitrarily Shaped, Apodized, and Excited Ultrasound Transducers,"
-*IEEE Trans. Ultrason., Ferroelec., Freq. Contr.*, 1992.
+[Creative Commons Attribution 4.0 International (CC BY 4.0)](https://creativecommons.org/licenses/by/4.0/legalcode.en). Retain attribution and identify modifications when reusing the data.
## Intended Usage
-- **Generalized reconstruction** — learning a direct mapping from raw FSA channel
- data to a B-mode image, and/or from FSA to arbitrary retrospective beamforming
- targets (focused, multi-angle compounded, diverging-wave, adaptive).
-- **Compressed sensing / adaptive transmit** — sparse-aperture and adaptive transmit
- design research using retrospective sub-selection of the 128 FSA transmit events.
-- **Segmentation** — pixel-aligned echogenicity-region segmentation (anechoic /
- hypoechoic / hyperechoic) from raw channel data.
-- **Scatterer-level analysis** — `data/scatterers` exposes the exact Field II
- point-scatterer cloud (position + amplitude) used to simulate each capture,
- for tasks that want ground truth finer than a pixel grid (e.g. quantitative
- ultrasound, scatterer-density estimation).
+- **Generalized reconstruction** — learning a direct mapping from raw FSA channel data to a B-mode image, and/or from FSA to arbitrary retrospective beamforming targets (focused, multi-angle compounded, diverging-wave, adaptive).
+- **Compressed sensing / adaptive transmit** — sparse-aperture and adaptive transmit design research using retrospective sub-selection of the 128 FSA transmit events.
+- **Segmentation** — pixel-aligned echogenicity-region segmentation (anechoic / hypoechoic / hyperechoic) from raw channel data.
+- **Scatterer-level analysis** — `data/scatterers` exposes the exact Field II point-scatterer cloud (position + amplitude) used to simulate each capture, for tasks that want ground truth finer than a pixel grid (e.g. quantitative ultrasound, scatterer-density estimation).
## Dataset Characterization
-- **Data Collection Method:** synthetic (Field II full-synthetic-aperture
- simulation).
+- **Data Collection Method:** synthetic (Field II full-synthetic-aperture simulation).
- **Labeling Method:** synthetic ground truth.
- - Segmentation masks (anechoic/hypoechoic/hyperechoic) are Open Images V7
- animal-class segmentation annotations, used for shape only.
- - Diverse-echogenicity amplitude weighting uses a Wikimedia Commons photograph
- as a continuous grayscale weight map, preserved as `data/diverse_source_image`
- so an end user can see what pattern the capture was generated from.
- - The reconstruction-target B-mode (`data/image`) is synthesized from the same
- FSA capture (see *Data Validation* below), not an independent acquisition.
-- **Acquisition system (simulated):** 128-element linear array (model: L11-5v),
- center frequency 5.208 MHz, element width 0.27 mm, kerf 0.03 mm, pitch 0.3 mm,
- element height 5 mm, elevation focus (Rfocus) 20 mm. Simulated at 104.16 MHz (a
- high rate required for Field II's numerical precision), then decimated ×5 to a
- delivered sampling rate of 20.832 MHz. Sound speed 1540 m/s.
- Receive dynamic-focus reconstruction uses F-number 1.75 (baked into
- `reconstruct.py`'s `F_NUMBER` constant — zea's own default is 1.0, so this must be
- supplied explicitly rather than relying on the file alone to reproduce the
- reference images).
-- **Transmit pulse:** Hann-windowed 2.5-cycle tone burst at the 5.208 MHz center
- frequency, sampled at the native 104.16 MHz simulation rate. −6dB fractional
- bandwidth ≈ 76.5% (stored as `probe/probe_bandwidth_percent`).
-- **Coordinate convention:** x = lateral, y = elevation (always 0 for this 2D
- acquisition), z = axial/depth — the standard zea convention, applied throughout
- `probe_geometry`, `transmit_origins`, and every map's `coordinates` field.
-- **Frame timing:** each file is a single static frame (`n_frames=1`) with no
- simulated motion or pulse-repetition-frequency concept, so `scan/time_to_next_transmit`
- is intentionally omitted rather than populated with a fabricated value. Likewise, no
- time-gain-compensation was applied to this synthetic data, so `scan/tgc_gain_curve`
- is omitted.
+ - Segmentation masks (anechoic/hypoechoic/hyperechoic) are Open Images V7 animal-class segmentation annotations, used for shape only.
+ - Diverse-echogenicity amplitude weighting uses a Wikimedia Commons photograph as a continuous grayscale weight map, preserved as `data/diverse_source_image` so an end user can see what pattern the capture was generated from.
+ - The reconstruction-target B-mode (`data/image`) is synthesized from the same FSA capture (see *Data Validation* below), not an independent acquisition.
+- **Acquisition system (simulated):** 128-element linear array (model: L11-5v), center frequency 5.208 MHz, element width 0.27 mm, kerf 0.03 mm, pitch 0.3 mm, element height 5 mm, elevation focus (Rfocus) 20 mm. Simulated at 104.16 MHz (a high rate required for Field II's numerical precision), then decimated ×5 to a delivered sampling rate of 20.832 MHz. Sound speed 1540 m/s. Receive dynamic-focus reconstruction uses F-number 1.75 (baked into `reconstruct.py`'s `F_NUMBER` constant — zea's own default is 1.0, so this must be supplied explicitly rather than relying on the file alone to reproduce the reference images).
+- **Transmit pulse:** Hann-windowed 2.5-cycle tone burst at the 5.208 MHz center frequency, sampled at the native 104.16 MHz simulation rate. −6dB fractional bandwidth ≈ 76.5% (stored as `probe/probe_bandwidth_percent`).
+- **Coordinate convention:** x = lateral, y = elevation (always 0 for this 2D acquisition), z = axial/depth — the standard zea convention, applied throughout `probe_geometry`, `transmit_origins`, and every map's `coordinates` field.
+- **Frame timing:** each file is a single static frame (`n_frames=1`) with no simulated motion or pulse-repetition-frequency concept, so `scan/time_to_next_transmit` is intentionally omitted rather than populated with a fabricated value. Likewise, no time-gain-compensation was applied to this synthetic data, so `scan/tgc_gain_curve` is omitted.
+
+## Source Attribution
+
+The dataset as a whole is released under CC BY 4.0. Its components come from the following sources:
+
+- **Simulated channel data, phantom parameters, and reconstruction/segmentation labels** are generated by the contributors (Field II simulation outputs) and released under CC BY 4.0.
+- **Segmentation mask shapes** (anechoic/hypoechoic/hyperechoic classes, 750 captures) are sourced from [Open Images V7](https://storage.googleapis.com/openimages/web/factsfigures_v7.html)'s animal-class segmentation annotations (Google LLC). Only the binary mask is used — never the underlying source photograph. Open Images V7 licenses its annotations, including segmentation masks, under CC BY 4.0; the source photographs themselves carry a separate CC BY 2.0 license but are not used anywhere in this dataset.
+- **Diverse-echogenicity amplitude-weight maps** (1,000 captures) are photographs from Wikimedia Commons, restricted to the `CC-BY-4.0` category and verified per-image against each file's `CC BY 4.0` license field before acceptance. `wikimedia_commons_metadata.csv`, at the dataset root, credits each one: a row per capture, keyed by `DatasetFile` for `image_0751.hdf5` through `image_1750.hdf5`, giving the source URL, Commons file page, author, title and license. No photograph appears in the dataset in its original form. Each was converted to grayscale, resampled to the 400 × 450 weight-map grid, histogram-equalized and rescaled to `[0, 1]`. Values above 0.9 were then set to 1 and values below 0.1 to 0, producing the weight map stored as `data/diverse_source_image`. This conversion is implemented in `wikimedia_commons_postprocess.py`.
+- **Point-target phantoms** (250 captures) use no external asset — purely synthetic point scatterers.
+
+All channel data was generated with Field II (Jensen/DTU), distributed for free academic use. Field II's terms do not restrict redistribution or licensing of simulation *output* data. Per Field II's terms, any use of this dataset should cite: J.A. Jensen, "Field: A Program for Simulating Ultrasound Systems," *Med. Biol. Eng. Comp.*, 1996; and J.A. Jensen and N.B. Svendsen, "Calculation of Pressure Fields from Arbitrarily Shaped, Apodized, and Excited Ultrasound Transducers," *IEEE Trans. Ultrason., Ferroelec., Freq. Contr.*, 1992.
+
+## Processing the Dataset
+
+The acquisitions can be processed with the `pipeline.yaml` definition in this folder and the [zea library](https://github.com/tue-bmd/zea).
+
+`zea` streams the data from the Hugging Face Hub and processes it according to the pipeline. You can try it out with the following command:
+
+```bash
+zea process \
+ --dataset hf://nvidia/OpenH-RF/concordia/data/image_0005.hdf5 \
+ --config hf://nvidia/OpenH-RF/concordia/pipeline.yaml \
+ --n-frames 1 \
+ --save-as png
+```
+
+Alternatively, you can use the `reconstruct.py` [script](https://github.com/open-h/OpenH-RF/blob/main/datasets/concordia/reconstruct.py) as provided in the [OpenH-RF GitHub repository](https://github.com/open-h/OpenH-RF).
## Dataset Format
-The dataset is 2,000 individual zea HDF5 files (one acquisition per file) under
-`data/` (zea format; `zea_version` 0.1.6). Reference figures are in
-`examples/`; `reconstruct.py`, `pipeline.yaml`, and this card sit
-at the repository root. Per file:
-
-- `data/raw_data` — full FSA channel data, `int16`, quantized from the native
- simulated (float32) values by per-file peak-scaling into the int16 range
- (~5e-5 relative quantization step — well below any physically meaningful signal
- feature, equivalent to how real ultrasound hardware ADCs store raw channel data).
-- `data/image` — the reference B-mode: a synthetic transmit aperture (STA)
- reconstruction that delay-and-sums all 128 single-element FSA transmits with
- zea's default DAS pipeline over the intended imaging FOV (see *Subject
- Metadata*). This is exactly what `reconstruct.py` reproduces from `data/raw_data`.
-- `data/segmentation` — boolean mask with labels `["background", ]`,
- present only for anechoic/hypoechoic/hyperechoic phantoms (750 captures) —
- the Open Images V7 mask directly. Not produced for diverse or point-target
- phantoms (no defined region to segment in either case).
-- `data/echogenicity_multiplier` — present alongside `data/segmentation`
- (same 750 captures): the scalar amplitude multiplier Field II applied to
- every scatterer inside that region, e.g. "hypoechoic at 0.23×," not just
- "hypoechoic." A single number per file, so it's stored without a
- `coordinates` grid (optional per zea's `Map` spec — this isn't spatial).
-- `data/diverse_source_image` — present only for diverse-class phantoms
- (1,000 captures): the grayscale natural-image echogenicity weight map
- (continuous `[0, 1]` values) each capture's scatterer amplitudes were
- generated from. Not a mask — just the reference image, so an end user can
- see what pattern produced the capture.
-- `data/scatterers` — the exact Field II point-scatterer cloud used to
- simulate the capture (every capture, all classes): `values` = per-scatterer
- amplitude (a.u.), `coordinates` = per-scatterer `(x, y, z)` position in
- metres. ~275,000 scatterers per capture, stored via zea's custom-data
- extension mechanism as a `(1, n_scatterers, 1)` / `(n_scatterers, 1, 3)`
- pair rather than a regular pixel grid (a point cloud has no grid to speak
- of). This is the ground truth Field II actually simulated from — finer than
- any pixel-grid label derived from it.
-
-Pre-processing applied before packaging: anti-alias FIR decimation (factor 5,
-104.16 MHz → 20.832 MHz) and int16 quantization, both described above. zea's
-The original submission used lossless `lzf` HDF5 compression; re-saving may change storage compression without changing the RF representation.
+[zea v0.1.6](https://github.com/tue-bmd/zea)
+
+The dataset is 2,000 individual zea HDF5 files (one acquisition per file) under `data/` (zea format; `zea_version` 0.1.6). Reference figures are in `examples/`; `reconstruct.py`, `pipeline.yaml`, and this card sit at the repository root. Per file:
+
+- `data/raw_data` — full FSA channel data, `int16`, quantized from the native simulated (float32) values by per-file peak-scaling into the int16 range (~5e-5 relative quantization step — well below any physically meaningful signal feature, equivalent to how real ultrasound hardware ADCs store raw channel data).
+- `data/image` — the reference B-mode: a synthetic transmit aperture (STA) reconstruction that delay-and-sums all 128 single-element FSA transmits with zea's default DAS pipeline over the intended imaging FOV (see *Subject Metadata*). This is exactly what `reconstruct.py` reproduces from `data/raw_data`.
+- `data/segmentation` — boolean mask with labels `["background", ]`, present only for anechoic/hypoechoic/hyperechoic phantoms (750 captures) — the Open Images V7 mask directly. Not produced for diverse or point-target phantoms (no defined region to segment in either case).
+- `data/echogenicity_multiplier` — present alongside `data/segmentation` (same 750 captures): the scalar amplitude multiplier Field II applied to every scatterer inside that region, e.g. "hypoechoic at 0.23×," not just "hypoechoic." A single number per file, so it's stored without a `coordinates` grid (optional per zea's `Map` spec — this isn't spatial).
+- `data/diverse_source_image` — present only for diverse-class phantoms (1,000 captures): the grayscale natural-image echogenicity weight map (continuous `[0, 1]` values) each capture's scatterer amplitudes were generated from. Not a mask — just the reference image, so an end user can see what pattern produced the capture.
+- `data/scatterers` — the exact Field II point-scatterer cloud used to simulate the capture (every capture, all classes): `values` = per-scatterer amplitude (a.u.), `coordinates` = per-scatterer `(x, y, z)` position in metres. ~275,000 scatterers per capture, stored via zea's custom-data extension mechanism as a `(1, n_scatterers, 1)` / `(n_scatterers, 1, 3)` pair rather than a regular pixel grid (a point cloud has no grid to speak of). This is the ground truth Field II actually simulated from — finer than any pixel-grid label derived from it.
+
+Pre-processing applied before packaging: anti-alias FIR decimation (factor 5, 104.16 MHz → 20.832 MHz) and int16 quantization, both described above. zea's The original submission used lossless `lzf` HDF5 compression; re-saving may change storage compression without changing the RF representation.
## Dataset Quantification
@@ -189,16 +119,12 @@ This dataset comprises 2,000 FSA captures across five echogenicity classes:
| Diverse (natural-image-derived) | 1,000 | 0751–1750 | No | `data/diverse_source_image` |
| Point-target | 250 | 1751–2000 | No | — |
-`data/scatterers` (the raw point-scatterer cloud) is present for all 2,000
-captures regardless of class.
+`data/scatterers` (the raw point-scatterer cloud) is present for all 2,000 captures regardless of class.
-Each capture's class label is stored in its file metadata
-(`metadata/annotations/label`).
+Each capture's class label is stored in its file metadata (`metadata/annotations/label`).
- **Stored HDF5 size:** 82.39 GB total; 41.20 MB per file on average. RF remains int16 and post-decimation.
-- **Train / validation / test split:** none predefined — the corpus is released
- as a single set for users to partition as their task requires (class membership
- and index ranges are given above).
+- **Train / validation / test split:** none predefined — the corpus is released as a single set for users to partition as their task requires (class membership and index ranges are given above).
- **Per-sample feature table:**
| Field | Shape | Dtype | Units | Description |
@@ -220,73 +146,24 @@ Each capture's class label is stored in its file metadata
## Subject Metadata
-Not applicable — no human or animal subjects. Each "subject" is a simulated
-phantom of ≈275,000 scatterers. The reconstructed image FOV is 45 mm (lateral) ×
-40 mm (axial), starting 10 mm from the transducer face. The scatterer field is
-deliberately larger than this FOV (≈49.5 mm wide, extending to 54 mm deep) so
-that beamforming at the FOV edges is fully supported by surrounding scatterers
-and free of edge-truncation artifacts; only the reconstruction grid is cropped
-to the FOV, while `data/raw_data` and `data/scatterers` retain the full extent.
-Per-class amplitude weighting inside the mask/weight-map region:
+Not applicable — no human or animal subjects. Each "subject" is a simulated phantom of ≈275,000 scatterers. The reconstructed image FOV is 45 mm (lateral) × 40 mm (axial), starting 10 mm from the transducer face. The scatterer field is deliberately larger than this FOV (≈49.5 mm wide, extending to 54 mm deep) so that beamforming at the FOV edges is fully supported by surrounding scatterers and free of edge-truncation artifacts; only the reconstruction grid is cropped to the FOV, while `data/raw_data` and `data/scatterers` retain the full extent. Per-class amplitude weighting inside the mask/weight-map region:
- **Anechoic:** scatterer amplitude zeroed.
-- **Hypoechoic:** amplitude × U[0.07, 0.50]; the exact per-capture draw is
- preserved in `data/echogenicity_multiplier`.
-- **Hyperechoic:** amplitude × U[2, 8]; same per-capture preservation via
- `data/echogenicity_multiplier`.
-- **Diverse:** continuous grayscale weight map from a Wikimedia Commons
- photograph (histogram-equalized, normalized to [0, 1], clipped at the
- extremes) — preserved as `data/diverse_source_image`.
+- **Hypoechoic:** amplitude × U[0.07, 0.50]; the exact per-capture draw is preserved in `data/echogenicity_multiplier`.
+- **Hyperechoic:** amplitude × U[2, 8]; same per-capture preservation via `data/echogenicity_multiplier`.
+- **Diverse:** continuous grayscale weight map from a Wikimedia Commons photograph (histogram-equalized, normalized to [0, 1], clipped at the extremes) — preserved as `data/diverse_source_image`.
- **Point-target:** 10–20 point targets per phantom (count ~ U[10, 20], rounded to an integer), each target's amplitude an independent U[15, 35] draw. The targets consist of adjacent groups of high-amplitude scatterers within `data/scatterers`.
-All classes except point-target additionally include 2–5 extra bright point
-scatterers (amplitude 18–22) scattered at valid random positions, for realism.
+All classes except point-target additionally include 2–5 extra bright point scatterers (amplitude 18–22) scattered at valid random positions, for realism.
## Data Validation
-**Setup:** `reconstruct.py` requires `zea>=0.1.1`, `matplotlib`,
-and `KERAS_BACKEND=jax` (or `torch`/`tensorflow`) set before import. This submission
-was built and verified against the [OpenH-RF repo](https://github.com/open-h/OpenH-RF)'s environment (`uv sync` inside a clone of that repo installs `zea` and every other
-dependency this script needs — see that repo's README for the exact commands).
-
-`reconstruct.py` (+ `pipeline.yaml`, zea's default DAS pipeline: Cast → ApplyWindow →
-Demodulate → Beamform → EnvelopeDetect → Normalize → LogCompress; each stage is
-explained in `reconstruct.py`'s own module docstring) reconstructs a synthetic
-transmit aperture (STA) B-mode from `data/raw_data` using all 128 transmits, over
-the same field of view as the stored `data/image` reference. It renders that
-reconstruction on physical mm axes next to the capture's class-specific label
-— segmentation foreground for anechoic/hypoechoic/hyperechoic,
-`data/diverse_source_image` for diverse, none for point-target — and the
-`data/scatterers` cloud coloured by |amplitude|, all on shared equal-aspect mm
-axes, confirming the label, reconstruction, and scatterer field are spatially
-registered. `examples/` holds one such figure for a representative capture of
-each of the five classes.
+`reconstruct.py` (+ `pipeline.yaml`, zea's default DAS pipeline: Cast → ApplyWindow → Demodulate → Beamform → EnvelopeDetect → Normalize → LogCompress; each stage is explained in `reconstruct.py`'s own module docstring) reconstructs a synthetic transmit aperture (STA) B-mode from `data/raw_data` using all 128 transmits, over the same field of view as the stored `data/image` reference. It renders that reconstruction on physical mm axes next to the capture's class-specific label — segmentation foreground for anechoic/hypoechoic/hyperechoic, `data/diverse_source_image` for diverse, none for point-target — and the `data/scatterers` cloud coloured by |amplitude|, all on shared equal-aspect mm axes, confirming the label, reconstruction, and scatterer field are spatially registered. [`assets/reference_capture.png`](assets/reference_capture.png) is one such figure.
## Known Issues
-- **`data/image` is a log-compressed dB B-mode, not raw beamformed RF** —
- This is a minor packaging note, not a coverage
- gap, precisely because the data is FSA: `data/raw_data` retains every
- element-to-element transmit/receive combination (128 single-element transmit
- firings × 128-element receive aperture on the L11-5v), which is a more
- general representation than any one fixed beamformed product could be: by
- delay-and-sum with the appropriate per-element transmit delays and apodization
- (linear superposition over the 128 single-element firings), it is a sufficient
- basis to retrospectively synthesize other transmit/receive schemes — multi-angle
- plane-wave compounding at arbitrary steering angles, diverging-wave imaging from
- an arbitrary virtual source behind the array, conventional focused/multi-line
- transmit — with no re-acquisition. `reconstruct.py` as shipped only implements
- one of these (the full 128-transmit STA beamforming used to produce
- `data/image`, via zea's default DAS pipeline, `pipeline.yaml`); it does not take
- a scheme argument. Reconstructing a different scheme means modifying
- `reconstruct.py` accordingly — supplying the corresponding transmit
- delays/apodization to zea's `Beamform` op.
+- **`data/image` is a log-compressed dB B-mode, not raw beamformed RF** — This is a minor packaging note, not a coverage gap, precisely because the data is FSA: `data/raw_data` retains every element-to-element transmit/receive combination (128 single-element transmit firings × 128-element receive aperture on the L11-5v), which is a more general representation than any one fixed beamformed product could be: by delay-and-sum with the appropriate per-element transmit delays and apodization (linear superposition over the 128 single-element firings), it is a sufficient basis to retrospectively synthesize other transmit/receive schemes — multi-angle plane-wave compounding at arbitrary steering angles, diverging-wave imaging from an arbitrary virtual source behind the array, conventional focused/multi-line transmit — with no re-acquisition. `reconstruct.py` as shipped only implements one of these (the full 128-transmit STA beamforming used to produce `data/image`, via zea's default DAS pipeline, `pipeline.yaml`); it does not take a scheme argument. Reconstructing a different scheme means modifying `reconstruct.py` accordingly — supplying the corresponding transmit delays/apodization to zea's `Beamform` op.
## Ethical Considerations
-Entirely synthetic data. No human or animal subjects are involved, and no IRB/ethics
-approval is required or applicable. The "animal-class" Open Images V7 segmentation
-annotations and Wikimedia Commons photographs referenced elsewhere in this card
-contribute only geometric silhouette shapes and grayscale texture patterns,
-respectively — no live animal or human subject, tissue, or imagery of either is
-used anywhere in this dataset.
+Entirely synthetic data. No human or animal subjects are involved, and no IRB/ethics approval is required or applicable. The "animal-class" Open Images V7 segmentation annotations and Wikimedia Commons photographs referenced elsewhere in this card contribute only geometric silhouette shapes and grayscale texture patterns, respectively — no live animal or human subject, tissue, or imagery of either is used anywhere in this dataset.
diff --git a/datasets/concordia/assets/classes.png b/datasets/concordia/assets/classes.png
new file mode 100644
index 0000000..67fe09b
Binary files /dev/null and b/datasets/concordia/assets/classes.png differ
diff --git a/datasets/concordia/assets/main.png b/datasets/concordia/assets/main.png
new file mode 100644
index 0000000..5f31cfe
Binary files /dev/null and b/datasets/concordia/assets/main.png differ
diff --git a/datasets/concordia/assets/reference_capture.png b/datasets/concordia/assets/reference_capture.png
new file mode 100644
index 0000000..9bd38b5
Binary files /dev/null and b/datasets/concordia/assets/reference_capture.png differ
diff --git a/datasets/concordia/pipeline.yaml b/datasets/concordia/pipeline.yaml
index 3ea552e..622e926 100644
--- a/datasets/concordia/pipeline.yaml
+++ b/datasets/concordia/pipeline.yaml
@@ -1,3 +1,24 @@
+parameters:
+ # Imaging FOV: 45 mm lateral x 40 mm axial, starting 10 mm from the
+ # transducer face. This is a reconstruction-time choice, not part of the zea
+ # scan spec, so without it zea falls back to an aperture-wide, full-depth
+ # default grid.
+ xlims:
+ - -0.0225
+ - 0.0225
+ zlims:
+ - 0.01
+ - 0.05
+ # Isotropic pixels (~74 um both ways). data/image is stored on a 542 x 384
+ # anisotropic grid; rendering that grid as square pixels stretches the
+ # phantom vertically.
+ grid_size_x: 610
+ grid_size_z: 542
+ # zea's default is 1.0, which is not what produced the reference images.
+ f_number: 1.75
+ dynamic_range:
+ - -60
+ - 0
pipeline:
operations:
- name: keras.ops.cast
diff --git a/datasets/concordia/reconstruct.py b/datasets/concordia/reconstruct.py
index 8ae6f30..faf5864 100644
--- a/datasets/concordia/reconstruct.py
+++ b/datasets/concordia/reconstruct.py
@@ -59,9 +59,9 @@
# --- Inputs -----------------------------------------------------------------
# Defaults stream straight from the published corpus. Swap any of these for a
# local path to run against your own copy.
-ZEA_FILE = "hf://nvidia/OpenH-RF/concordia/data/image_1808.hdf5"
+ZEA_FILE = "hf://nvidia/OpenH-RF/concordia/data/image_0753.hdf5"
FRAME = 0 # Frame index (default: 0)
-OUT = HERE / "reference_capture.png"
+OUT = HERE / "assets" / "reference_capture.png"
SAVE_YAML = None # Optionally write the pipeline to a reusable pipeline.yaml
@@ -260,6 +260,7 @@ def main():
_label(axs, f"data/scatterers (|amplitude|, {int(m.sum()):,} pts in FOV)")
fig.tight_layout()
+ Path(OUT).parent.mkdir(parents=True, exist_ok=True)
fig.savefig(OUT, dpi=150, bbox_inches="tight")
print(f"Saved reconstruction to {OUT}")
diff --git a/datasets/dartmouth-uct/README.md b/datasets/dartmouth-uct/README.md
index 527e00a..14630c1 100644
--- a/datasets/dartmouth-uct/README.md
+++ b/datasets/dartmouth-uct/README.md
@@ -1,37 +1,47 @@
-# OpenH-RF Sub-Dataset: 2D Ring-Array USCT Waveforms from 2D- and 3D-k-Wave Simulations
+---
+name: dartmouth-uct
+pretty_name: "2D Ring-Array USCT Waveforms from 2D- and 3D-k-Wave Simulations"
+license: cc-by-4.0
+task_categories:
+ - other
+tags:
+ - ultrasound
+ - rf
+ - openh-rf
+ - usct
+ - sound-speed-estimation
+ - attenuation
+ - breast
+ - simulation
+language:
+ - en
+size_categories:
+ - 1K (primary point of contact)
+- Geoffrey P. Luke (PI)
+- Thayer School of Engineering, Dartmouth College
+- University of Rochester Medical Center
## Dataset Creation Date
@@ -39,27 +49,20 @@ are involved.
## License / Terms of Use
-**CC BY 4.0.** All contributed data are cleared for this license. The data are
-fully synthetic (no patient data, no consent or IRB requirements). The digital
-breast phantoms derive from the publicly available VICTRE model (U.S. FDA / NCI,
-public domain).
+[Creative Commons Attribution 4.0 International (CC BY 4.0)](https://creativecommons.org/licenses/by/4.0/legalcode.en). Retain attribution and identify modifications when reusing the data.
## Intended Usage
- **Sound-speed estimation / imaging** (quantitative SOS reconstruction).
- **Acoustic-attenuation imaging.**
-- **Ultrasound computed tomography (USCT)** reconstruction from full-ring
- channel data.
-- **Compressed sensing** — sub-sampling along the transmit
- (Tx) or receive (Rx) axis and recovering missing channels.
+- **Ultrasound computed tomography (USCT)** reconstruction from full-ring channel data.
+- **Compressed sensing** — sub-sampling along the transmit (Tx) or receive (Rx) axis and recovering missing channels.
## Dataset Characterization
- **Data Collection Method:** synthetic (k-Wave simulation).
-- **Labeling Method:** synthetic ground truth (voxel-level SOS and attenuation
- maps are the exact simulation inputs; no annotation error).
-- **Acquisition system** (the label denotes the k-Wave simulation dimensionality;
- the recorded data are 2D in both cases):
+- **Labeling Method:** synthetic ground truth (voxel-level SOS and attenuation maps are the exact simulation inputs; no annotation error).
+- **Acquisition system** (the label denotes the k-Wave simulation dimensionality; the recorded data are 2D in both cases):
**2D-sim** (RF from 2D k-Wave)
@@ -91,50 +94,32 @@ public domain).
| Time samples (T) | 2161 |
| Record length | ~180 µs |
+## Processing the Dataset
+
+The acquisitions can be processed with the `reconstruct.py` [script](https://github.com/open-h/OpenH-RF/blob/main/datasets/dartmouth-uct/reconstruct.py) as provided in the [OpenH-RF GitHub repository](https://github.com/open-h/OpenH-RF), together with the `pipeline.yaml` definition in this folder and the [zea library](https://github.com/tue-bmd/zea). The script streams the data from the Hugging Face Hub.
+
+Set `ZEA_FILE` at the top of the script and run `python reconstruct.py`; the figure at the top of this card is its output. `SOS_MAP = True` swaps the constant-sound-speed delays for a straight-ray integral through the ground-truth map.
+
## Dataset Format
-All data are packaged in the **`zea` HDF5 file format** (one `.hdf5` file per
-acquisition), written entirely through `zea.File.create`. Each file stores the
-raw channel data under `tracks/track_0/data/raw_data`, the acquisition parameters
-under `tracks/track_0/scan`, the ring geometry under `probe` (in the **XZ imaging
-plane**, y = elevation), and the voxel-level ground truth as native zea map fields
-`tracks/track_0/data/sos_map` and `tracks/track_0/data/attenuation_map` (each with
-per-pixel `coordinates`). Tissue class is stored in `metadata/annotations`
-(`anatomy`, `label`); only fields with no standard spec home (z-plane indices,
-element focus) are zea `CustomElement`s under the top-level `custom/` group. Files
-are laid out by simulation type: `data/2d/` (2D-sim) and `data/3d/` (3D-sim),
-produced by
-[`convert_2d_to_zea.py`](convert_2d_to_zea.py) and
-[`convert_3d_to_zea.py`](convert_3d_to_zea.py) respectively.
+[zea v0.1.6](https://github.com/tue-bmd/zea)
+
+All data are packaged in the **`zea` HDF5 file format** (one `.hdf5` file per acquisition), written entirely through `zea.File.create`. Each file stores the raw channel data under `tracks/track_0/data/raw_data`, the acquisition parameters under `tracks/track_0/scan`, the ring geometry under `probe` (in the **XZ imaging plane**, y = elevation), and the voxel-level ground truth as native zea map fields `tracks/track_0/data/sos_map` and `tracks/track_0/data/attenuation_map` (each with per-pixel `coordinates`). Tissue class is stored in `metadata/annotations` (`anatomy`, `label`); only fields with no standard spec home (z-plane indices, element focus) are zea `CustomElement`s under the top-level `custom/` group. Files are laid out by simulation type: `data/2d/` (2D-sim) and `data/3d/` (3D-sim).
**Pre-processing applied before packaging:**
-- 2D-sim: temporal decimation by 3× (20 MHz → 6.67 MHz native simulation rate).
- 3D-sim: saved at the native 12 MHz, no decimation.
-- Time-zero is carried in `scan/initial_times`; the per-sample time vector is
- `initial_times[tx] + n / sampling_frequency`. In **both** sets `t = 0` is the
- emission centroid: `initial_times = -2.15e-6` (2D-sim) and `-1.625e-6` (3D-sim,
- the 5-cycle toneburst centroid). The 3D simulation saved its time vector from
- the pulse onset, so this centroid offset is applied during conversion.
-- Single-element transmit events are described by `scan/tx_apodizations` with zero
- `scan/t0_delays`. **2D-sim:** all 256 elements fire (identity matrix).
- **3D-sim:** 64 events fire every 4th element (a `(64, 256)` stride-4 matrix).
-- Per-acquisition channel data stored as `float32` (zea's `raw_data` spec allows
- only `float32` or `int16`). The 2D-sim RF was decimated and intermediately
- cached at fp16 precision, so its stored `float32` is bit-faithful to that source
- rather than carrying extra precision; the 3D-sim RF is the native `float32`
- simulation output.
+- 2D-sim: temporal decimation by 3× (20 MHz → 6.67 MHz native simulation rate). 3D-sim: saved at the native 12 MHz, no decimation.
+- Time-zero is carried in `scan/initial_times`; the per-sample time vector is `initial_times[tx] + n / sampling_frequency`. In **both** sets `t = 0` is the emission centroid: `initial_times = -2.15e-6` (2D-sim) and `-1.625e-6` (3D-sim, the 5-cycle toneburst centroid). The 3D simulation saved its time vector from the pulse onset, so this centroid offset is applied during conversion.
+- Single-element transmit events are described by `scan/tx_apodizations` with zero `scan/t0_delays`. **2D-sim:** all 256 elements fire (identity matrix). **3D-sim:** 64 events fire every 4th element (a `(64, 256)` stride-4 matrix).
+- Per-acquisition channel data stored as `float32` (zea's `raw_data` spec allows only `float32` or `int16`). The 2D-sim RF was decimated and intermediately cached at fp16 precision, so its stored `float32` is bit-faithful to that source rather than carrying extra precision; the 3D-sim RF is the native `float32` simulation output.
- No demodulation or beamforming is applied — data are raw RF channel signals.
## Dataset Quantification
**Current OpenH-RF release:** 2,625 HDF5 files; 257.62 GB (257,619,787,776 bytes) stored; root `zea_version` **0.1.6**. Sizes include all HDF5 contents and use decimal units (MB = 10^6 bytes, GB = 10^9 bytes, TB = 10^12 bytes), not decoded-array memory or original-source download sizes.
-- **Number of acquisitions:** **2,149 (2D-sim)** (1,859 dense + 290 fatty) +
- **476 (3D-sim)** = **2,625 acquisitions**.
-- **Single-Tx channel-capture frames:** 2,149 × 256 (2D-sim) + 476 × 64 (3D-sim)
- ≈ **5.8 × 10⁵ frames**.
-- **Train / val / test split:** suggested 80 / 10 / 10 by **source phantom**
- (so slices/z-planes from one phantom never cross splits — prevents leakage).
+- **Number of acquisitions:** **2,149 (2D-sim)** (1,859 dense + 290 fatty) + **476 (3D-sim)** = **2,625 acquisitions**.
+- **Single-Tx channel-capture frames:** 2,149 × 256 (2D-sim) + 476 × 64 (3D-sim) ≈ **5.8 × 10⁵ frames**.
+- **Train / val / test split:** suggested 80 / 10 / 10 by **source phantom** (so slices/z-planes from one phantom never cross splits — prevents leakage).
- **Stored HDF5 size:** 257.62 GB total; 198.10 GB (2D-sim) + 59.52 GB (3D-sim).
**Per-sample feature table — 2D-sim** (HDF5 keys per `.hdf5` acquisition):
@@ -157,9 +142,7 @@ produced by
| `metadata/annotations` | – | str | – | `anatomy="breast"`, `label="dense"`/`"fatty"` |
| `custom/z_slice` | scalar | int | – | Phantom z-slice index |
-Attenuation is stored in the zea base unit **dB/m/Hz** (`1 dB/cm/MHz = 1e-4
-dB/m/Hz`); the `sos_map`/`attenuation_map` `coordinates` carry the physical grid
-(so `dx` is implicit), and `scan/sound_speed` holds the water reference.
+Attenuation is stored in the zea base unit **dB/m/Hz** (`1 dB/cm/MHz = 1e-4 dB/m/Hz`); the `sos_map`/`attenuation_map` `coordinates` carry the physical grid (so `dx` is implicit), and `scan/sound_speed` holds the water reference.
**Per-sample feature table — 3D-sim** (HDF5 keys per `.hdf5` acquisition):
@@ -182,66 +165,32 @@ dB/m/Hz`); the `sos_map`/`attenuation_map` `coordinates` carry the physical grid
| `metadata/annotations` | – | str | – | `anatomy="breast"` (no dense/fatty label for the 3D set) |
| `custom/z_off`, `custom/phantom_z_idx`, `custom/element_focus` | scalar | int / float | – / m | Ring z-offset, phantom z-slice index, element focus (0.075 m) |
-Attenuation is in the zea base unit **dB/m/Hz**; the map `coordinates` carry the
-physical grid (XZ plane, y = 0).
+Attenuation is in the zea base unit **dB/m/Hz**; the map `coordinates` carry the physical grid (XZ plane, y = 0).
## Subject Metadata
Not applicable — all data are synthetic. Aggregate phantom statistics:
-- **Anatomical region:** breast cross-sections. The 3D-sim set samples several
- z-planes per phantom (one 2D cross-section each).
-- **Tissue classes represented:** fat, glandular, skin/connective, with
- continuous SOS/attenuation/density assignments.
+- **Anatomical region:** breast cross-sections. The 3D-sim set samples several z-planes per phantom (one 2D cross-section each).
+- **Tissue classes represented:** fat, glandular, skin/connective, with continuous SOS/attenuation/density assignments.
- **No PHI.**
## Data Validation
-A single reference reconstruction, [`reconstruct.py`](reconstruct.py), serves
-**both** sub-datasets. It builds a `zea.Pipeline` whose beamforming stage is
-zea's dedicated `zea.ops.USCTReflectivityDAS` — a round-trip time-of-flight
-Delay-And-Sum that, for every pixel, coherently sums over all transmit/receive
-pairs, rejects the direct through-transmission arrival, and apodizes to keep only
-backscatter geometries. The pipeline is saved to [`pipeline.yaml`](pipeline.yaml).
-
-The same code reconstructs the 2D-sim (256 transmits) and 3D-sim (64 transmits)
-files because everything it needs is read **back from the zea file**: element
-positions (`probe/probe_geometry`), the transmit selection (`scan/tx_apodizations`),
-sampling rate (`scan/sampling_frequency`), time-zero (`scan/initial_times`), and
-the imaging grid (from the ground-truth `coordinates`). The ring is stored in the
-XZ imaging plane, so `zea.File.load_parameters` + `pipeline.prepare_parameters`
-drive the reconstruction directly. A resulting image whose bright skin boundary
-traces the ground-truth contour confirms the geometry, timing, and transmit
-parameters were recorded correctly.
-
-```
-python reconstruct.py --input data/2d/phantom_xxx.hdf5
-python reconstruct.py --input data/3d/phantom_xxx.hdf5
-```
+A single reference reconstruction, `reconstruct.py` (see *Processing the Dataset*), serves **both** sub-datasets. It builds a `zea.Pipeline` whose beamforming stage is zea's dedicated `zea.ops.USCTReflectivityDAS` — a round-trip time-of-flight Delay-And-Sum that, for every pixel, coherently sums over all transmit/receive pairs, rejects the direct through-transmission arrival, and apodizes to keep only backscatter geometries. The pipeline is saved to [`pipeline.yaml`](pipeline.yaml).
+
+The same code reconstructs the 2D-sim (256 transmits) and 3D-sim (64 transmits) files because everything it needs is read **back from the zea file**: element positions (`probe/probe_geometry`), the transmit selection (`scan/tx_apodizations`), sampling rate (`scan/sampling_frequency`), time-zero (`scan/initial_times`), and the imaging grid (from the ground-truth `coordinates`). The ring is stored in the XZ imaging plane, so `zea.File.load_parameters` + `pipeline.prepare_parameters` drive the reconstruction directly. A resulting image whose bright skin boundary traces the ground-truth contour confirms the geometry, timing, and transmit parameters were recorded correctly.
## Known Issues
-- **2D-sim vs 3D-sim differ in geometry and sampling** — 60 mm vs 110.9 mm ring;
- 256 vs 64 transmits; 867 @ 6.67 MHz (130 µs) vs 2161 @ 12 MHz (~180 µs); 230²
- (0.30 mm) vs 800² (0.29 mm) GT maps. Users combining both must resample to a
- common grid.
-- **2D-sim point elements vs 3D-sim focused elements:** the 2D-sim set idealizes
- elements as points (no element directivity), while the 3D-sim set models finite
- focused elements (0.558 mm × 19 mm, 75 mm elevation focus) and out-of-plane
- propagation.
-- **Attenuation units:** stored in the zea base unit `dB/m/Hz` (converted from the
- simulation's `dB/cm/MHz`; `1 dB/cm/MHz = 1e-4 dB/m/Hz`). The k-Wave `alpha_power`
- is the `attenuation_map/gamma` field (α(f)=α₀·fᵞ, γ=1.01).
-- **Time-zero convention:** in both sets `t = 0` is the emission centroid (carried
- in `scan/initial_times`), not the first recorded sample — important for
- time-of-flight methods.
+- **2D-sim vs 3D-sim differ in geometry and sampling** — 60 mm vs 110.9 mm ring; 256 vs 64 transmits; 867 @ 6.67 MHz (130 µs) vs 2161 @ 12 MHz (~180 µs); 230² (0.30 mm) vs 800² (0.29 mm) GT maps. Users combining both must resample to a common grid.
+- **2D-sim point elements vs 3D-sim focused elements:** the 2D-sim set idealizes elements as points (no element directivity), while the 3D-sim set models finite focused elements (0.558 mm × 19 mm, 75 mm elevation focus) and out-of-plane propagation.
+- **Attenuation units:** stored in the zea base unit `dB/m/Hz` (converted from the simulation's `dB/cm/MHz`; `1 dB/cm/MHz = 1e-4 dB/m/Hz`). The k-Wave `alpha_power` is the `attenuation_map/gamma` field (α(f)=α₀·fᵞ, γ=1.01).
+- **Time-zero convention:** in both sets `t = 0` is the emission centroid (carried in `scan/initial_times`), not the first recorded sample — important for time-of-flight methods.
## Ethical Considerations
-Fully synthetic dataset. No human or animal subjects; no consent, IRB, or
-de-identification requirements apply. The VICTRE breast phantoms are publicly
-released by the U.S. FDA/NCI. No usage caveats beyond the CC BY 4.0 attribution
-requirement.
+Fully synthetic dataset. No human or animal subjects; no consent, IRB, or de-identification requirements apply. The VICTRE breast phantoms are publicly released by the U.S. FDA/NCI. No usage caveats beyond the CC BY 4.0 attribution requirement.
---
@@ -249,9 +198,5 @@ requirement.
If you use this sub-dataset, please cite:
-- Badano A, Graff CG, Badal A, Sharma D, Zeng R, Samuelson FW, Glick SJ,
- Myers KJ. *Evaluation of Digital Breast Tomosynthesis as Replacement of
- Full-Field Digital Mammography Using an In Silico Imaging Trial.*
- JAMA Network Open. 2018;1(7):e185474. doi:10.1001/jamanetworkopen.2018.5474
-- Treeby BE, Cox BT. *k-Wave: MATLAB toolbox for the simulation and
- reconstruction of photoacoustic wave fields.* J Biomed Opt. 2010;15(2):021314.
+- Badano A, Graff CG, Badal A, Sharma D, Zeng R, Samuelson FW, Glick SJ, Myers KJ. *Evaluation of Digital Breast Tomosynthesis as Replacement of Full-Field Digital Mammography Using an In Silico Imaging Trial.* JAMA Network Open. 2018;1(7):e185474. doi:10.1001/jamanetworkopen.2018.5474
+- Treeby BE, Cox BT. *k-Wave: MATLAB toolbox for the simulation and reconstruction of photoacoustic wave fields.* J Biomed Opt. 2010;15(2):021314.
diff --git a/datasets/dartmouth-uct/assets/main.png b/datasets/dartmouth-uct/assets/main.png
new file mode 100644
index 0000000..3b4ff97
Binary files /dev/null and b/datasets/dartmouth-uct/assets/main.png differ
diff --git a/datasets/dartmouth-uct/assets/phantom_179604449_z200.png b/datasets/dartmouth-uct/assets/phantom_179604449_z200.png
new file mode 100644
index 0000000..918bc11
Binary files /dev/null and b/datasets/dartmouth-uct/assets/phantom_179604449_z200.png differ
diff --git a/datasets/dartmouth-uct/pipeline.yaml b/datasets/dartmouth-uct/pipeline.yaml
index 4a6e14e..70b2b5b 100644
--- a/datasets/dartmouth-uct/pipeline.yaml
+++ b/datasets/dartmouth-uct/pipeline.yaml
@@ -5,9 +5,7 @@ pipeline:
dtype: float32
- name: patched_grid
operations:
- - name: usct_reflectivity_das
- params:
- compounding: coherent
+ - usct_reflectivity_das
params:
with_batch_dim: false
jit_options: null
diff --git a/datasets/dartmouth-uct/reconstruct.py b/datasets/dartmouth-uct/reconstruct.py
index a6acf3e..d832681 100644
--- a/datasets/dartmouth-uct/reconstruct.py
+++ b/datasets/dartmouth-uct/reconstruct.py
@@ -64,7 +64,7 @@
# --- Inputs -----------------------------------------------------------------
# Defaults stream straight from the published corpus. Swap any of these for a
# local path to run against your own copy.
-INPUT = "hf://nvidia/OpenH-RF/dartmouth-uct/data/2d/phantom_179604449_z200.hdf5"
+ZEA_FILE = "hf://nvidia/OpenH-RF/dartmouth-uct/data/2d/phantom_179604449_z200.hdf5"
FOV = None # square field of view [m] (default: the ground-truth map footprint)
NUM_PIXELS = None # output image is num_pixels x num_pixels (default: ground-truth resolution)
SOS_MAP = False # use the ground-truth sound-speed map for straight-ray corrected delays
@@ -182,12 +182,12 @@ def crop_to_grid(gt, grid):
def main():
suffix = "_sos.png" if SOS_MAP else ".png"
- output_path = Path(Path(INPUT).stem + suffix)
+ output_path = HERE / "assets" / (Path(ZEA_FILE).stem + suffix)
zea.init_device(device=DEVICE, verbose=True)
# Load file: acquisition parameters (with config overrides) and raw RF data.
- with File(str(INPUT)) as f:
+ with File(str(ZEA_FILE)) as f:
check_ring_in_imaging_plane(f)
gt_full = ground_truth(f)
grid = grid_limits(gt_full, ring_radius(f), FOV, NUM_PIXELS)
@@ -244,8 +244,9 @@ def main():
# Tie the colorbar axes to the image axes so it matches the panel height.
cax = make_axes_locatable(ax).append_axes("right", size="5%", pad=0.05)
fig.colorbar(handle, cax=cax)
- fig.suptitle(Path(INPUT).name)
+ fig.suptitle(Path(ZEA_FILE).name)
fig.tight_layout()
+ Path(output_path).parent.mkdir(parents=True, exist_ok=True)
plt.savefig(str(output_path), bbox_inches="tight", dpi=100)
print(f"Reconstructed : {recon.shape}")
diff --git a/datasets/kaist-snubh-barreleye/README.md b/datasets/kaist-snubh-barreleye/README.md
index 1efe650..a41ece6 100644
--- a/datasets/kaist-snubh-barreleye/README.md
+++ b/datasets/kaist-snubh-barreleye/README.md
@@ -1,17 +1,42 @@
-# Breast OpenH-RF
-
-*An in-vivo human breast plane-wave raw-channel ultrasound sub-dataset for the OpenH-RF foundation initiative.*
+---
+name: kaist-snubh-barreleye
+pretty_name: "KAIST–SNUBH In-vivo Breast Plane-Wave RF"
+license: cc-by-4.0
+task_categories:
+ - image-classification
+ - other
+tags:
+ - ultrasound
+ - rf
+ - openh-rf
+ - breast
+ - in-vivo
+ - plane-wave
+ - sound-speed-estimation
+language:
+ - en
+size_categories:
+ - n<1K
+---
+
+# KAIST–SNUBH In-vivo Breast Plane-Wave RF
+
+
+
+*Delay-and-sum reconstruction of a biopsy-proven invasive ductal carcinoma, [`data/S01_D1.hdf5`](https://huggingface.co/datasets/nvidia/OpenH-RF/blob/main/kaist-snubh-barreleye/data/S01_D1.hdf5).*
## Dataset Description
-Breast OpenH-RF contains pre-beamformed RF channel-capture data from in-vivo breast ultrasound exams performed on a clinical, FDA-cleared scanner. Every acquisition is a 9-angle plane-wave compounding sequence with a 192-element linear array, paired with a B-mode reference image and a clinically verified diagnostic label. The intended research contribution is two-fold: (1) provide a clinically-grounded benchmark for **sound-speed and attenuation imaging** (Section 6.3 of the RFP) on real human breast tissue with biopsy-proven outcomes and (2) supply a high-quality plane-wave compounding corpus for **generalized reconstruction** research (Section 6.1: super-resolution, aberration correction, adaptive transmit design). Pathology and BI-RADS labels additionally enable benchmarking of **ultrasound interpretation** (Section 6.5).
+This dataset contains pre-beamformed RF channel-capture data from in-vivo breast ultrasound exams performed on a clinical, FDA-cleared scanner. Every acquisition is a 9-angle plane-wave compounding sequence with a 192-element linear array, paired with a B-mode reference image and a clinically verified diagnostic label. The intended research contribution is two-fold: (1) provide a clinically-grounded benchmark for **sound-speed and attenuation imaging** (Section 6.3 of the RFP) on real human breast tissue with biopsy-proven outcomes and (2) supply a high-quality plane-wave compounding corpus for **generalized reconstruction** research (Section 6.1: super-resolution, aberration correction, adaptive transmit design). Pathology and BI-RADS labels additionally enable benchmarking of **ultrasound interpretation** (Section 6.5).
## Dataset Contributor(s)
-- **Lead PI:** Prof. Hyeon-Min Bae — KAIST, School of Electrical Engineering
-- **Co-investigators (KAIST / Barreleye Inc.):** Seok-Hwan Oh, Myeong-Gee Kim, Young-Min Kim, HyeonJik Lee
-- **Clinical co-investigator:** Hyuk-sool Kwon — Seoul National University Bundang Hospital (SNUBH)
-- **Primary point of contact:** Seok-Hwan Oh (Barreleye Inc., Korea) — shoh@barreleye.co.kr
+- Hyeon-Min Bae (lead PI; KAIST, School of Electrical Engineering)
+- Seok-Hwan Oh (primary point of contact; KAIST / Barreleye Inc.)
+- Myeong-Gee Kim (KAIST / Barreleye Inc.)
+- Young-Min Kim (KAIST / Barreleye Inc.)
+- HyeonJik Lee (KAIST / Barreleye Inc.)
+- Hyuk-sool Kwon (clinical co-investigator; Seoul National University Bundang Hospital, SNUBH)
## Dataset Creation Date
@@ -19,7 +44,7 @@ Breast OpenH-RF contains pre-beamformed RF channel-capture data from in-vivo bre
## License / Terms of Use
-**CC BY 4.0** (see [`LICENCE`](LICENCE)).
+[Creative Commons Attribution 4.0 International (CC BY 4.0)](https://creativecommons.org/licenses/by/4.0/legalcode.en). Retain attribution and identify modifications when reusing the data.
## Intended Usage
@@ -37,8 +62,28 @@ Quantitative imaging (sound-speed / attenuation estimation), generalized reconst
- ADC sampling: **62.5 MHz**, exported as float32.
- Transmit: 9-angle plane-wave compounding at **[-15, -10, -5, -2.5, 0, +2.5, +5, +10, +15]°**.
+## Processing the Dataset
+
+The acquisitions can be processed with the `pipeline.yaml` definition in this folder and the [zea library](https://github.com/tue-bmd/zea).
+
+`zea` streams the data from the Hugging Face Hub and processes it according to the pipeline. You can try it out with the following command:
+
+```bash
+zea process \
+ --dataset hf://nvidia/OpenH-RF/kaist-snubh-barreleye/data/S01_D1.hdf5 \
+ --config hf://nvidia/OpenH-RF/kaist-snubh-barreleye/pipeline.yaml \
+ --n-frames 1 \
+ --save-as png
+```
+
+Alternatively, you can use the `reconstruct.py` [script](https://github.com/open-h/OpenH-RF/blob/main/datasets/kaist-snubh-barreleye/reconstruct.py) as provided in the [OpenH-RF GitHub repository](https://github.com/open-h/OpenH-RF).
+
+This is a single-frame acquisition, so `zea process` outputs a `.png` rather than a `.gif` — this requires a `zea` build newer than the currently pinned 0.1.6 (single-frame PNG output landed after that release).
+
## Dataset Format
+[zea v0.1.6](https://github.com/tue-bmd/zea)
+
All data is delivered in the **zea HDF5** format (OpenH-RF spec). One HDF5 file per acquisition; one image track per file.
```
@@ -52,7 +97,6 @@ hdf5/
- **Channel reordering** of the scanner's raw export into the OpenH-RF convention `(n_frames=1, n_tx=9, n_ax=Ns, n_el=192, n_ch=1)`.
- No demodulation, decimation, band-pass filtering, or value clipping — `raw_data` is bit-faithful to the scanner export.
-
## Dataset Quantification
**Current OpenH-RF release:** 70 HDF5 files; 802.10 MB (802,095,104 bytes) stored; root `zea_version` **0.1.6**. Sizes include all HDF5 contents and use decimal units (MB = 10^6 bytes, GB = 10^9 bytes, TB = 10^12 bytes), not decoded-array memory or original-source download sizes.
@@ -91,7 +135,7 @@ Per-acquisition feature table (one row per HDF5):
## Subject Metadata
-Per-file metadata follows the **HIPAA Safe-Harbor** approach: only **de-identified subject ID, sex, anatomy, binary label, BI-RADS, pathology subtype** are stored. Free-text identifiers, exact age, exact lesion size, and exam dates are deliberately **omitted from the HDF5 files**.
+Per-file metadata follows the **HIPAA Safe-Harbor** approach: only **de-identified subject ID, sex, anatomy, binary label, BI-RADS, pathology subtype** are stored. Free-text identifiers, exact age, exact lesion size, and exam dates are deliberately **omitted from the HDF5 files**.
- **Number of subjects:** 35
- **Sex distribution:** 100% female (35/35)
@@ -142,20 +186,15 @@ Plane-wave transmit beamforming is used, with all 192 elements activated on each
## Data Validation
-A reference reconstruction is provided in [`reconstruct.py`](reconstruct.py). It defines the DAS pipeline directly in code (via zea ops) and applies, to the raw RF channel data:
+`reconstruct.py` reconstructs a B-mode from `raw_data` using the `zea.Pipeline` defined in [`pipeline.yaml`](pipeline.yaml):
```
cast(float32) → band-pass filter (1–12 MHz) → demodulate → DAS beamform → envelope detect → normalize → log compression
```
-The 1–12 MHz band-pass rejects a persistent sub-MHz band before coherent beamforming, which allows to produce a clean B-mode directly from the raw RF. Run it to reproduce a reference B-mode from any delivered file:
-
-```bash
-python reconstruct.py --input hdf5/original/S01_D1.hdf5 # single file
-python reconstruct.py --compare S01_D1 # DAS vs. scanner reference B-mode
-```
+The 1–12 MHz band-pass rejects a persistent sub-MHz band before coherent beamforming, which allows it to produce a clean B-mode directly from the raw RF.
-`python reconstruct.py --save-yaml` exports the pipeline as `pipeline.yaml` if a shareable recipe is needed (the script itself does not load it).
+Reference output: `main.png` — `data/S01_D1.hdf5` (biopsy-proven invasive ductal carcinoma), shown above.
## Known Issues
@@ -167,5 +206,5 @@ python reconstruct.py --compare S01_D1 # DAS vs. scanner re
- **Consent status:** All subjects gave informed consent under SNUBH IRB protocol **B-2401-876-301**.
- **De-identification:** No direct identifiers (name, full exam date, free-text clinical notes) are stored. Age is decade-binned at the dataset level (not stored per file); exact lesion size and exam dates are not stored per file; only the acquisition year (2024) is reported. Subject IDs are coded (`S01`…`S35`).
-- **IRB approval:** SNUBH IRB **B-2401-876-301**
+- **IRB approval:** SNUBH IRB **B-2401-876-301**
- **Animal welfare (ARRIVE 2.0):** Not applicable — human-only dataset.
diff --git a/datasets/kaist-snubh-barreleye/assets/main.png b/datasets/kaist-snubh-barreleye/assets/main.png
new file mode 100644
index 0000000..794dd6d
Binary files /dev/null and b/datasets/kaist-snubh-barreleye/assets/main.png differ
diff --git a/datasets/kaist-snubh-barreleye/pipeline.yaml b/datasets/kaist-snubh-barreleye/pipeline.yaml
index dd41858..86f063e 100644
--- a/datasets/kaist-snubh-barreleye/pipeline.yaml
+++ b/datasets/kaist-snubh-barreleye/pipeline.yaml
@@ -1,3 +1,15 @@
+parameters:
+ xlims:
+ - -0.0191
+ - 0.0191
+ zlims:
+ - 0.002
+ - 0.04
+ dynamic_range:
+ - -50
+ - 0
+ apply_lens_correction: false
+ f_number: 1.5
pipeline:
operations:
- name: keras.ops.cast
diff --git a/datasets/kaist-snubh-barreleye/reconstruct.py b/datasets/kaist-snubh-barreleye/reconstruct.py
index 6b8b032..f45a392 100644
--- a/datasets/kaist-snubh-barreleye/reconstruct.py
+++ b/datasets/kaist-snubh-barreleye/reconstruct.py
@@ -4,8 +4,9 @@
Dataset link: https://huggingface.co/datasets/nvidia/OpenH-RF/tree/main/kaist-snubh-barreleye
B-mode reconstruction of 9-angle plane-wave compounded in-vivo breast channel data.
-
-The reconstruction is written as a single B-mode PNG.
+The 1-12 MHz band-pass rejects a persistent sub-MHz band before coherent
+beamforming, which allows the raw RF (n_ch=1) to demodulate and beamform
+cleanly.
Requires zea>=0.1.6 (https://github.com/tue-bmd/zea), the library that does the
ultrasound processing here, together with one of its Keras backends (JAX,
@@ -16,147 +17,60 @@
python reconstruct.py
"""
-from __future__ import annotations
-
import os
os.environ.setdefault("KERAS_BACKEND", "jax")
os.environ.setdefault("MPLBACKEND", "Agg")
-
from pathlib import Path
+import keras
import matplotlib.pyplot as plt
import numpy as np
import zea
-from zea import File, Pipeline
-from zea.ops import (
- BandPassFilter,
- Beamform,
- Cast,
- Demodulate,
- EnvelopeDetect,
- LogCompress,
- Normalize,
-)
-
-_MM = plt.FuncFormatter(lambda v, _: f"{v * 1e3:.0f}")
-_HERE = Path(__file__).resolve().parent
-
-# Imaging grid & display parameters (shared by both representations).
-PARAMETERS = {
- "grid_size_x": 512, # lateral pixels
- "grid_size_z": 768, # axial pixels
- "xlims": [-0.0191, 0.0191], # metres (lateral_length = 3.82 cm)
- "zlims": [0.002, 0.04], # metres — skip first 2 mm dead-zone / TX-pulse residue
- "dynamic_range": [-50, 0],
- "apply_lens_correction": False,
- "f_number": 1.5,
-}
+from zea import Config, File, Pipeline
+
+HERE = Path(__file__).parent
# --- Inputs -----------------------------------------------------------------
# Defaults stream straight from the published corpus. Swap any of these for a
# local path to run against your own copy.
-INPUT = "hf://nvidia/OpenH-RF/kaist-snubh-barreleye/data/S32_D2.hdf5"
-SAVE_YAML = False # write pipeline.yaml / pipeline_simple.yaml from the pipelines below
-OUTPUT = _HERE / "reconstruct.png"
-
-
-def build_pipeline(n_ch: int, filtered: bool = True) -> Pipeline:
- """Pipeline by representation, built directly from zea ops.
-
- Raw RF (n_ch=1) gets band-pass + demodulate; already-demodulated IQ
- (n_ch=2) goes straight to beamforming.
- """
- ops = [Cast(dtype="float32")]
- if n_ch == 1:
- if filtered:
- # The proposed one-op filter, applied to the raw RF before
- # demodulation. Low edge 1 MHz: the filter ablation
- # (evaluation/*.md) shows the entire benefit of the upstream
- # depth-adaptive filter is rejecting a persistent sub-MHz band
- # before coherent beamforming. High edge 12 MHz: passes the full
- # fundamental around fc = 10 MHz (Nyquist = 31.25 MHz). 255 taps
- # keep the ~0.25 MHz transition well-resolved at the 1 MHz edge
- # (fs = 62.5 MHz).
- ops.append(BandPassFilter(passband=(1e6, 12e6), num_taps=255))
- ops.append(Demodulate())
- ops += [
- Beamform(beamformer="delay_and_sum"),
- EnvelopeDetect(),
- Normalize(),
- LogCompress(),
- ]
- return Pipeline(operations=ops)
-
-
-def save_yaml() -> None:
- """Export the code-defined pipeline as a shareable YAML recipe."""
- out = _HERE / "pipeline.yaml"
- build_pipeline(n_ch=1).to_yaml(str(out))
- print(f"Saved : {out}")
-
-
-def reconstruct_file(path: Path, filtered: bool = True) -> dict:
- """Beamform one .hdf5 file. Returns bmode, extent and metadata."""
- with File(str(path)) as f:
+ZEA_FILE = "hf://nvidia/OpenH-RF/kaist-snubh-barreleye/data/S01_D1.hdf5"
+CONFIG = "hf://nvidia/OpenH-RF/kaist-snubh-barreleye/pipeline.yaml"
+OUT = HERE / "assets" / "reconstruction.png"
+
+
+def main():
+ zea.init_device()
+ config = Config.from_path(CONFIG)
+
+ with File(str(ZEA_FILE)) as f:
+ parameters = f.load_parameters(**config.parameters)
raw = f.data.raw_data[:]
- parameters = f.load_parameters(**PARAMETERS)
patient = f.metadata.subject.id
label = f.metadata.annotations.label
- n_ch = raw.shape[-1]
- print(
- f" {Path(path).parent.name}/{Path(path).name}: n_ch={n_ch} ({'RF' if n_ch == 1 else 'IQ'})"
- )
- pipeline = build_pipeline(n_ch, filtered)
+ pipeline = Pipeline.from_config(config)
inputs = pipeline.prepare_parameters(parameters)
- recon = np.array(pipeline(data=raw, **inputs)["data"])
- return {
- "bmode": zea.display.to_8bit(recon[0]),
- "extent": parameters.extent_imshow,
- "patient": patient,
- "label": label,
- "n_ch": n_ch,
- }
-
-
-def _imshow_recon(ax, bmode, extent, title):
- ax.imshow(bmode, cmap="gray", aspect="auto", extent=extent)
- ax.set_title(title)
- ax.set_xlabel("x [mm]")
- ax.set_ylabel("z [mm]")
- ax.xaxis.set_major_formatter(_MM)
- ax.yaxis.set_major_formatter(_MM)
-
-
-def run_single() -> int:
- print(f"Input : {INPUT}")
- zea.init_device()
- r = reconstruct_file(INPUT)
+ outputs = pipeline(data=raw, **inputs)
+ recon = keras.ops.convert_to_numpy(outputs[pipeline.output_key])[0]
- Path(OUTPUT).parent.mkdir(parents=True, exist_ok=True)
zea.visualize.set_mpl_style()
- plt.figure(figsize=(5, 7))
- _imshow_recon(
- plt.gca(),
- r["bmode"],
- r["extent"],
- f"DAS reconstruction — patient {r['patient']} ({r['label']})",
+ fig, ax = plt.subplots(figsize=(5.5, 6))
+ ax.imshow(
+ zea.display.to_8bit(recon, dynamic_range=parameters.dynamic_range),
+ cmap="gray",
+ extent=np.asarray(parameters.extent_imshow) * 1e3,
+ aspect="equal",
)
- plt.tight_layout()
- plt.savefig(str(OUTPUT), dpi=130, bbox_inches="tight")
- plt.close()
- print(f"Saved : {OUTPUT}")
- return 0
-
-
-def main() -> int:
- if SAVE_YAML:
- save_yaml()
- return 0
- return run_single()
+ ax.set_xlabel("lateral [mm]")
+ ax.set_ylabel("depth [mm]")
+ ax.set_title(f"{Path(ZEA_FILE).stem} — patient {patient} ({label})")
+ fig.tight_layout()
+ Path(OUT).parent.mkdir(parents=True, exist_ok=True)
+ fig.savefig(str(OUT), dpi=130, bbox_inches="tight")
+ print(f"raw {raw.shape} -> B-mode {recon.shape}; saved {OUT}")
if __name__ == "__main__":
- raise SystemExit(main())
+ main()
diff --git a/datasets/mosaic-intelligence/README.md b/datasets/mosaic-intelligence/README.md
index 50bb51c..0b0405c 100644
--- a/datasets/mosaic-intelligence/README.md
+++ b/datasets/mosaic-intelligence/README.md
@@ -1,5 +1,6 @@
---
-name: "OpenH-RF — Mosaic Intelligence / NuevoSono IVUS"
+name: mosaic-intelligence
+pretty_name: "Mosaic Intelligence / NuevoSono IVUS"
license: cc-by-4.0
task_categories:
- image-segmentation
@@ -9,38 +10,27 @@ tags:
- openh-rf
- IVUS
- tracked-ultrasound
+language:
+ - en
---
-# Data Card — Mosaic Intelligence / NuevoSono in-vivo IVUS
+# Mosaic Intelligence / NuevoSono In-vivo IVUS
-This data card consists of a collection of in-vivo intravascular ultrasound (IVUS) acquisitions from a porcine study. Each acquisition is saved in the *zea* file format. The general dataset sections below (contributors, license, characterization, etc.) apply to all acquisitions, with individual subsections detailing each dataset's specific dimensions and which optional groups are present.
+
-There are 9 acquisitions in total:
-
-**Group 1: `15_*` acquisitions (untracked, counterclockwise rotation):**
-- `15_10_18_21`
-- `15_10_50_19`
-- `15_16_45_06`
-
-**Group 2: `22_*` acquisitions (tracked, linear encoder pullback, clockwise rotation):**
-- `22_12_10_52`
-- `22_12_29_46`
-- `22_12_38_45`
-- `22_13_10_16`
-- `22_13_56_43`
-- `22_14_29_54`
+*Pullback through [`data/22_12_10_52.hdf5`](https://huggingface.co/datasets/nvidia/OpenH-RF/blob/main/mosaic-intelligence/data/22_12_10_52.hdf5), reconstructed from the raw channel data. Left to right: B-mode, the same frame with the lumen and intima-media segmentation, and the linear-encoder pullback position with the current frame marked.*
## Dataset Description
-Each dataset is an IVUS acquisition collected in a porcine animal study. The source data consists of raw IVUS RF frames and a pre-computed (scan-converted) B-mode image. Six of the acquisitions have time-sampled linear encoder pullback positions of the IVUS probe at each frame. For each acquisition and for every frame, per-class segmentation masks are provided for the vessel lumen, intima-media, and guidewire.
+Nine in-vivo intravascular ultrasound (IVUS) acquisitions from a porcine study, each in the *zea* file format with per-frame lumen, intima-media and guidewire segmentation. Per-acquisition dimensions are in [Acquisitions](#acquisitions).
-## Dataset Contributors
+Each dataset is an IVUS acquisition collected in a porcine animal study. The source data consists of raw IVUS RF frames and a pre-computed (scan-converted) B-mode image. Six of the acquisitions have time-sampled linear encoder pullback positions of the IVUS probe at each frame. For each acquisition and for every frame, per-class segmentation masks are provided for the vessel lumen, intima-media, and guidewire.
-Mosaic Intelligence Labs in collaboration with NuevoSono
+## Dataset Contributor(s)
-Primary points of contact:
-Brian Boitnott (1): brian@mosaicintelligence.xyz
-Ali Mackanic (1): ali@mosaicintelligence.xyz
+- Brian Boitnott (Mosaic Intelligence Labs; primary point of contact)
+- Ali Mackanic (Mosaic Intelligence Labs; primary point of contact)
+- Mosaic Intelligence Labs, in collaboration with NuevoSono
## Dataset Creation Date
@@ -48,31 +38,31 @@ Ali Mackanic (1): ali@mosaicintelligence.xyz
## License / Terms of Use
-All contributed data, labels, and metadata is released by Mosaic Intelligence Labs
-and NuevoSono under CC BY 4.0.
-Pre-existing hardware, software, simulation, and platform intellectual property
-remain the property of their respective owners. The team agrees to comply with
-OpenH-RF governance, publication, and data-sharing policies. The license is also
-recorded in each file's `metadata/credit` field.
+[Creative Commons Attribution 4.0 International (CC BY 4.0)](https://creativecommons.org/licenses/by/4.0/legalcode.en). Retain attribution and identify modifications when reusing the data.
## Intended Usage
-Intended for IVUS tracking and segmentation applications, including lesion
-detection and image-guided intervention.
+Intended for IVUS tracking and segmentation applications, including lesion detection and image-guided intervention.
## Dataset Characterization
- **Data Collection Method:** Porcine (in-vivo animal study)
- **Labeling Method:** derived tracking metadata, semi-automated labeling
-- **Acquisition System:** Single-element IVUS, center frequency 30 MHz,
- sampling rate 1 GHz
+- **Acquisition System:** Single-element IVUS, center frequency 30 MHz, sampling rate 1 GHz
+
+## Processing the Dataset
+
+The acquisitions can be processed with the `reconstruct.py` [script](https://github.com/open-h/OpenH-RF/blob/main/datasets/mosaic-intelligence/reconstruct.py) as provided in the [OpenH-RF GitHub repository](https://github.com/open-h/OpenH-RF), together with the `pipeline.yaml` definition in this folder and the [zea library](https://github.com/tue-bmd/zea). The script streams the data from the Hugging Face Hub.
+
+The script overlays the segmentation masks on frames spread evenly across the pullback:
+
+
## Dataset Format
-All acquisitions are submitted in the *zea* file format. The RF data is stored as
-a rotational sequence of A-lines (`n_tx` transmits per frame, one element/channel);
-the accompanying B-mode `image` and `segmentation` masks are pre-computed,
-scan-converted Cartesian frames sharing a per-pixel coordinate grid.
+[zea v0.1.6](https://github.com/tue-bmd/zea)
+
+All acquisitions are submitted in the *zea* file format. The RF data is stored as a rotational sequence of A-lines (`n_tx` transmits per frame, one element/channel); the accompanying B-mode `image` and `segmentation` masks are pre-computed, scan-converted Cartesian frames sharing a per-pixel coordinate grid.
### Shared per-sample schema
@@ -97,111 +87,29 @@ Fields that are in every acquisition:
| `metadata/rotation/{samples, sampling_frequency, start_time_offset}` | `[1]` / scalar / scalar | float32 | — / Hz / s | Transducer rotation: `samples = +1` clockwise, `-1` counterclockwise |
| `metadata/pullback_position/{samples, sampling_frequency, start_time_offset}` | `[n_frames]` / scalar / scalar | float32 | m / Hz / s | Linear encoder pullback position per frame (**tracked acquisitions only**) |
-## Per-dataset details
-
-One data card per contributed sub-dataset. All fields follow the shared schema above. `n_ax = 8192`, `n_el = 1`, and `n_labels = 4` (`background`, `lumen`,
-`intima_media`, `guidewire`) for every acquisition.
-
-### `15_10_18_21` (untracked, counterclockwise)
-
-- Dimensions: `n_frames = 100`, `n_tx = 540`, `H = 985`, `W = 986`
-- Frame rate: ~3.33 Hz
-- Rotation: `metadata/rotation/samples = -1` (counterclockwise); `metadata/text_report = "Transducer rotation direction: counterclockwise."`
-- Tracking: **none** — no `metadata/pullback_position` group (source has no `frameAttributes.txt`)
-- **Stored HDF5 size:** 1.46 GB (1,456,209,920 bytes).
-- Note: the image/mask grid is non-square (`985 x 986`)
-
-
-
-### `15_10_50_19` (untracked, counterclockwise)
-
-- Dimensions: `n_frames = 60`, `n_tx = 360`, `H = 985`, `W = 986`
-- Frame rate: ~3.33 Hz
-- Rotation: `metadata/rotation/samples = -1` (counterclockwise)
-- Tracking: **none** — no `metadata/pullback_position` group
-- **Stored HDF5 size:** 592.12 MB (592,117,760 bytes).
-- Note: the image/mask grid is non-square (`985 x 986`)
-
-
-
-### `15_16_45_06` (untracked, counterclockwise)
-
-- Dimensions: `n_frames = 100`, `n_tx = 540`, `H = 985`, `W = 986`
-- Frame rate: ~3.33 Hz
-- Rotation: `metadata/rotation/samples = -1` (counterclockwise)
-- Tracking: **none** — no `metadata/pullback_position` group
-- **Stored HDF5 size:** 1.46 GB (1,456,275,456 bytes).
-- Note: the image/mask grid is non-square (`985 x 986`)
+## Acquisitions
-
+Nine acquisitions sharing the schema above: `n_ax = 8192`, `n_el = 1`, and four segmentation labels (`background`, `lumen`, `intima_media`, `guidewire`). The `15_*` acquisitions are untracked, rotate counterclockwise and use a non-square image grid; the `22_*` are tracked with a linear-encoder pullback and rotate clockwise.
-### `22_12_10_52` (tracked, clockwise)
-
-- Dimensions: `n_frames = 150`, `n_tx = 540`, `H = W = 2048`
-- Frame rate: ~3.33 Hz
-- Rotation: `metadata/rotation/samples = +1` (clockwise)
-- Tracking: includes `metadata/pullback_position` `[150]` (linear encoder position per frame)
-- **Stored HDF5 size:** 2.36 GB (2,356,936,704 bytes).
-
-
-
-### `22_12_29_46` (tracked, clockwise)
-
-- Dimensions: `n_frames = 100`, `n_tx = 540`, `H = W = 2048`
-- Frame rate: ~8.33 Hz
-- Rotation: `metadata/rotation/samples = +1` (clockwise)
-- Tracking: includes `metadata/pullback_position` `[100]`
-- **Stored HDF5 size:** 1.60 GB (1,602,945,024 bytes).
-
-
-
-### `22_12_38_45` (tracked, clockwise)
-
-- Dimensions: `n_frames = 150`, `n_tx = 360`, `H = W = 2048`
-- Frame rate: ~8.33 Hz
-- Rotation: `metadata/rotation/samples = +1` (clockwise)
-- Tracking: includes `metadata/pullback_position` `[150]`
-- **Stored HDF5 size:** 1.58 GB (1,576,337,408 bytes).
-
-
-
-### `22_13_10_16` (tracked, clockwise)
-
-- Dimensions: `n_frames = 100`, `n_tx = 540`, `H = W = 2048`
-- Frame rate: ~8.33 Hz
-- Rotation: `metadata/rotation/samples = +1` (clockwise)
-- Tracking: includes `metadata/pullback_position` `[100]`
-- **Stored HDF5 size:** 1.54 GB (1,535,311,872 bytes).
-
-
-
-### `22_13_56_43` (tracked, clockwise)
-
-- Dimensions: `n_frames = 100`, `n_tx = 540`, `H = W = 2048`
-- Frame rate: ~8.33 Hz
-- Rotation: `metadata/rotation/samples = +1` (clockwise)
-- Tracking: includes `metadata/pullback_position` `[100]`
-- **Stored HDF5 size:** 1.53 GB (1,527,119,872 bytes).
-
-
-
-### `22_14_29_54` (tracked, clockwise)
-
-- Dimensions: `n_frames = 150`, `n_tx = 360`, `H = W = 2048`
-- Frame rate: ~3.33 Hz
-- Rotation: `metadata/rotation/samples = +1` (clockwise); `metadata/text_report = "Transducer rotation direction: clockwise."`
-- Tracking: includes `metadata/pullback_position` `[150]`
-- **Stored HDF5 size:** 1.65 GB (1,653,080,064 bytes).
-
-
+| Acquisition | Tracked | Frames | Transmits | Image grid | Frame rate | Size |
+|---|---|---:|---:|---|---:|---:|
+| `15_10_18_21` | no | 100 | 540 | 985x986 | 3.33 Hz | 1.46 GB |
+| `15_10_50_19` | no | 60 | 360 | 985x986 | 3.33 Hz | 592.12 MB |
+| `15_16_45_06` | no | 100 | 540 | 985x986 | 3.33 Hz | 1.46 GB |
+| `22_12_10_52` | yes | 150 | 540 | 2048x2048 | 3.33 Hz | 2.36 GB |
+| `22_12_29_46` | yes | 100 | 540 | 2048x2048 | 8.33 Hz | 1.60 GB |
+| `22_12_38_45` | yes | 150 | 360 | 2048x2048 | 8.33 Hz | 1.58 GB |
+| `22_13_10_16` | yes | 100 | 540 | 2048x2048 | 8.33 Hz | 1.54 GB |
+| `22_13_56_43` | yes | 100 | 540 | 2048x2048 | 8.33 Hz | 1.53 GB |
+| `22_14_29_54` | yes | 150 | 360 | 2048x2048 | 3.33 Hz | 1.65 GB |
## Dataset Quantification
-**Current OpenH-RF release:** 9 HDF5 files; 13.76 GB (13,756,334,080 bytes) stored; root `zea_version` **0.1.6**. Sizes include all HDF5 contents and use decimal units (MB = 10^6 bytes, GB = 10^9 bytes, TB = 10^12 bytes), not decoded-array memory or original-source download sizes.
+9 HDF5 files; 13.76 GB (13,756,334,080 bytes) stored; root `zea_version` **0.1.6**. Sizes include all HDF5 contents and use decimal units (MB = 10^6 bytes, GB = 10^9 bytes, TB = 10^12 bytes), not decoded-array memory or original-source download sizes.
- Acquisitions: 9 (3 untracked `15_*`, 6 tracked `22_*`)
- Frames per acquisition: 60–150 (1010 frames total across all acquisitions)
-- Frame rate: ~3.33 Hz or ~8.33 Hz depending on acquisition (see per-dataset table)
+- Frame rate: ~3.33 Hz or ~8.33 Hz depending on acquisition (see the table above)
- Train / validation / test split: N/A
- **Stored HDF5 size:** 13.76 GB (13,756,334,080 bytes).
@@ -223,17 +131,14 @@ Animal study data — no human subjects.
## Data Validation
-A `zea.Pipeline` reconstructs the IVUS B-mode from the raw channel data
-(RF → envelope → normalization → log compression → scan conversion). See
-[reconstruct.py](../reconstruct.py) and [pipeline.yaml](../pipeline.yaml). Linear encoder position (when applicable) and segmentation masks are overlayed on the B-modes.
+A `zea.Pipeline` reconstructs the IVUS B-mode from the raw channel data (RF → envelope → normalization → log compression → scan conversion), as defined in `pipeline.yaml` and run by `reconstruct.py`. Linear encoder position (when applicable) and segmentation masks are overlayed on the B-modes.
## Known Issues
-- Untracked (`15_*`) acquisitions have no `pullback_position`, so the pullback
- trajectory panel is omitted during reconstruction.
+- Untracked (`15_*`) acquisitions have no `pullback_position`, so the pullback trajectory panel is omitted during reconstruction.
## Ethical Considerations
-Porcine animal study data only; contains no human subjects or PHI. Collected and
-released in compliance with applicable institutional animal care approvals and
-OpenH-RF governance and data-sharing policies.
+Porcine animal study data only; contains no human subjects or PHI. Collected and released in compliance with applicable institutional animal care approvals and OpenH-RF governance and data-sharing policies.
+
+All contributed data, labels and metadata are released by Mosaic Intelligence Labs and NuevoSono; pre-existing hardware, software, simulation and platform intellectual property remains the property of the respective owners. The license is also recorded in each file's `metadata/credit` field.
diff --git a/datasets/mosaic-intelligence/assets/15_10_18_21/overview_5_frames.png b/datasets/mosaic-intelligence/assets/15_10_18_21/overview_5_frames.png
new file mode 100644
index 0000000..d0ae5f0
Binary files /dev/null and b/datasets/mosaic-intelligence/assets/15_10_18_21/overview_5_frames.png differ
diff --git a/datasets/mosaic-intelligence/assets/15_10_50_19/overview_5_frames.png b/datasets/mosaic-intelligence/assets/15_10_50_19/overview_5_frames.png
new file mode 100644
index 0000000..1a6690d
Binary files /dev/null and b/datasets/mosaic-intelligence/assets/15_10_50_19/overview_5_frames.png differ
diff --git a/datasets/mosaic-intelligence/assets/15_16_45_06/overview_5_frames.png b/datasets/mosaic-intelligence/assets/15_16_45_06/overview_5_frames.png
new file mode 100644
index 0000000..1414fd0
Binary files /dev/null and b/datasets/mosaic-intelligence/assets/15_16_45_06/overview_5_frames.png differ
diff --git a/datasets/mosaic-intelligence/assets/22_12_10_52/overview_5_frames.png b/datasets/mosaic-intelligence/assets/22_12_10_52/overview_5_frames.png
new file mode 100644
index 0000000..80fc654
Binary files /dev/null and b/datasets/mosaic-intelligence/assets/22_12_10_52/overview_5_frames.png differ
diff --git a/datasets/mosaic-intelligence/assets/22_12_29_46/overview_5_frames.png b/datasets/mosaic-intelligence/assets/22_12_29_46/overview_5_frames.png
new file mode 100644
index 0000000..5ca5312
Binary files /dev/null and b/datasets/mosaic-intelligence/assets/22_12_29_46/overview_5_frames.png differ
diff --git a/datasets/mosaic-intelligence/assets/22_12_38_45/overview_5_frames.png b/datasets/mosaic-intelligence/assets/22_12_38_45/overview_5_frames.png
new file mode 100644
index 0000000..fda0124
Binary files /dev/null and b/datasets/mosaic-intelligence/assets/22_12_38_45/overview_5_frames.png differ
diff --git a/datasets/mosaic-intelligence/assets/22_13_10_16/overview_5_frames.png b/datasets/mosaic-intelligence/assets/22_13_10_16/overview_5_frames.png
new file mode 100644
index 0000000..b4ea13a
Binary files /dev/null and b/datasets/mosaic-intelligence/assets/22_13_10_16/overview_5_frames.png differ
diff --git a/datasets/mosaic-intelligence/assets/22_13_56_43/overview_5_frames.png b/datasets/mosaic-intelligence/assets/22_13_56_43/overview_5_frames.png
new file mode 100644
index 0000000..32da49e
Binary files /dev/null and b/datasets/mosaic-intelligence/assets/22_13_56_43/overview_5_frames.png differ
diff --git a/datasets/mosaic-intelligence/assets/22_14_29_54/overview_5_frames.png b/datasets/mosaic-intelligence/assets/22_14_29_54/overview_5_frames.png
new file mode 100644
index 0000000..4f8e6d2
Binary files /dev/null and b/datasets/mosaic-intelligence/assets/22_14_29_54/overview_5_frames.png differ
diff --git a/datasets/mosaic-intelligence/assets/main.png b/datasets/mosaic-intelligence/assets/main.png
new file mode 100644
index 0000000..0c9cef3
Binary files /dev/null and b/datasets/mosaic-intelligence/assets/main.png differ
diff --git a/datasets/mosaic-intelligence/assets/pullback.gif b/datasets/mosaic-intelligence/assets/pullback.gif
new file mode 100644
index 0000000..d1746a9
Binary files /dev/null and b/datasets/mosaic-intelligence/assets/pullback.gif differ
diff --git a/datasets/mosaic-intelligence/reconstruct.py b/datasets/mosaic-intelligence/reconstruct.py
index 48bc9ee..6ea71d0 100644
--- a/datasets/mosaic-intelligence/reconstruct.py
+++ b/datasets/mosaic-intelligence/reconstruct.py
@@ -39,7 +39,6 @@
from zea.ops import Downsample
HERE = Path(__file__).resolve().parent
-DEFAULT_PIPELINE = HERE / "pipeline.yaml"
OUTPUT_PX = None # reconstruction side length; None -> derive from segmentation mask dims
@@ -56,11 +55,11 @@
# --- Inputs -----------------------------------------------------------------
# Defaults stream straight from the published corpus. Swap any of these for a
# local path to run against your own copy.
-INPUT = "hf://nvidia/OpenH-RF/mosaic-intelligence/data/15_10_50_19.hdf5"
-PIPELINE = "hf://nvidia/OpenH-RF/mosaic-intelligence/pipeline.yaml"
+ZEA_FILE = "hf://nvidia/OpenH-RF/mosaic-intelligence/data/22_12_10_52.hdf5"
+CONFIG = "hf://nvidia/OpenH-RF/mosaic-intelligence/pipeline.yaml"
NUM_FRAMES = 5 # Number of frames to overlay, spaced evenly across the pullback
FRAMES = None # Explicit frame indices to overlay (overrides NUM_FRAMES)
-OUTPUT = None
+OUT = None
BANDWIDTH = 30e6
DYNAMIC_RANGE = (-43.0, -0.0)
SIZE = OUTPUT_PX # Square canvas side length (px) for the reconstruction
@@ -203,10 +202,10 @@ def render_overview(panels, frames, labels, position_mm, frame_rate_hz, alpha, o
def main():
zea.init_device()
- pipeline = zea.Pipeline.from_path(str(PIPELINE))
+ pipeline = zea.Pipeline.from_path(str(CONFIG))
print(f"Pipeline: {pipeline}")
- with zea.File(str(INPUT)) as f:
+ with zea.File(str(ZEA_FILE)) as f:
parameters = f.load_parameters()
n_frames = int(f.data.raw_data.shape[0])
frames = select_frames(n_frames, FRAMES, NUM_FRAMES)
@@ -280,7 +279,7 @@ def main():
)
panels.append((frame, recon_gray, mask))
- output = OUTPUT or (HERE / "outputs" / Path(INPUT).stem / f"overview_{len(frames)}_frames.png")
+ output = OUT or (HERE / "assets" / Path(ZEA_FILE).stem / f"overview_{len(frames)}_frames.png")
render_overview(panels, frames, labels, position_mm, frame_rate_hz, ALPHA, output)
diff --git a/datasets/nv-raw2insights-us/README.md b/datasets/nv-raw2insights-us/README.md
index 1e02e03..549d6be 100644
--- a/datasets/nv-raw2insights-us/README.md
+++ b/datasets/nv-raw2insights-us/README.md
@@ -1,5 +1,6 @@
---
-pretty_name: "OpenH-RF — NV-Raw2Insights-US (simulated FSA, sound-speed / aberration / segmentation)"
+name: nv-raw2insights-us
+pretty_name: "NV-Raw2Insights-US (simulated FSA, sound-speed / aberration / segmentation)"
license: cc-by-4.0
task_categories:
- other
@@ -21,28 +22,23 @@ size_categories:
# NV-Raw2Insights-US — Simulated FSA Channel Data with Sound-Speed, Aberration, and Segmentation Ground Truth
+
+
+*DBUA results using synthetic validation sample [`data/nv_r2i_us_validation_0084.hdf5`](https://huggingface.co/datasets/nvidia/OpenH-RF/blob/main/nv-raw2insights-us/data/nv_r2i_us_validation_0084.hdf5): B-mode (left) and estimated sound speed (right). Bulk-speed calibration is followed by 400 spatial-refinement iterations, with fixed display scales. These are DBUA reconstructions, not predictions from an NV-Raw2Insights-US model.*
+
+
+
## Dataset Description
-NV-Raw2Insights-US is a **simulated full-synthetic-aperture (FSA)** ultrasound
-dataset for training and evaluating neural networks on **sound-speed
-estimation**, **phase-aberration correction**, **tissue segmentation**, and
-**learned image reconstruction** from raw pre-beamformed channel data.
+NV-Raw2Insights-US is a **simulated full-synthetic-aperture (FSA)** ultrasound dataset for training and evaluating neural networks on **sound-speed estimation**, **phase-aberration correction**, **tissue segmentation**, and **learned image reconstruction** from raw pre-beamformed channel data.
-Each sample is a single-frame FSA acquisition from a **180-element linear
-array** simulated with **k-Wave** over a heterogeneous tissue phantom
-containing cysts. Every acquisition provides raw baseband **IQ channel data**
-alongside co-registered ground truth: a **speed-of-sound map**, a **binary cyst
-segmentation mask**, a **DAS B-mode** and a **focused-transmit B-mode**, and a
-per-sample **phase-aberration** value. All data are **synthetic**; no human or
-animal subjects are involved.
+Each sample is a single-frame FSA acquisition from a **180-element linear array** simulated with **k-Wave** over a heterogeneous tissue phantom containing cysts. Every acquisition provides raw baseband **IQ channel data** alongside co-registered ground truth: a **speed-of-sound map**, a **binary cyst segmentation mask**, a **DAS B-mode** and a **focused-transmit B-mode**, and a per-sample **phase-aberration** value. All data are **synthetic**; no human or animal subjects are involved.
-This is the **zea-format (OpenH-RF) release**; the same simulations are also
-published in a Hugging Face `datasets`/Arrow build at
-[`nvidia/NV-Raw2Insights-US`](https://huggingface.co/datasets/nvidia/NV-Raw2Insights-US).
+This is the **zea-format (OpenH-RF) release**; the same simulations are also published in a Hugging Face `datasets`/Arrow build at [`nvidia/NV-Raw2Insights-US`](https://huggingface.co/datasets/nvidia/NV-Raw2Insights-US).
## Dataset Contributor(s)
-NVIDIA Corporation.
+- NVIDIA Corporation
## Dataset Creation Date
@@ -50,33 +46,27 @@ NVIDIA Corporation.
## License / Terms of Use
-[Creative Commons Attribution 4.0 International (CC BY 4.0)](https://creativecommons.org/licenses/by/4.0/legalcode.en).
-Retain attribution and identify modifications when reusing the data.
+[Creative Commons Attribution 4.0 International (CC BY 4.0)](https://creativecommons.org/licenses/by/4.0/legalcode.en). Retain attribution and identify modifications when reusing the data.
## Intended Usage
-Developing and benchmarking methods that operate on raw ultrasound channel data:
-learned/adaptive beamforming, sound-speed estimation, phase-aberration
-correction, and tissue segmentation. Because the sound-speed map, segmentation
-mask, and aberration value are exact simulation ground truth, the dataset
-supports fully-supervised training of channel-data-to-insight models.
+Developing and benchmarking methods that operate on raw ultrasound channel data: learned/adaptive beamforming, sound-speed estimation, phase-aberration correction, and tissue segmentation. Because the sound-speed map, segmentation mask, and aberration value are exact simulation ground truth, the dataset supports fully-supervised training of channel-data-to-insight models.
## Dataset Characterization
-- **Data Collection Method:** Synthetic — k-Wave acoustic simulation of a
- 180-element linear array over heterogeneous tissue phantoms with cysts.
-- **Labeling Method:** Synthetic — ground truth taken directly from the
- simulation parameters (sound-speed map, cyst segmentation, aberration).
-- **Acquisition model:** Full synthetic aperture (multi-static) — 180
- single-element transmit events per frame, all 180 elements received;
- transmit centre frequency 6.5 MHz, baseband IQ sampled at 13.3 MHz,
- background sound speed 1540 m/s.
+- **Data Collection Method:** Synthetic — k-Wave acoustic simulation of a 180-element linear array over heterogeneous tissue phantoms with cysts.
+- **Labeling Method:** Synthetic — ground truth taken directly from the simulation parameters (sound-speed map, cyst segmentation, aberration).
+- **Acquisition model:** Full synthetic aperture (multi-static) — 180 single-element transmit events per frame, all 180 elements received; transmit centre frequency 6.5 MHz, baseband IQ sampled at 13.3 MHz, background sound speed 1540 m/s.
+
+## Processing the Dataset
+
+The acquisitions can be processed with the `reconstruct.py` [script](https://github.com/open-h/OpenH-RF/blob/main/datasets/nv-raw2insights-us/reconstruct.py) as provided in the [OpenH-RF GitHub repository](https://github.com/open-h/OpenH-RF), which uses the [zea library](https://github.com/tue-bmd/zea) and streams the data from the Hugging Face Hub. It reconstructs both a plain DAS B-mode (the `pipeline.yaml` in this folder) and a sound-speed-corrected B-mode using the ground-truth `sos_map`.
## Dataset Format
-Packaged in the **zea** file format (`zea_version` 0.1.6), **one HDF5 file per
-sample**, all under `data/`. The train/validation split is encoded in each
-filename (`nv_r2i_us_train_XXXX.hdf5`, `nv_r2i_us_validation_XXXX.hdf5`).
+[zea v0.1.6](https://github.com/tue-bmd/zea)
+
+Packaged in the **zea** file format (`zea_version` 0.1.6), **one HDF5 file per sample**, all under `data/`. The train/validation split is encoded in each filename (`nv_r2i_us_train_XXXX.hdf5`, `nv_r2i_us_validation_XXXX.hdf5`).
Per-file contents:
@@ -99,45 +89,33 @@ Per-file contents:
**Current OpenH-RF release:** 923 HDF5 files; 214.13 GB (214,133,178,368 bytes) stored; root `zea_version` **0.1.6**. Sizes include all HDF5 contents and use decimal units (MB = 10^6 bytes, GB = 10^9 bytes, TB = 10^12 bytes), not decoded-array memory or original-source download sizes.
-- **923 samples (830 train / 93 validation)**, one HDF5 per sample, all in
- `data/`; the split is carried in the filename.
+- **923 samples (830 train / 93 validation)**, one HDF5 per sample, all in `data/`; the split is carried in the filename.
- Each sample is a single-frame FSA acquisition (frame index always 0).
## Subject Metadata
-- **Synthetic only** — no human or animal subjects. Each sample is a k-Wave
- simulation over a digital tissue phantom containing cysts.
+- **Synthetic only** — no human or animal subjects. Each sample is a k-Wave simulation over a digital tissue phantom containing cysts.
- No PHI; `subject/type` is a simulation label, not a patient identifier.
## Data Validation
-Each file's `tracks/track_0/data/image` is a DAS B-mode reconstructed from
-`raw_data` by the zea pipeline (see `pipeline.yaml`), so the reconstruction is
-reproducible from the raw channel data and the recorded transmit description.
+Each file's `tracks/track_0/data/image` is a DAS B-mode reconstructed from `raw_data` by the zea pipeline (see `pipeline.yaml`), so the reconstruction is reproducible from the raw channel data and the recorded transmit description.
## Known Issues
-- `sos_map` is a coarse `32 × 32` grid while the B-mode and segmentation are on
- the fine `507 × 456` grid; each carries its own `coordinates` for alignment.
-- Cysts that touch the edge of the B-mode frame are not included in the
- segmentation mask.
-- Some regions of gross reverberation artifact can be incorrectly segmented as
- cysts.
+- `sos_map` is a coarse `32 × 32` grid while the B-mode and segmentation are on the fine `507 × 456` grid; each carries its own `coordinates` for alignment.
+- Cysts that touch the edge of the B-mode frame are not included in the segmentation mask.
+- Some regions of gross reverberation artifact can be incorrectly segmented as cysts.
## Ethical Considerations
-The data are entirely synthetic (k-Wave simulation of digital phantoms). There
-are no human participants, animal subjects, patient identifiers, or protected
-health information. Released under CC BY 4.0 for research and technical
-evaluation, not clinical decision-making.
+The data are entirely synthetic (k-Wave simulation of digital phantoms). There are no human participants, animal subjects, patient identifiers, or protected health information. Released under CC BY 4.0 for research and technical evaluation, not clinical decision-making.
## Source Dataset & Citation
-This is the **zea-format conversion** of the original **NV-Raw2Insights-US**
-dataset published by NVIDIA on Hugging Face:
+This is the **zea-format conversion** of the original **NV-Raw2Insights-US** dataset published by NVIDIA on Hugging Face:
. The raw
-simulations, ground-truth labels, and normalization statistics originate there;
-please cite the original dataset:
+simulations, ground-truth labels, and normalization statistics originate there; please cite the original dataset:
```bibtex
@misc{nv_raw2insights_us_2026,
diff --git a/datasets/nv-raw2insights-us/assets/dbua-reconstruction.gif b/datasets/nv-raw2insights-us/assets/dbua-reconstruction.gif
new file mode 100644
index 0000000..351a735
Binary files /dev/null and b/datasets/nv-raw2insights-us/assets/dbua-reconstruction.gif differ
diff --git a/datasets/nv-raw2insights-us/assets/main.png b/datasets/nv-raw2insights-us/assets/main.png
new file mode 100644
index 0000000..8931711
Binary files /dev/null and b/datasets/nv-raw2insights-us/assets/main.png differ
diff --git a/datasets/nv-raw2insights-us/assets/main_uncorrect.png b/datasets/nv-raw2insights-us/assets/main_uncorrect.png
new file mode 100644
index 0000000..18935d6
Binary files /dev/null and b/datasets/nv-raw2insights-us/assets/main_uncorrect.png differ
diff --git a/datasets/nv-raw2insights-us/assets/nv_raw2insights_us_reconstructed.png b/datasets/nv-raw2insights-us/assets/nv_raw2insights_us_reconstructed.png
new file mode 100644
index 0000000..a356643
Binary files /dev/null and b/datasets/nv-raw2insights-us/assets/nv_raw2insights_us_reconstructed.png differ
diff --git a/datasets/nv-raw2insights-us/pipeline.yaml b/datasets/nv-raw2insights-us/pipeline.yaml
new file mode 100644
index 0000000..e471e37
--- /dev/null
+++ b/datasets/nv-raw2insights-us/pipeline.yaml
@@ -0,0 +1,23 @@
+# Reconstruction pipeline recipe for the NV-Raw2Insights-US example.
+#
+# This file is written by reconstruct.py (pipeline.to_yaml) as a shareable
+# artifact; the pipeline is defined in code, then saved here and loaded back
+# in, so this file is provably what reconstruct.py actually runs. It records
+# the DAS -> envelope -> normalize -> log-compress operation chain; the
+# acquisition/grid parameters are derived from the data file at run time, not
+# stored here.
+#
+# This is the plain DAS recipe, without sound-speed (aberration) correction.
+# reconstruct.py's SoS-corrected panel runs this same pipeline a second time,
+# passing sos_map/sos_grid_x/sos_grid_z to the "beamform" op at call time.
+
+pipeline:
+ operations:
+ - name: beamform
+ - envelope_detect
+ - name: normalize
+ params:
+ output_range:
+ - 0.0
+ - 1.0
+ - log_compress
diff --git a/datasets/nv-raw2insights-us/reconstruct.py b/datasets/nv-raw2insights-us/reconstruct.py
index 2199b55..53817f7 100644
--- a/datasets/nv-raw2insights-us/reconstruct.py
+++ b/datasets/nv-raw2insights-us/reconstruct.py
@@ -9,7 +9,10 @@
against it directly. The figure puts seven panels side by side: IQ energy, the
stored DAS B-mode, the focused-transmit B-mode, the zea reconstruction, a
sound-speed-corrected zea reconstruction, the ground-truth speed-of-sound map
-and the segmentation.
+and the segmentation. The DAS -> envelope -> normalize -> log-compress pipeline
+is defined in code and saved to pipeline.yaml as a shareable recipe; it is the
+plain, non-SoS-corrected reconstruction. The SoS-corrected panel reruns the
+same pipeline with sos_map/sos_grid_x/sos_grid_z supplied at call time.
Requires zea>=0.1.6 (https://github.com/tue-bmd/zea), the library that does the
ultrasound processing here, together with one of its Keras backends (JAX,
@@ -36,8 +39,9 @@
# --- Inputs -----------------------------------------------------------------
# Defaults stream straight from the published corpus. Swap any of these for a
# local path to run against your own copy.
-ZEA_FILE = "hf://nvidia/OpenH-RF/nv-raw2insights-us/data/nv_r2i_us_train_0000.hdf5"
-OUTPUT = HERE / "nv_raw2insights_us_reconstructed.png"
+ZEA_FILE = "hf://nvidia/OpenH-RF/nv-raw2insights-us/data/nv_r2i_us_validation_0084.hdf5"
+OUT = HERE / "assets" / "nv_raw2insights_us_reconstructed.png"
+CONFIG = HERE / "pipeline.yaml"
def coords_to_imshow_mm(coords):
@@ -48,6 +52,18 @@ def coords_to_imshow_mm(coords):
return [x.min(), x.max(), z.max(), z.min()]
+def build_pipeline() -> "zea.Pipeline":
+ """Define the DAS beamforming pipeline in code (no SoS correction)."""
+ return zea.Pipeline(
+ operations=[
+ Beamform(beamformer="delay_and_sum"),
+ EnvelopeDetect(),
+ Normalize(),
+ LogCompress(),
+ ]
+ )
+
+
def main():
zea.init_device()
@@ -67,14 +83,10 @@ def main():
print(f"raw_data: {raw.shape}")
- pipeline = zea.Pipeline(
- operations=[
- Beamform(beamformer="delay_and_sum"),
- EnvelopeDetect(),
- Normalize(),
- LogCompress(),
- ]
- )
+ build_pipeline().to_yaml(str(CONFIG))
+ config = zea.Config.from_path(str(CONFIG))
+ pipeline = zea.Pipeline.from_config(config)
+
params = pipeline.prepare_parameters(parameters)
outputs = pipeline(**{pipeline.key: raw}, **params)
recon = keras.ops.convert_to_numpy(outputs[pipeline.output_key])[0]
@@ -172,8 +184,9 @@ def main():
fig.suptitle(f"openh-rf sample (phase error: {phase_err[0]:.2f} rad)", fontsize=14, y=1.02)
plt.tight_layout()
- plt.savefig(OUTPUT, dpi=150, bbox_inches="tight")
- print(f"Saved {OUTPUT}")
+ Path(OUT).parent.mkdir(parents=True, exist_ok=True)
+ plt.savefig(OUT, dpi=150, bbox_inches="tight")
+ print(f"Saved {OUT}")
if __name__ == "__main__":
diff --git a/datasets/oslo/A_cardiac/README.md b/datasets/oslo/A_cardiac/README.md
index a98aef5..86348d2 100644
--- a/datasets/oslo/A_cardiac/README.md
+++ b/datasets/oslo/A_cardiac/README.md
@@ -1,4 +1,5 @@
---
+name: oslo-a-cardiac
pretty_name: "USTB - In-vivo Cardiac (Verasonics P4-2)"
license: cc-by-4.0
task_categories:
@@ -17,18 +18,23 @@ size_categories:
# USTB - In-vivo Cardiac (Verasonics P4-2)
-Part of the **UltraSound ToolBox (USTB) Channel Capture Collection** contributed to the
-[OpenH-RF](https://github.com/open-h/OpenH-RF) initiative. All acquisitions are stored in the
-*zea* HDF5 file format (zea_version 0.1.6) and contain raw pre-beamformed
-channel data (`/data/raw_data`).
+
+
+*All 50 frames of [`Verasonics_P2-4_parasternal_long_subject_1.hdf5`](https://huggingface.co/datasets/nvidia/OpenH-RF/blob/main/oslo/A_cardiac/Verasonics_P2-4_parasternal_long_subject_1.hdf5), reconstructed from the raw channel data with `reconstruct.py`.*
## Dataset Description
+Part of the **UltraSound ToolBox (USTB) Channel Capture Collection** (see the [collection card](../README.md)).
+
In-vivo human cardiac channel-capture data acquired with a Verasonics Vantage 256 research scanner and a P4-2 phased-array probe. The collection contains parasternal long-axis and apical four-chamber views recorded with focused transmit beams (sector scan). The data is pre-beamformed RF channel data intended for research into generalized beamforming, adaptive imaging and cardiac reconstruction.
-## Dataset Contributors
+## Dataset Contributor(s)
-University of Oslo (UiO), Department of Informatics. Primary contact: Ole Marius Hoel Rindal (omrindal@ifi.uio.no). Team: Ole Marius Hoel Rindal, Yucel Karabiyik, Sven Peter Nasholm, Andreas Austeng.
+- Ole Marius Hoel Rindal (primary contact)
+- Yucel Karabiyik
+- Sven Peter Nasholm
+- Andreas Austeng
+- University of Oslo (UiO), Department of Informatics
## Dataset Creation Date
@@ -36,9 +42,7 @@ University of Oslo (UiO), Department of Informatics. Primary contact: Ole Marius
## License / Terms of Use
-Released under **Creative Commons Attribution 4.0 International (CC BY 4.0)** — see the `LICENCE`
-file at the submission root (this license is also declared in the YAML frontmatter above). The
-contributed data is cleared for this license. The UltraSound ToolBox (USTB) Channel Capture Collection, University of Oslo. Contributed to OpenH-RF. Zenodo record 20261898.
+[Creative Commons Attribution 4.0 International (CC BY 4.0)](https://creativecommons.org/licenses/by/4.0/legalcode.en). Retain attribution and identify modifications when reusing the data.
## Intended Usage
@@ -48,18 +52,27 @@ Generalized reconstruction and adaptive beamforming of cardiac ultrasound (RFP t
- **Data Collection Method:** clinical
- **Labeling Method:** N/A (raw channel data; no annotations).
-- **Acquisition system:** probe(s) P4-2;
- element positions stored in `/probe/probe_geometry` (meters); center frequency, sampling
- frequency and sound speed stored per acquisition in `/scan` (see per-sample feature table).
+- **Acquisition system:** probe(s) P4-2; element positions stored in `/probe/probe_geometry` (meters); center frequency, sampling frequency and sound speed stored per acquisition in `/scan` (see per-sample feature table).
+
+## Processing the Dataset
+
+The example acquisition can be processed with the `pipeline.yaml` definition in this folder and the [zea library](https://github.com/tue-bmd/zea).
+
+`zea` streams the data from the Hugging Face Hub and processes it according to the pipeline. You can try it out with the following command:
+
+```bash
+zea process \
+ --dataset hf://nvidia/OpenH-RF/oslo/A_cardiac/Verasonics_P2-4_parasternal_long_subject_1.hdf5 \
+ --config hf://nvidia/OpenH-RF/oslo/A_cardiac/pipeline.yaml
+```
+
+This `pipeline.yaml` holds the pipeline, display window and sector limits of that acquisition. Alternatively, all acquisitions can be processed with the `reconstruct.py` [script](https://github.com/open-h/OpenH-RF/blob/main/datasets/oslo/reconstruct.py) at the root of this collection, as provided in the [OpenH-RF GitHub repository](https://github.com/open-h/OpenH-RF), together with the `pipeline*.yaml` definitions at the collection root and the [zea library](https://github.com/tue-bmd/zea). The script streams the data from the Hugging Face Hub; `parameters.yaml` picks the pipeline, display window and dynamic range per acquisition (see the [collection card](../README.md#processing-the-dataset)).
## Dataset Format
-All acquisitions are stored in the **zea** HDF5 file format. Each `.hdf5` file is a single
-acquisition with raw channel data `/data/raw_data` of shape
-`(n_frames, n_tx, n_ax, n_el, n_ch)` and a fully populated `/scan` group describing the transmit
-sequence (delays, focus distances, steering angles, apodization, timing). Data type: RF (n_ch=1).
-No demodulation or decimation was applied during packaging beyond conversion from the USTB
-Ultrasound File Format (UFF) to zea; RF data is demodulated inside the reconstruction pipeline.
+[zea v0.1.6](https://github.com/tue-bmd/zea)
+
+All acquisitions are stored in the **zea** HDF5 file format. Each `.hdf5` file is a single acquisition with raw channel data `/data/raw_data` of shape `(n_frames, n_tx, n_ax, n_el, n_ch)` and a fully populated `/scan` group describing the transmit sequence (delays, focus distances, steering angles, apodization, timing). Data type: RF (n_ch=1). No demodulation or decimation was applied during packaging beyond conversion from the USTB Ultrasound File Format (UFF) to zea; RF data is demodulated inside the reconstruction pipeline.
## Dataset Quantification
@@ -100,20 +113,9 @@ Healthy adult volunteer(s). Anatomy: heart (parasternal long-axis, apical four-c
## Data Validation
-A Delay-And-Sum `zea.Pipeline` is provided in the **`pipeline.yaml` at the submission root** and
-run by the single **`reconstruct.py` at the submission root**:
-`cast -> demodulate -> delay-and-sum beamform -> envelope detect -> normalize -> log compress`
-(RF is demodulated in-pipeline; IQ uses a baseband pipeline). The script is geometry-driven and
-recurses into every sub-dataset folder; running `python reconstruct.py` from the root reconstructs
-every `.hdf5` in the collection (or pass a folder-qualified path for a single acquisition) and writes
-`_zea_bmode.png` next to each file as a portable check that the recorded geometry and timing
-are correct.
-
-The reference B-mode images committed alongside the data (`_bmode.png`) are produced with the
-UltraSound ToolBox (USTB) MATLAB Delay-And-Sum beamformer — the exact per-dataset reconstruction
-used in the public USTB dataset catalog (https://unioslo.github.io/USTB/datasets.html), with
-scanline transmit apodization for focused/sector acquisitions and correct sector-scan geometry.
-These are the recommended reference reconstructions for visual verification.
+A Delay-And-Sum `zea.Pipeline` (`cast -> demodulate -> delay-and-sum beamform -> envelope detect -> normalize -> log compress`; RF is demodulated in-pipeline, IQ uses a baseband pipeline) reconstructs every acquisition as a portable check that the recorded geometry and timing are correct (see *Processing the Dataset*).
+
+The reference B-mode images committed alongside the data (`_bmode.png`) are produced with the UltraSound ToolBox (USTB) MATLAB Delay-And-Sum beamformer — the exact per-dataset reconstruction used in the public USTB dataset catalog (https://unioslo.github.io/USTB/datasets.html), with scanline transmit apodization for focused/sector acquisitions and correct sector-scan geometry. These are the recommended reference reconstructions for visual verification.
## Known Issues
@@ -122,3 +124,7 @@ Focused sector acquisition: lateral resolution and field of view follow the tran
## Ethical Considerations
In-vivo data recorded from healthy adult volunteers at the University of Oslo with written informed consent for research use and data sharing, and approval from the Regional Committee for Medical and Health Research Ethics (REK), Norway. The files contain only backscattered RF channel data and acquisition parameters - no patient name, identifier, date of birth, acquisition date, facial image, or any other HHS Safe Harbor identifier is present (de-identified by construction).
+
+## Citation
+
+Please cite the UltraSound ToolBox (USTB) Channel Capture Collection, University of Oslo (Zenodo record 20261898).
diff --git a/datasets/oslo/A_cardiac/assets/hero.gif b/datasets/oslo/A_cardiac/assets/hero.gif
new file mode 100644
index 0000000..5607620
Binary files /dev/null and b/datasets/oslo/A_cardiac/assets/hero.gif differ
diff --git a/datasets/oslo/A_cardiac/assets/main.png b/datasets/oslo/A_cardiac/assets/main.png
new file mode 100644
index 0000000..e738821
Binary files /dev/null and b/datasets/oslo/A_cardiac/assets/main.png differ
diff --git a/datasets/oslo/A_cardiac/pipeline.yaml b/datasets/oslo/A_cardiac/pipeline.yaml
new file mode 100644
index 0000000..806d58a
--- /dev/null
+++ b/datasets/oslo/A_cardiac/pipeline.yaml
@@ -0,0 +1,34 @@
+# zea pipeline for A_cardiac/Verasonics_P2-4_parasternal_long_subject_1.hdf5, the example acquisition of this sub-dataset.
+# The shared ../pipeline_sector.yaml plus the per-acquisition settings that
+# ../reconstruct.py takes from ../parameters.yaml (display window in metres,
+# dynamic range, polar_limits), so `zea process` renders it standalone.
+
+parameters:
+ f_number: 0
+ grid_type: polar
+ grid_size_x: 400
+ grid_size_z: 600
+ dynamic_range: [-60, 0]
+ selected_transmits: all
+ focal_region_length: 0.002
+ pfield_kwargs:
+ interpolation: bilinear
+ percentile: 70
+ alpha: 15
+ zlims: [0.001, 0.11]
+ polar_limits: [-0.6552720665931702, 0.6552720665931702]
+pipeline:
+ operations:
+ - name: keras.ops.cast
+ params:
+ dtype: float32
+ - name: apply_window
+ - name: demodulate
+ - name: beamform
+ params:
+ beamformer: delay_and_sum
+ enable_pfield: true
+ - name: envelope_detect
+ - name: normalize
+ - name: log_compress
+ - name: scan_convert
diff --git a/datasets/oslo/B_carotid/README.md b/datasets/oslo/B_carotid/README.md
index edb95b8..da265fd 100644
--- a/datasets/oslo/B_carotid/README.md
+++ b/datasets/oslo/B_carotid/README.md
@@ -1,4 +1,5 @@
---
+name: oslo-b-carotid
pretty_name: "USTB - In-vivo Carotid (Verasonics L7-4)"
license: cc-by-4.0
task_categories:
@@ -18,18 +19,23 @@ size_categories:
# USTB - In-vivo Carotid (Verasonics L7-4)
-Part of the **UltraSound ToolBox (USTB) Channel Capture Collection** contributed to the
-[OpenH-RF](https://github.com/open-h/OpenH-RF) initiative. All acquisitions are stored in the
-*zea* HDF5 file format (zea_version 0.1.6) and contain raw pre-beamformed
-channel data (`/data/raw_data`).
+
+
+*First frame of [`L7_FI_carotid_cross_1.hdf5`](https://huggingface.co/datasets/nvidia/OpenH-RF/blob/main/oslo/B_carotid/L7_FI_carotid_cross_1.hdf5), reconstructed from the raw channel data with `reconstruct.py`.*
## Dataset Description
+Part of the **UltraSound ToolBox (USTB) Channel Capture Collection** (see the [collection card](../README.md)).
+
In-vivo human carotid-artery channel-capture data acquired with a Verasonics Vantage 256 and an L7-4 linear-array probe, cross-sectional views, focused transmit imaging. Pre-beamformed RF channel data for vascular imaging and beamforming research.
-## Dataset Contributors
+## Dataset Contributor(s)
-University of Oslo (UiO), Department of Informatics. Primary contact: Ole Marius Hoel Rindal (omrindal@ifi.uio.no). Team: Ole Marius Hoel Rindal, Yucel Karabiyik, Sven Peter Nasholm, Andreas Austeng.
+- Ole Marius Hoel Rindal (primary contact)
+- Yucel Karabiyik
+- Sven Peter Nasholm
+- Andreas Austeng
+- University of Oslo (UiO), Department of Informatics
## Dataset Creation Date
@@ -37,9 +43,7 @@ University of Oslo (UiO), Department of Informatics. Primary contact: Ole Marius
## License / Terms of Use
-Released under **Creative Commons Attribution 4.0 International (CC BY 4.0)** — see the `LICENCE`
-file at the submission root (this license is also declared in the YAML frontmatter above). The
-contributed data is cleared for this license. The UltraSound ToolBox (USTB) Channel Capture Collection, University of Oslo. Contributed to OpenH-RF. Zenodo record 20261898.
+[Creative Commons Attribution 4.0 International (CC BY 4.0)](https://creativecommons.org/licenses/by/4.0/legalcode.en). Retain attribution and identify modifications when reusing the data.
## Intended Usage
@@ -49,18 +53,27 @@ Generalized reconstruction and adaptive beamforming of vascular ultrasound (RFP
- **Data Collection Method:** clinical
- **Labeling Method:** N/A (raw channel data; no annotations).
-- **Acquisition system:** probe(s) L7-4;
- element positions stored in `/probe/probe_geometry` (meters); center frequency, sampling
- frequency and sound speed stored per acquisition in `/scan` (see per-sample feature table).
+- **Acquisition system:** probe(s) L7-4; element positions stored in `/probe/probe_geometry` (meters); center frequency, sampling frequency and sound speed stored per acquisition in `/scan` (see per-sample feature table).
+
+## Processing the Dataset
+
+The example acquisition can be processed with the `pipeline.yaml` definition in this folder and the [zea library](https://github.com/tue-bmd/zea).
+
+`zea` streams the data from the Hugging Face Hub and processes it according to the pipeline. You can try it out with the following command:
+
+```bash
+zea process \
+ --dataset hf://nvidia/OpenH-RF/oslo/B_carotid/L7_FI_carotid_cross_1.hdf5 \
+ --config hf://nvidia/OpenH-RF/oslo/B_carotid/pipeline.yaml
+```
+
+This `pipeline.yaml` holds the pipeline and display window of that acquisition. Alternatively, all acquisitions can be processed with the `reconstruct.py` [script](https://github.com/open-h/OpenH-RF/blob/main/datasets/oslo/reconstruct.py) at the root of this collection, as provided in the [OpenH-RF GitHub repository](https://github.com/open-h/OpenH-RF), together with the `pipeline*.yaml` definitions at the collection root and the [zea library](https://github.com/tue-bmd/zea). The script streams the data from the Hugging Face Hub; `parameters.yaml` picks the pipeline, display window and dynamic range per acquisition (see the [collection card](../README.md#processing-the-dataset)).
## Dataset Format
-All acquisitions are stored in the **zea** HDF5 file format. Each `.hdf5` file is a single
-acquisition with raw channel data `/data/raw_data` of shape
-`(n_frames, n_tx, n_ax, n_el, n_ch)` and a fully populated `/scan` group describing the transmit
-sequence (delays, focus distances, steering angles, apodization, timing). Data type: RF (n_ch=1).
-No demodulation or decimation was applied during packaging beyond conversion from the USTB
-Ultrasound File Format (UFF) to zea; RF data is demodulated inside the reconstruction pipeline.
+[zea v0.1.6](https://github.com/tue-bmd/zea)
+
+All acquisitions are stored in the **zea** HDF5 file format. Each `.hdf5` file is a single acquisition with raw channel data `/data/raw_data` of shape `(n_frames, n_tx, n_ax, n_el, n_ch)` and a fully populated `/scan` group describing the transmit sequence (delays, focus distances, steering angles, apodization, timing). Data type: RF (n_ch=1). No demodulation or decimation was applied during packaging beyond conversion from the USTB Ultrasound File Format (UFF) to zea; RF data is demodulated inside the reconstruction pipeline.
## Dataset Quantification
@@ -102,20 +115,9 @@ Healthy adult volunteer(s). Anatomy: carotid artery (cross-section). Scanner: Ve
## Data Validation
-A Delay-And-Sum `zea.Pipeline` is provided in the **`pipeline.yaml` at the submission root** and
-run by the single **`reconstruct.py` at the submission root**:
-`cast -> demodulate -> delay-and-sum beamform -> envelope detect -> normalize -> log compress`
-(RF is demodulated in-pipeline; IQ uses a baseband pipeline). The script is geometry-driven and
-recurses into every sub-dataset folder; running `python reconstruct.py` from the root reconstructs
-every `.hdf5` in the collection (or pass a folder-qualified path for a single acquisition) and writes
-`_zea_bmode.png` next to each file as a portable check that the recorded geometry and timing
-are correct.
-
-The reference B-mode images committed alongside the data (`_bmode.png`) are produced with the
-UltraSound ToolBox (USTB) MATLAB Delay-And-Sum beamformer — the exact per-dataset reconstruction
-used in the public USTB dataset catalog (https://unioslo.github.io/USTB/datasets.html), with
-scanline transmit apodization for focused/sector acquisitions and correct sector-scan geometry.
-These are the recommended reference reconstructions for visual verification.
+A Delay-And-Sum `zea.Pipeline` (`cast -> demodulate -> delay-and-sum beamform -> envelope detect -> normalize -> log compress`; RF is demodulated in-pipeline, IQ uses a baseband pipeline) reconstructs every acquisition as a portable check that the recorded geometry and timing are correct (see *Processing the Dataset*).
+
+The reference B-mode images committed alongside the data (`_bmode.png`) are produced with the UltraSound ToolBox (USTB) MATLAB Delay-And-Sum beamformer — the exact per-dataset reconstruction used in the public USTB dataset catalog (https://unioslo.github.io/USTB/datasets.html), with scanline transmit apodization for focused/sector acquisitions and correct sector-scan geometry. These are the recommended reference reconstructions for visual verification.
## Known Issues
@@ -124,3 +126,7 @@ Single/few-frame acquisitions; focused linear imaging.
## Ethical Considerations
In-vivo data recorded from healthy adult volunteers at the University of Oslo with written informed consent for research use and data sharing, and approval from the Regional Committee for Medical and Health Research Ethics (REK), Norway. Files contain only RF channel data and acquisition parameters; no HHS Safe Harbor identifiers are present.
+
+## Citation
+
+Please cite the UltraSound ToolBox (USTB) Channel Capture Collection, University of Oslo (Zenodo record 20261898).
diff --git a/datasets/oslo/B_carotid/assets/hero.png b/datasets/oslo/B_carotid/assets/hero.png
new file mode 100644
index 0000000..7827f62
Binary files /dev/null and b/datasets/oslo/B_carotid/assets/hero.png differ
diff --git a/datasets/oslo/B_carotid/assets/main.png b/datasets/oslo/B_carotid/assets/main.png
new file mode 100644
index 0000000..9f8793a
Binary files /dev/null and b/datasets/oslo/B_carotid/assets/main.png differ
diff --git a/datasets/oslo/B_carotid/pipeline.yaml b/datasets/oslo/B_carotid/pipeline.yaml
new file mode 100644
index 0000000..c707412
--- /dev/null
+++ b/datasets/oslo/B_carotid/pipeline.yaml
@@ -0,0 +1,41 @@
+# zea pipeline for B_carotid/L7_FI_carotid_cross_1.hdf5, the example acquisition of this sub-dataset.
+# The shared ../pipeline_scanline.yaml plus the per-acquisition settings that
+# ../reconstruct.py takes from ../parameters.yaml (display window in metres,
+# dynamic range), so `zea process` renders it standalone.
+# zea process writes the pixel array as-is, so the grid is sized for square
+# pixels (scanline: resized after log compression).
+
+parameters:
+ f_number: 1.75
+ dynamic_range: [-60, 0]
+ enable_scanline: true
+ grid_type: cartesian
+ selected_transmits: all
+ grid_size_z: 700
+ zlims: [0.001, 0.06]
+ xlims: [-0.019, 0.019]
+pipeline:
+ operations:
+ - name: keras.ops.cast
+ params:
+ dtype: float32
+ - name: apply_window
+ - name: demodulate
+ - name: beamform
+ params:
+ beamformer: delay_and_sum
+ enable_aligned_apodization: true
+ enable_pfield: false
+ - name: envelope_detect
+ - name: normalize
+ - name: log_compress
+ - name: keras.ops.expand_dims
+ params:
+ axis: -1
+ - name: keras.ops.image.resize
+ params:
+ size: [700, 449]
+ interpolation: bilinear
+ - name: keras.ops.squeeze
+ params:
+ axis: -1
diff --git a/datasets/oslo/C_verasonics_phantom/README.md b/datasets/oslo/C_verasonics_phantom/README.md
index f34d8f8..0a73e2c 100644
--- a/datasets/oslo/C_verasonics_phantom/README.md
+++ b/datasets/oslo/C_verasonics_phantom/README.md
@@ -1,4 +1,5 @@
---
+name: oslo-c-verasonics-phantom
pretty_name: "USTB - Phantom (Verasonics L7-4 / P4)"
license: cc-by-4.0
task_categories:
@@ -17,18 +18,23 @@ size_categories:
# USTB - Phantom (Verasonics L7-4 / P4)
-Part of the **UltraSound ToolBox (USTB) Channel Capture Collection** contributed to the
-[OpenH-RF](https://github.com/open-h/OpenH-RF) initiative. All acquisitions are stored in the
-*zea* HDF5 file format (zea_version 0.1.6) and contain raw pre-beamformed
-channel data (`/data/raw_data`).
+
+
+*First frame of [`FI_P4_cysts_center.hdf5`](https://huggingface.co/datasets/nvidia/OpenH-RF/blob/main/oslo/C_verasonics_phantom/FI_P4_cysts_center.hdf5), reconstructed from the raw channel data with `reconstruct.py`.*
## Dataset Description
+Part of the **UltraSound ToolBox (USTB) Channel Capture Collection** (see the [collection card](../README.md)).
+
Tissue-mimicking and table-top phantom channel-capture data acquired on a Verasonics Vantage 256 with L7-4 linear and P4 phased-array probes. The collection spans coherent plane-wave compounding (CPWC), focused imaging (FI), synthetic transmit aperture (STA) and diverging-wave (DW) sequences for resolution, contrast, dynamic-range and point-spread-function evaluation, including CIRS tissue-mimicking phantom targets.
-## Dataset Contributors
+## Dataset Contributor(s)
-University of Oslo (UiO), Department of Informatics. Primary contact: Ole Marius Hoel Rindal (omrindal@ifi.uio.no). Team: Ole Marius Hoel Rindal, Yucel Karabiyik, Sven Peter Nasholm, Andreas Austeng.
+- Ole Marius Hoel Rindal (primary contact)
+- Yucel Karabiyik
+- Sven Peter Nasholm
+- Andreas Austeng
+- University of Oslo (UiO), Department of Informatics
## Dataset Creation Date
@@ -36,9 +42,7 @@ University of Oslo (UiO), Department of Informatics. Primary contact: Ole Marius
## License / Terms of Use
-Released under **Creative Commons Attribution 4.0 International (CC BY 4.0)** — see the `LICENCE`
-file at the submission root (this license is also declared in the YAML frontmatter above). The
-contributed data is cleared for this license. The UltraSound ToolBox (USTB) Channel Capture Collection, University of Oslo. Contributed to OpenH-RF. Zenodo record 20261898.
+[Creative Commons Attribution 4.0 International (CC BY 4.0)](https://creativecommons.org/licenses/by/4.0/legalcode.en). Retain attribution and identify modifications when reusing the data.
## Intended Usage
@@ -48,18 +52,27 @@ Generalized reconstruction, image-quality assessment (resolution, contrast, dyna
- **Data Collection Method:** phantom
- **Labeling Method:** Derived (known phantom geometry, e.g. CIRS Model 040GSE where applicable).
-- **Acquisition system:** probe(s) L7-4, P4-1, P4-2;
- element positions stored in `/probe/probe_geometry` (meters); center frequency, sampling
- frequency and sound speed stored per acquisition in `/scan` (see per-sample feature table).
+- **Acquisition system:** probe(s) L7-4, P4-1, P4-2; element positions stored in `/probe/probe_geometry` (meters); center frequency, sampling frequency and sound speed stored per acquisition in `/scan` (see per-sample feature table).
+
+## Processing the Dataset
+
+The example acquisition can be processed with the `pipeline.yaml` definition in this folder and the [zea library](https://github.com/tue-bmd/zea).
+
+`zea` streams the data from the Hugging Face Hub and processes it according to the pipeline. You can try it out with the following command:
+
+```bash
+zea process \
+ --dataset hf://nvidia/OpenH-RF/oslo/C_verasonics_phantom/FI_P4_cysts_center.hdf5 \
+ --config hf://nvidia/OpenH-RF/oslo/C_verasonics_phantom/pipeline.yaml
+```
+
+This `pipeline.yaml` holds the pipeline, display window and sector limits of that acquisition. Alternatively, all acquisitions can be processed with the `reconstruct.py` [script](https://github.com/open-h/OpenH-RF/blob/main/datasets/oslo/reconstruct.py) at the root of this collection, as provided in the [OpenH-RF GitHub repository](https://github.com/open-h/OpenH-RF), together with the `pipeline*.yaml` definitions at the collection root and the [zea library](https://github.com/tue-bmd/zea). The script streams the data from the Hugging Face Hub; `parameters.yaml` picks the pipeline, display window and dynamic range per acquisition (see the [collection card](../README.md#processing-the-dataset)).
## Dataset Format
-All acquisitions are stored in the **zea** HDF5 file format. Each `.hdf5` file is a single
-acquisition with raw channel data `/data/raw_data` of shape
-`(n_frames, n_tx, n_ax, n_el, n_ch)` and a fully populated `/scan` group describing the transmit
-sequence (delays, focus distances, steering angles, apodization, timing). Data type: RF (n_ch=1).
-No demodulation or decimation was applied during packaging beyond conversion from the USTB
-Ultrasound File Format (UFF) to zea; RF data is demodulated inside the reconstruction pipeline.
+[zea v0.1.6](https://github.com/tue-bmd/zea)
+
+All acquisitions are stored in the **zea** HDF5 file format. Each `.hdf5` file is a single acquisition with raw channel data `/data/raw_data` of shape `(n_frames, n_tx, n_ax, n_el, n_ch)` and a fully populated `/scan` group describing the transmit sequence (delays, focus distances, steering angles, apodization, timing). Data type: RF (n_ch=1). No demodulation or decimation was applied during packaging beyond conversion from the USTB Ultrasound File Format (UFF) to zea; RF data is demodulated inside the reconstruction pipeline.
## Dataset Quantification
@@ -113,20 +126,9 @@ No human or animal subjects. Targets: CIRS tissue-mimicking phantoms and lab pha
## Data Validation
-A Delay-And-Sum `zea.Pipeline` is provided in the **`pipeline.yaml` at the submission root** and
-run by the single **`reconstruct.py` at the submission root**:
-`cast -> demodulate -> delay-and-sum beamform -> envelope detect -> normalize -> log compress`
-(RF is demodulated in-pipeline; IQ uses a baseband pipeline). The script is geometry-driven and
-recurses into every sub-dataset folder; running `python reconstruct.py` from the root reconstructs
-every `.hdf5` in the collection (or pass a folder-qualified path for a single acquisition) and writes
-`_zea_bmode.png` next to each file as a portable check that the recorded geometry and timing
-are correct.
-
-The reference B-mode images committed alongside the data (`_bmode.png`) are produced with the
-UltraSound ToolBox (USTB) MATLAB Delay-And-Sum beamformer — the exact per-dataset reconstruction
-used in the public USTB dataset catalog (https://unioslo.github.io/USTB/datasets.html), with
-scanline transmit apodization for focused/sector acquisitions and correct sector-scan geometry.
-These are the recommended reference reconstructions for visual verification.
+A Delay-And-Sum `zea.Pipeline` (`cast -> demodulate -> delay-and-sum beamform -> envelope detect -> normalize -> log compress`; RF is demodulated in-pipeline, IQ uses a baseband pipeline) reconstructs every acquisition as a portable check that the recorded geometry and timing are correct (see *Processing the Dataset*).
+
+The reference B-mode images committed alongside the data (`_bmode.png`) are produced with the UltraSound ToolBox (USTB) MATLAB Delay-And-Sum beamformer — the exact per-dataset reconstruction used in the public USTB dataset catalog (https://unioslo.github.io/USTB/datasets.html), with scanline transmit apodization for focused/sector acquisitions and correct sector-scan geometry. These are the recommended reference reconstructions for visual verification.
## Known Issues
@@ -135,3 +137,7 @@ Mixed transmit schemes across files (CPWC / FI / STA / DW). Single-frame acquisi
## Ethical Considerations
Phantom / table-top acquisitions; no human or animal subjects are involved. No ethical considerations beyond standard laboratory practice.
+
+## Citation
+
+Please cite the UltraSound ToolBox (USTB) Channel Capture Collection, University of Oslo (Zenodo record 20261898).
diff --git a/datasets/oslo/C_verasonics_phantom/assets/hero.png b/datasets/oslo/C_verasonics_phantom/assets/hero.png
new file mode 100644
index 0000000..e327e62
Binary files /dev/null and b/datasets/oslo/C_verasonics_phantom/assets/hero.png differ
diff --git a/datasets/oslo/C_verasonics_phantom/assets/main.png b/datasets/oslo/C_verasonics_phantom/assets/main.png
new file mode 100644
index 0000000..709cc8e
Binary files /dev/null and b/datasets/oslo/C_verasonics_phantom/assets/main.png differ
diff --git a/datasets/oslo/C_verasonics_phantom/pipeline.yaml b/datasets/oslo/C_verasonics_phantom/pipeline.yaml
new file mode 100644
index 0000000..3545b0d
--- /dev/null
+++ b/datasets/oslo/C_verasonics_phantom/pipeline.yaml
@@ -0,0 +1,34 @@
+# zea pipeline for C_verasonics_phantom/FI_P4_cysts_center.hdf5, the example acquisition of this sub-dataset.
+# The shared ../pipeline_sector.yaml plus the per-acquisition settings that
+# ../reconstruct.py takes from ../parameters.yaml (display window in metres,
+# dynamic range, polar_limits), so `zea process` renders it standalone.
+
+parameters:
+ f_number: 0
+ grid_type: polar
+ grid_size_x: 400
+ grid_size_z: 600
+ dynamic_range: [-60, 0]
+ selected_transmits: all
+ focal_region_length: 0.002
+ pfield_kwargs:
+ interpolation: bilinear
+ percentile: 70
+ alpha: 15
+ zlims: [0.001, 0.115]
+ polar_limits: [-0.7853981852531433, 0.7853981852531433]
+pipeline:
+ operations:
+ - name: keras.ops.cast
+ params:
+ dtype: float32
+ - name: apply_window
+ - name: demodulate
+ - name: beamform
+ params:
+ beamformer: delay_and_sum
+ enable_pfield: true
+ - name: envelope_detect
+ - name: normalize
+ - name: log_compress
+ - name: scan_convert
diff --git a/datasets/oslo/D_alpinion_phantom/README.md b/datasets/oslo/D_alpinion_phantom/README.md
index 8f8a90e..9f47e6e 100644
--- a/datasets/oslo/D_alpinion_phantom/README.md
+++ b/datasets/oslo/D_alpinion_phantom/README.md
@@ -1,4 +1,5 @@
---
+name: oslo-d-alpinion-phantom
pretty_name: "USTB - Phantom (Alpinion L3-8)"
license: cc-by-4.0
task_categories:
@@ -17,18 +18,23 @@ size_categories:
# USTB - Phantom (Alpinion L3-8)
-Part of the **UltraSound ToolBox (USTB) Channel Capture Collection** contributed to the
-[OpenH-RF](https://github.com/open-h/OpenH-RF) initiative. All acquisitions are stored in the
-*zea* HDF5 file format (zea_version 0.1.6) and contain raw pre-beamformed
-channel data (`/data/raw_data`).
+
+
+*First frame of [`Alpinion_L3-8_CPWC_hypoechoic.hdf5`](https://huggingface.co/datasets/nvidia/OpenH-RF/blob/main/oslo/D_alpinion_phantom/Alpinion_L3-8_CPWC_hypoechoic.hdf5), reconstructed from the raw channel data with `reconstruct.py`.*
## Dataset Description
+Part of the **UltraSound ToolBox (USTB) Channel Capture Collection** (see the [collection card](../README.md)).
+
Phantom channel-capture data acquired on an Alpinion E-Cube 12R research scanner with an L3-8 linear-array probe. Hypoechoic and hyperechoic targets imaged with focused (FI) and coherent plane-wave compounding (CPWC) sequences.
-## Dataset Contributors
+## Dataset Contributor(s)
-University of Oslo (UiO), Department of Informatics. Primary contact: Ole Marius Hoel Rindal (omrindal@ifi.uio.no). Team: Ole Marius Hoel Rindal, Yucel Karabiyik, Sven Peter Nasholm, Andreas Austeng.
+- Ole Marius Hoel Rindal (primary contact)
+- Yucel Karabiyik
+- Sven Peter Nasholm
+- Andreas Austeng
+- University of Oslo (UiO), Department of Informatics
## Dataset Creation Date
@@ -36,9 +42,7 @@ University of Oslo (UiO), Department of Informatics. Primary contact: Ole Marius
## License / Terms of Use
-Released under **Creative Commons Attribution 4.0 International (CC BY 4.0)** — see the `LICENCE`
-file at the submission root (this license is also declared in the YAML frontmatter above). The
-contributed data is cleared for this license. The UltraSound ToolBox (USTB) Channel Capture Collection, University of Oslo. Contributed to OpenH-RF. Zenodo record 20261898.
+[Creative Commons Attribution 4.0 International (CC BY 4.0)](https://creativecommons.org/licenses/by/4.0/legalcode.en). Retain attribution and identify modifications when reusing the data.
## Intended Usage
@@ -48,18 +52,27 @@ Generalized reconstruction and image-quality assessment on a second hardware pla
- **Data Collection Method:** phantom
- **Labeling Method:** Derived (known phantom target types).
-- **Acquisition system:** probe(s) L3-8;
- element positions stored in `/probe/probe_geometry` (meters); center frequency, sampling
- frequency and sound speed stored per acquisition in `/scan` (see per-sample feature table).
+- **Acquisition system:** probe(s) L3-8; element positions stored in `/probe/probe_geometry` (meters); center frequency, sampling frequency and sound speed stored per acquisition in `/scan` (see per-sample feature table).
+
+## Processing the Dataset
+
+The example acquisition can be processed with the `pipeline.yaml` definition in this folder and the [zea library](https://github.com/tue-bmd/zea).
+
+`zea` streams the data from the Hugging Face Hub and processes it according to the pipeline. You can try it out with the following command:
+
+```bash
+zea process \
+ --dataset hf://nvidia/OpenH-RF/oslo/D_alpinion_phantom/Alpinion_L3-8_CPWC_hypoechoic.hdf5 \
+ --config hf://nvidia/OpenH-RF/oslo/D_alpinion_phantom/pipeline.yaml
+```
+
+This `pipeline.yaml` holds the pipeline and display window of that acquisition. Alternatively, all acquisitions can be processed with the `reconstruct.py` [script](https://github.com/open-h/OpenH-RF/blob/main/datasets/oslo/reconstruct.py) at the root of this collection, as provided in the [OpenH-RF GitHub repository](https://github.com/open-h/OpenH-RF), together with the `pipeline*.yaml` definitions at the collection root and the [zea library](https://github.com/tue-bmd/zea). The script streams the data from the Hugging Face Hub; `parameters.yaml` picks the pipeline, display window and dynamic range per acquisition (see the [collection card](../README.md#processing-the-dataset)).
## Dataset Format
-All acquisitions are stored in the **zea** HDF5 file format. Each `.hdf5` file is a single
-acquisition with raw channel data `/data/raw_data` of shape
-`(n_frames, n_tx, n_ax, n_el, n_ch)` and a fully populated `/scan` group describing the transmit
-sequence (delays, focus distances, steering angles, apodization, timing). Data type: RF (n_ch=1).
-No demodulation or decimation was applied during packaging beyond conversion from the USTB
-Ultrasound File Format (UFF) to zea; RF data is demodulated inside the reconstruction pipeline.
+[zea v0.1.6](https://github.com/tue-bmd/zea)
+
+All acquisitions are stored in the **zea** HDF5 file format. Each `.hdf5` file is a single acquisition with raw channel data `/data/raw_data` of shape `(n_frames, n_tx, n_ax, n_el, n_ch)` and a fully populated `/scan` group describing the transmit sequence (delays, focus distances, steering angles, apodization, timing). Data type: RF (n_ch=1). No demodulation or decimation was applied during packaging beyond conversion from the USTB Ultrasound File Format (UFF) to zea; RF data is demodulated inside the reconstruction pipeline.
## Dataset Quantification
@@ -102,20 +115,9 @@ No human or animal subjects. Targets: hypoechoic/hyperechoic phantom inclusions.
## Data Validation
-A Delay-And-Sum `zea.Pipeline` is provided in the **`pipeline.yaml` at the submission root** and
-run by the single **`reconstruct.py` at the submission root**:
-`cast -> demodulate -> delay-and-sum beamform -> envelope detect -> normalize -> log compress`
-(RF is demodulated in-pipeline; IQ uses a baseband pipeline). The script is geometry-driven and
-recurses into every sub-dataset folder; running `python reconstruct.py` from the root reconstructs
-every `.hdf5` in the collection (or pass a folder-qualified path for a single acquisition) and writes
-`_zea_bmode.png` next to each file as a portable check that the recorded geometry and timing
-are correct.
-
-The reference B-mode images committed alongside the data (`_bmode.png`) are produced with the
-UltraSound ToolBox (USTB) MATLAB Delay-And-Sum beamformer — the exact per-dataset reconstruction
-used in the public USTB dataset catalog (https://unioslo.github.io/USTB/datasets.html), with
-scanline transmit apodization for focused/sector acquisitions and correct sector-scan geometry.
-These are the recommended reference reconstructions for visual verification.
+A Delay-And-Sum `zea.Pipeline` (`cast -> demodulate -> delay-and-sum beamform -> envelope detect -> normalize -> log compress`; RF is demodulated in-pipeline, IQ uses a baseband pipeline) reconstructs every acquisition as a portable check that the recorded geometry and timing are correct (see *Processing the Dataset*).
+
+The reference B-mode images committed alongside the data (`_bmode.png`) are produced with the UltraSound ToolBox (USTB) MATLAB Delay-And-Sum beamformer — the exact per-dataset reconstruction used in the public USTB dataset catalog (https://unioslo.github.io/USTB/datasets.html), with scanline transmit apodization for focused/sector acquisitions and correct sector-scan geometry. These are the recommended reference reconstructions for visual verification.
## Known Issues
@@ -124,3 +126,7 @@ Single-frame acquisitions; two transmit schemes (FI, CPWC).
## Ethical Considerations
Phantom acquisitions; no human or animal subjects. No ethical considerations beyond standard laboratory practice.
+
+## Citation
+
+Please cite the UltraSound ToolBox (USTB) Channel Capture Collection, University of Oslo (Zenodo record 20261898).
diff --git a/datasets/oslo/D_alpinion_phantom/assets/hero.png b/datasets/oslo/D_alpinion_phantom/assets/hero.png
new file mode 100644
index 0000000..bd41cd8
Binary files /dev/null and b/datasets/oslo/D_alpinion_phantom/assets/hero.png differ
diff --git a/datasets/oslo/D_alpinion_phantom/assets/main.png b/datasets/oslo/D_alpinion_phantom/assets/main.png
new file mode 100644
index 0000000..bbcdad4
Binary files /dev/null and b/datasets/oslo/D_alpinion_phantom/assets/main.png differ
diff --git a/datasets/oslo/D_alpinion_phantom/pipeline.yaml b/datasets/oslo/D_alpinion_phantom/pipeline.yaml
new file mode 100644
index 0000000..84214fe
--- /dev/null
+++ b/datasets/oslo/D_alpinion_phantom/pipeline.yaml
@@ -0,0 +1,29 @@
+# zea pipeline for D_alpinion_phantom/Alpinion_L3-8_CPWC_hypoechoic.hdf5, the example acquisition of this sub-dataset.
+# The shared ../pipeline.yaml plus the per-acquisition settings that
+# ../reconstruct.py takes from ../parameters.yaml (display window in metres,
+# dynamic range), so `zea process` renders it standalone.
+# zea process writes the pixel array as-is, so the grid is sized for square
+# pixels.
+
+parameters:
+ f_number: 1.75
+ grid_size_x: 507
+ grid_size_z: 600
+ dynamic_range: [-60, 0]
+ selected_transmits: all
+ zlims: [0.005, 0.05]
+ xlims: [-0.019, 0.019]
+pipeline:
+ operations:
+ - name: keras.ops.cast
+ params:
+ dtype: float32
+ - name: apply_window
+ - name: demodulate
+ - name: beamform
+ params:
+ beamformer: delay_and_sum
+ enable_pfield: false
+ - name: envelope_detect
+ - name: normalize
+ - name: log_compress
diff --git a/datasets/oslo/E_simulation/README.md b/datasets/oslo/E_simulation/README.md
index d64110d..0d671c2 100644
--- a/datasets/oslo/E_simulation/README.md
+++ b/datasets/oslo/E_simulation/README.md
@@ -1,4 +1,5 @@
---
+name: oslo-e-simulation
pretty_name: "USTB - Simulation (Field II)"
license: cc-by-4.0
task_categories:
@@ -18,18 +19,23 @@ size_categories:
# USTB - Simulation (Field II)
-Part of the **UltraSound ToolBox (USTB) Channel Capture Collection** contributed to the
-[OpenH-RF](https://github.com/open-h/OpenH-RF) initiative. All acquisitions are stored in the
-*zea* HDF5 file format (zea_version 0.1.6) and contain raw pre-beamformed
-channel data (`/data/raw_data`).
+
+
+*First frame of [`PICMUS_numerical_calib_v2.hdf5`](https://huggingface.co/datasets/nvidia/OpenH-RF/blob/main/oslo/E_simulation/PICMUS_numerical_calib_v2.hdf5), reconstructed from the raw channel data with `reconstruct.py`.*
## Dataset Description
+Part of the **UltraSound ToolBox (USTB) Channel Capture Collection** (see the [collection card](../README.md)).
+
Physics-based synthetic channel-capture data generated with the Field II ultrasound simulation framework. The collection covers point scatterers, cysts, speckle, dynamic-range targets and blocked-array (aperture-apodized) configurations, using linear (L7-4-like) and phased (P4-like) virtual probes with CPWC, FI and STA sequences. Because the scattering medium is fully defined, exact ground-truth scatterer positions and medium parameters are known. One numerical calibration acquisition (PICMUS_numerical_calib_v2) was created in collaboration with our group as part of the PICMUS effort; it is included here while the other PICMUS datasets are excluded (see Known Issues).
-## Dataset Contributors
+## Dataset Contributor(s)
-University of Oslo (UiO), Department of Informatics. Primary contact: Ole Marius Hoel Rindal (omrindal@ifi.uio.no). Team: Ole Marius Hoel Rindal, Yucel Karabiyik, Sven Peter Nasholm, Andreas Austeng.
+- Ole Marius Hoel Rindal (primary contact)
+- Yucel Karabiyik
+- Sven Peter Nasholm
+- Andreas Austeng
+- University of Oslo (UiO), Department of Informatics
## Dataset Creation Date
@@ -37,9 +43,7 @@ University of Oslo (UiO), Department of Informatics. Primary contact: Ole Marius
## License / Terms of Use
-Released under **Creative Commons Attribution 4.0 International (CC BY 4.0)** — see the `LICENCE`
-file at the submission root (this license is also declared in the YAML frontmatter above). The
-contributed data is cleared for this license. The UltraSound ToolBox (USTB) Channel Capture Collection, University of Oslo. Contributed to OpenH-RF. Zenodo record 20261898.
+[Creative Commons Attribution 4.0 International (CC BY 4.0)](https://creativecommons.org/licenses/by/4.0/legalcode.en). Retain attribution and identify modifications when reusing the data.
## Intended Usage
@@ -49,18 +53,27 @@ Generalized reconstruction, beamformer development and validation with known gro
- **Data Collection Method:** synthetic
- **Labeling Method:** Synthetic ground truth (known scatterer positions and medium parameters).
-- **Acquisition system:** probe(s) L7-4, P4-1;
- element positions stored in `/probe/probe_geometry` (meters); center frequency, sampling
- frequency and sound speed stored per acquisition in `/scan` (see per-sample feature table).
+- **Acquisition system:** probe(s) L7-4, P4-1; element positions stored in `/probe/probe_geometry` (meters); center frequency, sampling frequency and sound speed stored per acquisition in `/scan` (see per-sample feature table).
+
+## Processing the Dataset
+
+The example acquisition can be processed with the `pipeline.yaml` definition in this folder and the [zea library](https://github.com/tue-bmd/zea).
+
+`zea` streams the data from the Hugging Face Hub and processes it according to the pipeline. You can try it out with the following command:
+
+```bash
+zea process \
+ --dataset hf://nvidia/OpenH-RF/oslo/E_simulation/PICMUS_numerical_calib_v2.hdf5 \
+ --config hf://nvidia/OpenH-RF/oslo/E_simulation/pipeline.yaml
+```
+
+This `pipeline.yaml` holds the pipeline and display window of that acquisition. Alternatively, all acquisitions can be processed with the `reconstruct.py` [script](https://github.com/open-h/OpenH-RF/blob/main/datasets/oslo/reconstruct.py) at the root of this collection, as provided in the [OpenH-RF GitHub repository](https://github.com/open-h/OpenH-RF), together with the `pipeline*.yaml` definitions at the collection root and the [zea library](https://github.com/tue-bmd/zea). The script streams the data from the Hugging Face Hub; `parameters.yaml` picks the pipeline, display window and dynamic range per acquisition (see the [collection card](../README.md#processing-the-dataset)).
## Dataset Format
-All acquisitions are stored in the **zea** HDF5 file format. Each `.hdf5` file is a single
-acquisition with raw channel data `/data/raw_data` of shape
-`(n_frames, n_tx, n_ax, n_el, n_ch)` and a fully populated `/scan` group describing the transmit
-sequence (delays, focus distances, steering angles, apodization, timing). Data type: RF/IQ (n_ch in [1, 2]).
-No demodulation or decimation was applied during packaging beyond conversion from the USTB
-Ultrasound File Format (UFF) to zea; RF data is demodulated inside the reconstruction pipeline.
+[zea v0.1.6](https://github.com/tue-bmd/zea)
+
+All acquisitions are stored in the **zea** HDF5 file format. Each `.hdf5` file is a single acquisition with raw channel data `/data/raw_data` of shape `(n_frames, n_tx, n_ax, n_el, n_ch)` and a fully populated `/scan` group describing the transmit sequence (delays, focus distances, steering angles, apodization, timing). Data type: RF/IQ (n_ch in [1, 2]). No demodulation or decimation was applied during packaging beyond conversion from the USTB Ultrasound File Format (UFF) to zea; RF data is demodulated inside the reconstruction pipeline.
## Dataset Quantification
@@ -110,20 +123,9 @@ No human or animal subjects. Synthetic media simulated with Field II. Virtual pr
## Data Validation
-A Delay-And-Sum `zea.Pipeline` is provided in the **`pipeline.yaml` at the submission root** and
-run by the single **`reconstruct.py` at the submission root**:
-`cast -> demodulate -> delay-and-sum beamform -> envelope detect -> normalize -> log compress`
-(RF is demodulated in-pipeline; IQ uses a baseband pipeline). The script is geometry-driven and
-recurses into every sub-dataset folder; running `python reconstruct.py` from the root reconstructs
-every `.hdf5` in the collection (or pass a folder-qualified path for a single acquisition) and writes
-`_zea_bmode.png` next to each file as a portable check that the recorded geometry and timing
-are correct.
-
-The reference B-mode images committed alongside the data (`_bmode.png`) are produced with the
-UltraSound ToolBox (USTB) MATLAB Delay-And-Sum beamformer — the exact per-dataset reconstruction
-used in the public USTB dataset catalog (https://unioslo.github.io/USTB/datasets.html), with
-scanline transmit apodization for focused/sector acquisitions and correct sector-scan geometry.
-These are the recommended reference reconstructions for visual verification.
+A Delay-And-Sum `zea.Pipeline` (`cast -> demodulate -> delay-and-sum beamform -> envelope detect -> normalize -> log compress`; RF is demodulated in-pipeline, IQ uses a baseband pipeline) reconstructs every acquisition as a portable check that the recorded geometry and timing are correct (see *Processing the Dataset*).
+
+The reference B-mode images committed alongside the data (`_bmode.png`) are produced with the UltraSound ToolBox (USTB) MATLAB Delay-And-Sum beamformer — the exact per-dataset reconstruction used in the public USTB dataset catalog (https://unioslo.github.io/USTB/datasets.html), with scanline transmit apodization for focused/sector acquisitions and correct sector-scan geometry. These are the recommended reference reconstructions for visual verification.
## Known Issues
@@ -132,3 +134,7 @@ PICMUS calibration: 'PICMUS_numerical_calib_v2' was created in collaboration wit
## Ethical Considerations
Fully synthetic data generated with the Field II simulation framework; no human or animal subjects. No personal data is present. The included numerical calibration file was produced in collaboration with our group as part of the PICMUS effort (IEEE IUS 2016) and is released here under CC BY 4.0.
+
+## Citation
+
+Please cite the UltraSound ToolBox (USTB) Channel Capture Collection, University of Oslo (Zenodo record 20261898).
diff --git a/datasets/oslo/E_simulation/assets/hero.png b/datasets/oslo/E_simulation/assets/hero.png
new file mode 100644
index 0000000..2a616b4
Binary files /dev/null and b/datasets/oslo/E_simulation/assets/hero.png differ
diff --git a/datasets/oslo/E_simulation/assets/main.png b/datasets/oslo/E_simulation/assets/main.png
new file mode 100644
index 0000000..7a32796
Binary files /dev/null and b/datasets/oslo/E_simulation/assets/main.png differ
diff --git a/datasets/oslo/E_simulation/pipeline.yaml b/datasets/oslo/E_simulation/pipeline.yaml
new file mode 100644
index 0000000..ea22f69
--- /dev/null
+++ b/datasets/oslo/E_simulation/pipeline.yaml
@@ -0,0 +1,28 @@
+# zea pipeline for E_simulation/PICMUS_numerical_calib_v2.hdf5, the example acquisition of this sub-dataset.
+# The shared ../pipeline_iq.yaml plus the per-acquisition settings that
+# ../reconstruct.py takes from ../parameters.yaml (display window in metres,
+# dynamic range), so `zea process` renders it standalone.
+# zea process writes the pixel array as-is, so the grid is sized for square
+# pixels.
+
+parameters:
+ f_number: 1.75
+ grid_size_x: 507
+ grid_size_z: 600
+ dynamic_range: [-60, 0]
+ selected_transmits: all
+ zlims: [0.005, 0.05]
+ xlims: [-0.019, 0.019]
+pipeline:
+ operations:
+ - name: keras.ops.cast
+ params:
+ dtype: float32
+ - name: apply_window
+ - name: beamform
+ params:
+ beamformer: delay_and_sum
+ enable_pfield: false
+ - name: envelope_detect
+ - name: normalize
+ - name: log_compress
diff --git a/datasets/oslo/F_motion/README.md b/datasets/oslo/F_motion/README.md
index f8380ee..dd2757d 100644
--- a/datasets/oslo/F_motion/README.md
+++ b/datasets/oslo/F_motion/README.md
@@ -1,4 +1,5 @@
---
+name: oslo-f-motion
pretty_name: "USTB - Motion Estimation (SWE / ARFI, Verasonics L7-4)"
license: cc-by-4.0
task_categories:
@@ -18,18 +19,23 @@ size_categories:
# USTB - Motion Estimation (SWE / ARFI, Verasonics L7-4)
-Part of the **UltraSound ToolBox (USTB) Channel Capture Collection** contributed to the
-[OpenH-RF](https://github.com/open-h/OpenH-RF) initiative. All acquisitions are stored in the
-*zea* HDF5 file format (zea_version 0.1.6) and contain raw pre-beamformed
-channel data (`/data/raw_data`).
+
+
+*First push-track sequence (frames 1-49) of [`SWE_L7_type_III.hdf5`](https://huggingface.co/datasets/nvidia/OpenH-RF/blob/main/oslo/F_motion/SWE_L7_type_III.hdf5): B-mode (left) and axial displacement between consecutive frames (right), a lag-one autocorrelation (Kasai) estimate on the IQ beamformed with `pipeline.yaml`. The displacement estimate is not part of the reference pipeline.*
## Dataset Description
+Part of the **UltraSound ToolBox (USTB) Channel Capture Collection** (see the [collection card](../README.md)).
+
Shear-wave elastography (SWE) and acoustic-radiation-force-impulse (ARFI) push-tracking phantom acquisitions on a Verasonics Vantage 256 with an L7-4 linear array. Each acquisition contains many high-frame-rate tracking frames following an acoustic push, suitable for tissue-motion and shear-wave-velocity estimation.
-## Dataset Contributors
+## Dataset Contributor(s)
-University of Oslo (UiO), Department of Informatics. Primary contact: Ole Marius Hoel Rindal (omrindal@ifi.uio.no). Team: Ole Marius Hoel Rindal, Yucel Karabiyik, Sven Peter Nasholm, Andreas Austeng.
+- Ole Marius Hoel Rindal (primary contact)
+- Yucel Karabiyik
+- Sven Peter Nasholm
+- Andreas Austeng
+- University of Oslo (UiO), Department of Informatics
## Dataset Creation Date
@@ -37,9 +43,7 @@ University of Oslo (UiO), Department of Informatics. Primary contact: Ole Marius
## License / Terms of Use
-Released under **Creative Commons Attribution 4.0 International (CC BY 4.0)** — see the `LICENCE`
-file at the submission root (this license is also declared in the YAML frontmatter above). The
-contributed data is cleared for this license. The UltraSound ToolBox (USTB) Channel Capture Collection, University of Oslo. Contributed to OpenH-RF. Zenodo record 20261898.
+[Creative Commons Attribution 4.0 International (CC BY 4.0)](https://creativecommons.org/licenses/by/4.0/legalcode.en). Retain attribution and identify modifications when reusing the data.
## Intended Usage
@@ -49,18 +53,27 @@ Motion estimation (RFP task 6.4): shear-wave velocity estimation, ARFI displacem
- **Data Collection Method:** phantom
- **Labeling Method:** Derived (elastography phantom of known/typical stiffness classes).
-- **Acquisition system:** probe(s) L7-4;
- element positions stored in `/probe/probe_geometry` (meters); center frequency, sampling
- frequency and sound speed stored per acquisition in `/scan` (see per-sample feature table).
+- **Acquisition system:** probe(s) L7-4; element positions stored in `/probe/probe_geometry` (meters); center frequency, sampling frequency and sound speed stored per acquisition in `/scan` (see per-sample feature table).
+
+## Processing the Dataset
+
+The example acquisition can be processed with the `pipeline.yaml` definition in this folder and the [zea library](https://github.com/tue-bmd/zea).
+
+`zea` streams the data from the Hugging Face Hub and processes it according to the pipeline. You can try it out with the following command:
+
+```bash
+zea process \
+ --dataset hf://nvidia/OpenH-RF/oslo/F_motion/SWE_L7_type_III.hdf5 \
+ --config hf://nvidia/OpenH-RF/oslo/F_motion/pipeline.yaml
+```
+
+This `pipeline.yaml` holds the pipeline and display window of that acquisition. Alternatively, all acquisitions can be processed with the `reconstruct.py` [script](https://github.com/open-h/OpenH-RF/blob/main/datasets/oslo/reconstruct.py) at the root of this collection, as provided in the [OpenH-RF GitHub repository](https://github.com/open-h/OpenH-RF), together with the `pipeline*.yaml` definitions at the collection root and the [zea library](https://github.com/tue-bmd/zea). The script streams the data from the Hugging Face Hub; `parameters.yaml` picks the pipeline, display window and dynamic range per acquisition (see the [collection card](../README.md#processing-the-dataset)). These plane-wave tracking acquisitions use the non-focused `compound` pipeline, and the reference reconstruction shows a single tracking frame.
## Dataset Format
-All acquisitions are stored in the **zea** HDF5 file format. Each `.hdf5` file is a single
-acquisition with raw channel data `/data/raw_data` of shape
-`(n_frames, n_tx, n_ax, n_el, n_ch)` and a fully populated `/scan` group describing the transmit
-sequence (delays, focus distances, steering angles, apodization, timing). Data type: RF (n_ch=1).
-No demodulation or decimation was applied during packaging beyond conversion from the USTB
-Ultrasound File Format (UFF) to zea; RF data is demodulated inside the reconstruction pipeline.
+[zea v0.1.6](https://github.com/tue-bmd/zea)
+
+All acquisitions are stored in the **zea** HDF5 file format. Each `.hdf5` file is a single acquisition with raw channel data `/data/raw_data` of shape `(n_frames, n_tx, n_ax, n_el, n_ch)` and a fully populated `/scan` group describing the transmit sequence (delays, focus distances, steering angles, apodization, timing). Data type: RF (n_ch=1). No demodulation or decimation was applied during packaging beyond conversion from the USTB Ultrasound File Format (UFF) to zea; RF data is demodulated inside the reconstruction pipeline.
## Dataset Quantification
@@ -103,20 +116,9 @@ No human or animal subjects. Elastography phantoms. Scanner: Verasonics Vantage
## Data Validation
-A Delay-And-Sum `zea.Pipeline` is provided in the **`pipeline.yaml` at the submission root** and
-run by the single **`reconstruct.py` at the submission root**:
-`cast -> demodulate -> delay-and-sum beamform -> envelope detect -> normalize -> log compress`
-(RF is demodulated in-pipeline; IQ uses a baseband pipeline). The script is geometry-driven and
-recurses into every sub-dataset folder; running `python reconstruct.py` from the root reconstructs
-every `.hdf5` in the collection (or pass a folder-qualified path for a single acquisition) and writes
-`_zea_bmode.png` next to each file as a portable check that the recorded geometry and timing
-are correct. These plane-wave tracking acquisitions use the non-focused `compound` pipeline, and the
-reference reconstruction shows a single tracking frame.
-
-The reference B-mode images committed alongside the data (`_bmode.png`) are produced with the
-UltraSound ToolBox (USTB) MATLAB Delay-And-Sum beamformer — the exact per-dataset reconstruction
-used in the public USTB dataset catalog (https://unioslo.github.io/USTB/datasets.html). These are
-the recommended reference reconstructions for visual verification.
+A Delay-And-Sum `zea.Pipeline` (`cast -> demodulate -> delay-and-sum beamform -> envelope detect -> normalize -> log compress`; RF is demodulated in-pipeline, IQ uses a baseband pipeline) reconstructs every acquisition as a portable check that the recorded geometry and timing are correct (see *Processing the Dataset*).
+
+The reference B-mode images committed alongside the data (`_bmode.png`) are produced with the UltraSound ToolBox (USTB) MATLAB Delay-And-Sum beamformer — the exact per-dataset reconstruction used in the public USTB dataset catalog (https://unioslo.github.io/USTB/datasets.html). These are the recommended reference reconstructions for visual verification.
## Known Issues
@@ -125,3 +127,7 @@ Push-track sequences contain many frames at a high frame rate; the B-mode refere
## Ethical Considerations
Phantom acquisitions; no human or animal subjects. No ethical considerations beyond standard laboratory practice.
+
+## Citation
+
+Please cite the UltraSound ToolBox (USTB) Channel Capture Collection, University of Oslo (Zenodo record 20261898).
diff --git a/datasets/oslo/F_motion/assets/hero.gif b/datasets/oslo/F_motion/assets/hero.gif
new file mode 100644
index 0000000..840b229
Binary files /dev/null and b/datasets/oslo/F_motion/assets/hero.gif differ
diff --git a/datasets/oslo/F_motion/assets/main.png b/datasets/oslo/F_motion/assets/main.png
new file mode 100644
index 0000000..78bb0a1
Binary files /dev/null and b/datasets/oslo/F_motion/assets/main.png differ
diff --git a/datasets/oslo/F_motion/pipeline.yaml b/datasets/oslo/F_motion/pipeline.yaml
new file mode 100644
index 0000000..55e9280
--- /dev/null
+++ b/datasets/oslo/F_motion/pipeline.yaml
@@ -0,0 +1,29 @@
+# zea pipeline for F_motion/SWE_L7_type_III.hdf5, the example acquisition of this sub-dataset.
+# The shared ../pipeline.yaml plus the per-acquisition settings that
+# ../reconstruct.py takes from ../parameters.yaml (display window in metres,
+# dynamic range), so `zea process` renders it standalone.
+# zea process writes the pixel array as-is, so the grid is sized for square
+# pixels.
+
+parameters:
+ f_number: 1.75
+ grid_size_x: 585
+ grid_size_z: 600
+ dynamic_range: [-60, 0]
+ selected_transmits: all
+ zlims: [0.001, 0.04]
+ xlims: [-0.019, 0.019]
+pipeline:
+ operations:
+ - name: keras.ops.cast
+ params:
+ dtype: float32
+ - name: apply_window
+ - name: demodulate
+ - name: beamform
+ params:
+ beamformer: delay_and_sum
+ enable_pfield: false
+ - name: envelope_detect
+ - name: normalize
+ - name: log_compress
diff --git a/datasets/oslo/README.md b/datasets/oslo/README.md
index 5176f0a..f034e93 100644
--- a/datasets/oslo/README.md
+++ b/datasets/oslo/README.md
@@ -1,5 +1,6 @@
---
-pretty_name: "OpenH-RF — UltraSound ToolBox (USTB) Channel Capture Collection"
+name: oslo
+pretty_name: "UltraSound ToolBox (USTB) Channel Capture Collection"
license: cc-by-4.0
task_categories:
- image-to-image
@@ -15,25 +16,17 @@ size_categories:
- n<1K
---
-# UltraSound ToolBox (USTB) Channel Capture Collection — OpenH-RF Submission
+# UltraSound ToolBox (USTB) Channel Capture Collection
-Contributed by the **University of Oslo (UiO), Department of Informatics** (the USTB team)
-to the [OpenH-RF](https://github.com/open-h/OpenH-RF) initiative. All data is pre-beamformed
-(raw channel-capture) ultrasound stored in the **zea** HDF5 format (`zea_version 0.1.6`,
-meeting the OpenH-RF minimum format version `0.1.4`) and released under **CC BY 4.0**.
+
-## OpenH-RF Release Inventory
+*First frames reconstructed from the raw channel data with `reconstruct.py`. Top: [`A_cardiac/Verasonics_P2-4_parasternal_long_subject_1`](https://huggingface.co/datasets/nvidia/OpenH-RF/blob/main/oslo/A_cardiac/Verasonics_P2-4_parasternal_long_subject_1.hdf5), [`A_cardiac/Verasonics_P2-4_apical_four_chamber_subject_1`](https://huggingface.co/datasets/nvidia/OpenH-RF/blob/main/oslo/A_cardiac/Verasonics_P2-4_apical_four_chamber_subject_1.hdf5), [`C_verasonics_phantom/FI_P4_cysts_center`](https://huggingface.co/datasets/nvidia/OpenH-RF/blob/main/oslo/C_verasonics_phantom/FI_P4_cysts_center.hdf5). Bottom: [`B_carotid/L7_FI_carotid_cross_1`](https://huggingface.co/datasets/nvidia/OpenH-RF/blob/main/oslo/B_carotid/L7_FI_carotid_cross_1.hdf5), [`C_verasonics_phantom/L7_FI_Verasonics_CIRS`](https://huggingface.co/datasets/nvidia/OpenH-RF/blob/main/oslo/C_verasonics_phantom/L7_FI_Verasonics_CIRS.hdf5), [`D_alpinion_phantom/Alpinion_L3-8_CPWC_hypoechoic`](https://huggingface.co/datasets/nvidia/OpenH-RF/blob/main/oslo/D_alpinion_phantom/Alpinion_L3-8_CPWC_hypoechoic.hdf5), [`E_simulation/PICMUS_numerical_calib_v2`](https://huggingface.co/datasets/nvidia/OpenH-RF/blob/main/oslo/E_simulation/PICMUS_numerical_calib_v2.hdf5). Panels are scaled to a common height per row, not to a common physical scale.*
-**Current OpenH-RF release:** 39 HDF5 files; 8.61 GB (8,613,593,088 bytes) stored; root `zea_version` **0.1.6**. Sizes include all HDF5 contents and use decimal units (MB = 10^6 bytes, GB = 10^9 bytes, TB = 10^12 bytes), not decoded-array memory or original-source download sizes.
+## Dataset Description
-## Contents
+Contributed by the **University of Oslo (UiO), Department of Informatics** (the USTB team) to the [OpenH-RF](https://github.com/open-h/OpenH-RF) initiative. All data is pre-beamformed (raw channel-capture) ultrasound stored in the **zea** HDF5 format and released under **CC BY 4.0**.
-39 acquisitions packaged into six application sub-datasets. Each sub-dataset folder contains its
-zea `.hdf5` files, a Hugging Face–style `README.md` data card, and one reference B-mode PNG per
-acquisition. The **`reconstruct.py`, `pipeline.yaml`, and the CC BY 4.0 `LICENCE` live once at the
-submission root** — the reconstruction reconstructs every sub-dataset (the pipeline is identical
-across folders), and the single LICENCE covers the whole collection (each data card also declares
-`license: cc-by-4.0` in its YAML frontmatter).
+39 acquisitions packaged into six application sub-datasets. Each sub-dataset folder contains its zea `.hdf5` files, a Hugging Face–style `README.md` data card, and one reference B-mode PNG per acquisition. The **`reconstruct.py`, `pipeline.yaml`, and the CC BY 4.0 `LICENCE` live once at the submission root** — the reconstruction reconstructs every sub-dataset (the pipeline is identical across folders), and the single LICENCE covers the whole collection (each data card also declares `license: cc-by-4.0` in its YAML frontmatter).
| Folder | Sub-dataset | Tier | RFP task | Acq. |
|---|---|---|---|---|
@@ -46,23 +39,37 @@ across folders), and the single LICENCE covers the whole collection (each data c
Total: **39 acquisitions**, 8.61 GB of stored HDF5 data.
-## How to reconstruct
+## Dataset Contributor(s)
+
+- Ole Marius Hoel Rindal (primary contact)
+- Yucel Karabiyik
+- Sven Peter Nasholm
+- Andreas Austeng
+- University of Oslo (UiO), Department of Informatics
+
+## Dataset Creation Date
+
+06/23/2026 (packaging date; original acquisitions/simulations were produced between 2016 and 2023).
+
+## License / Terms of Use
+
+[Creative Commons Attribution 4.0 International (CC BY 4.0)](https://creativecommons.org/licenses/by/4.0/legalcode.en). Retain attribution and identify modifications when reusing the data.
+
+## Processing the Dataset
+
+Every acquisition is reconstructable from the file alone — all acquisition parameters live in the zea `/scan` and `/probe` groups. The acquisitions can be processed with the `reconstruct.py` [script](https://github.com/open-h/OpenH-RF/blob/main/datasets/oslo/reconstruct.py), as provided in the [OpenH-RF GitHub repository](https://github.com/open-h/OpenH-RF), together with the `pipeline*.yaml` and `parameters.yaml` definitions in this folder and the [zea library](https://github.com/tue-bmd/zea). The script streams the data from the Hugging Face Hub: set `PATHS` to the acquisition to reconstruct (default: the apical four-chamber cardiac scan above) and `REFOCUS = True` to also emit the REFoCUS variant. See [Reconstruction Details](#reconstruction-details) for how each acquisition's pipeline is chosen. Each sub-dataset folder also holds a `pipeline.yaml` for its example acquisition, so it can be rendered with a single `zea process` command (see the sub-dataset cards).
-Every acquisition is reconstructable from the file alone — all acquisition parameters live in the
-zea `/scan` and `/probe` groups. A single `reconstruct.py` at the submission root reconstructs
-every acquisition in every sub-dataset folder:
+## Dataset Format
-```bash
-export KERAS_BACKEND=jax
-python reconstruct.py # standard recon for every .hdf5
-python reconstruct.py --refocus # also emit REFoCUS where enabled
-python reconstruct.py A_cardiac/.hdf5 # a single acquisition
-```
+[zea v0.1.6](https://github.com/tue-bmd/zea)
-All reconstruction choices live in **`parameters.yaml`** — one entry per acquisition giving its
-`pipeline` (which `zea.Pipeline` to use), display window (`zlims`/`xlims` in mm) and `dynamic_range`.
-Every acquisition uses the same workflow (load parameters → run the pipeline → plot); there is no
-per-file logic in the script. Each `pipeline` value maps to a `zea.Pipeline` YAML at the root:
+## Dataset Quantification
+
+**Current OpenH-RF release:** 39 HDF5 files; 8.61 GB (8,613,593,088 bytes) stored; root `zea_version` **0.1.6**. Sizes include all HDF5 contents and use decimal units (MB = 10^6 bytes, GB = 10^9 bytes, TB = 10^12 bytes), not decoded-array memory or original-source download sizes.
+
+## Reconstruction Details
+
+All reconstruction choices live in **`parameters.yaml`** — one entry per acquisition giving its `pipeline` (which `zea.Pipeline` to use), display window (`zlims`/`xlims` in mm) and `dynamic_range`. Every acquisition uses the same workflow (load parameters → run the pipeline → plot); there is no per-file logic in the script. Each `pipeline` value maps to a `zea.Pipeline` YAML at the root:
| `pipeline` | Used for | `zea.Pipeline` |
|---|---|---|
@@ -71,44 +78,18 @@ per-file logic in the script. Each `pipeline` value maps to a `zea.Pipeline` YAM
| `iq` | baseband IQ (`n_ch == 2`, e.g. PICMUS) | `pipeline_iq.yaml` (no demodulation step). |
| `compound` | non-focused linear (plane-wave / diverging / STA / SWE-ARFI) | `pipeline.yaml`: coherent compounding, no pfield (these insonify the whole field of view). |
-The pipelines share the same shape as zea's regular B-mode pipeline (`cast → apply_window →
-demodulate → beamform → envelope → normalize → log_compress`). Scanline imaging
-uses the same `beamform` op with a scanline grid plus receive apodization rather than a dedicated
-scanline-specific operation. Two zea features used in this submission are scanline receive
-apodization (`enable_receive_apodization`) and `focal_region_length` (focal-region delay blending,
-Rindal et al., IUS 2018).
-
-An acquisition may also set `refocus: true` in `parameters.yaml`. When `reconstruct.py` is run
-with the `--refocus` flag (off by default), it additionally runs a REFoCUS reconstruction for
-those acquisitions — transmit-encoding recovery (Bottenus, 2018) that
-inverts the transmit-encoding matrix to recover the multistatic (full-matrix-capture) dataset
-before pressure-field-weighted DAS — and writes a `_zea_refocus_bmode.png` alongside the
-standard reconstruction. REFoCUS is enabled for **every acquisition with enough encoded transmits
-for the inversion to be well posed (≥ 8 transmit events)** — coherent plane-wave compounding
-(CPWC), diverging waves (DW), and focused linear (FI) and phased-array sector scans. Phased-array
-`sector` acquisitions use `pipeline_refocus_sector.yaml` (polar grid + scan conversion, preserving
-the sector geometry); every other geometry uses the linear/cartesian `pipeline_refocus.yaml`.
-REFoCUS is **not** enabled where the inversion is ill-posed or undefined: single/few-transmit
-acquisitions (the `n_tx = 1` plane-wave tracking sets and single-angle simulations, PICMUS's
-5-angle IQ) and synthetic transmit aperture (STA) acquisitions, which are already multistatic.
+The pipelines share the same shape as zea's regular B-mode pipeline (`cast → apply_window → demodulate → beamform → envelope → normalize → log_compress`). Scanline imaging uses the same `beamform` op with a scanline grid plus receive apodization rather than a dedicated scanline-specific operation. Two zea features used in this submission are scanline receive apodization (`enable_receive_apodization`) and `focal_region_length` (focal-region delay blending, Rindal et al., IUS 2018).
+
+An acquisition may also set `refocus: true` in `parameters.yaml`. With `REFOCUS = True` (off by default), `reconstruct.py` additionally runs a REFoCUS reconstruction for those acquisitions — transmit-encoding recovery (Bottenus, 2018) that inverts the transmit-encoding matrix to recover the multistatic (full-matrix-capture) dataset before pressure-field-weighted DAS — and writes a `_zea_refocus_bmode.png` alongside the standard reconstruction. REFoCUS is enabled for **every acquisition with enough encoded transmits for the inversion to be well posed (≥ 8 transmit events)** — coherent plane-wave compounding (CPWC), diverging waves (DW), and focused linear (FI) and phased-array sector scans. Phased-array `sector` acquisitions use `pipeline_refocus_sector.yaml` (polar grid + scan conversion, preserving the sector geometry); every other geometry uses the linear/cartesian `pipeline_refocus.yaml`. REFoCUS is **not** enabled where the inversion is ill-posed or undefined: single/few-transmit acquisitions (the `n_tx = 1` plane-wave tracking sets and single-angle simulations, PICMUS's 5-angle IQ) and synthetic transmit aperture (STA) acquisitions, which are already multistatic.
## Reference images
Each acquisition ships with:
- `_zea_bmode.png` — produced by the root `reconstruct.py` (zea); the reproducible reference.
- `_zea_bmode_old.png` — the initial v2 zea reconstruction (kept for comparison).
-- `_bmode.png` — the canonical USTB MATLAB Delay-And-Sum reconstruction from the public
- [USTB dataset catalog](https://unioslo.github.io/USTB/datasets.html), for cross-validation.
-- `_zea_refocus_bmode.png` — REFoCUS variant, for acquisitions with `refocus: true`
- (CPWC / DW / focused FI / sector with ≥ 8 transmits; not STA or single/few-transmit sets).
-
-## Licensing & attribution
-
-Released under **CC BY 4.0**. Please cite the UltraSound ToolBox (USTB), University of Oslo
-(Zenodo record 20261898). `PICMUS_numerical_calib_v2` (group E) was created **in collaboration
-with our group** as part of the PICMUS effort and is included on that basis; the other PICMUS
-datasets are excluded.
+- `_bmode.png` — the canonical USTB MATLAB Delay-And-Sum reconstruction from the public [USTB dataset catalog](https://unioslo.github.io/USTB/datasets.html), for cross-validation.
+- `_zea_refocus_bmode.png` — REFoCUS variant, for acquisitions with `refocus: true` (CPWC / DW / focused FI / sector with ≥ 8 transmits; not STA or single/few-transmit sets).
-## Contact
+## Citation
-Ole Marius Hoel Rindal — omrindal@ifi.uio.no (UiO, USTB).
+Please cite the UltraSound ToolBox (USTB) Channel Capture Collection, University of Oslo (Zenodo record 20261898). `PICMUS_numerical_calib_v2` (group E) was created **in collaboration with our group** as part of the PICMUS effort and is included on that basis; the other PICMUS datasets are excluded.
diff --git a/datasets/oslo/assets/Verasonics_P2-4_apical_four_chamber_subject_1_zea_bmode.png b/datasets/oslo/assets/Verasonics_P2-4_apical_four_chamber_subject_1_zea_bmode.png
new file mode 100644
index 0000000..649ec48
Binary files /dev/null and b/datasets/oslo/assets/Verasonics_P2-4_apical_four_chamber_subject_1_zea_bmode.png differ
diff --git a/datasets/oslo/assets/hero.png b/datasets/oslo/assets/hero.png
new file mode 100644
index 0000000..01324e7
Binary files /dev/null and b/datasets/oslo/assets/hero.png differ
diff --git a/datasets/oslo/assets/main.png b/datasets/oslo/assets/main.png
new file mode 100644
index 0000000..db908bf
Binary files /dev/null and b/datasets/oslo/assets/main.png differ
diff --git a/datasets/oslo/reconstruct.py b/datasets/oslo/reconstruct.py
index d53f262..2fe65fa 100644
--- a/datasets/oslo/reconstruct.py
+++ b/datasets/oslo/reconstruct.py
@@ -40,6 +40,7 @@
from pathlib import Path
+import keras
import matplotlib.pyplot as plt
import numpy as np
import zea
@@ -95,7 +96,7 @@ def reconstruct(
outputs = pipeline(data=data, **pipeline.prepare_parameters(parameters))
image = np.array(
zea.display.to_8bit(
- np.squeeze(np.array(outputs["data"])),
+ np.squeeze(keras.ops.convert_to_numpy(outputs["data"])),
dynamic_range=parameters.dynamic_range,
)
)
@@ -121,7 +122,8 @@ def reconstruct(
ax.set_ylabel("z [mm]")
ax.set_title(Path(path).stem, fontsize=8)
- out_path = HERE / (Path(path).stem + suffix)
+ out_path = HERE / "assets" / (Path(path).stem + suffix)
+ Path(out_path).parent.mkdir(parents=True, exist_ok=True)
fig.savefig(str(out_path), bbox_inches="tight", dpi=110)
plt.close(fig)
print(f"{Path(path).parent.name}/{Path(path).name} -> {out_path.name}")
diff --git a/datasets/politorino/README.md b/datasets/politorino/README.md
index f3c70bd..5be1344 100644
--- a/datasets/politorino/README.md
+++ b/datasets/politorino/README.md
@@ -1,4 +1,5 @@
---
+name: politorino
pretty_name: High Frame Rate Fascicle Tracking - PoliTO
license: cc-by-4.0
task_categories:
@@ -16,15 +17,30 @@ size_categories:
- n<1K
---
-# Data Card — High Frame Rate Fascicle Tracking - PoliTO - Torino, Italy
+# PoliTO High Frame Rate Fascicle Tracking
+
+
+
+*Cine loop of treadmill walking at 2 km/h, [`data/PAT02/PAT02_w1.hdf5`](https://huggingface.co/datasets/nvidia/OpenH-RF/blob/main/politorino/data/PAT02/PAT02_w1.hdf5), reconstructed from the raw channel data with the `pipeline.yaml` in this folder.*
## Dataset Description
The dataset comprises in-vivo human musculoskeletal raw ultrasound data during dynamic tasks. It includes the acquisition of the medial gastrocnemius on 5 healthy volunteers during heel raises and treadmill walking. The data is acquired with a Verasonics Vantage 256 research platform and a 128-element linear array probe (L11-5v) at 500 fps for 9.6 s per acquisition. Each subject was imaged during six task conditions: cyclical heel raises and drops at a fixed frequency provided by a metronome at 60 (hr1), 90 (hr2), and 120 bpm (hr3) and walking at 2 (w1), 4 (w2), and 5 (w3) km/h. We provide the raw data, the beamformed DAS and FDMAS images, and the automated fascicle tracking obtained with UltraTimTrack (https://github.com/timvanderzee/UltraTimTrack). The tracking data was obtained on the first 9s of sub-sampled .mp4 videos at three frame rates: 25 fps, 50 fps and 125 fps. The tracking data is provided for each frame rate and a Python code is provided to correctly visualize the data on the reconstructed images. **Data type: in-vivo**
-## Dataset Contributors
+## Dataset Contributor(s)
+
+Personnel involved in raw data acquisition, beamforming, annotation, dataset preparation and analysis:
-Contributors include the personnel involved in raw data acquisition, beamforming, annotation, dataset preparation and analysis: E. Cesti, M. Carbonaro, M. Boccardo, F. Truscello, S. Seoni, G.L. Cerone, K.M. Meiburger, G. Bardoscia, B.J. Raiteri, and A. Botter.
+- E. Cesti
+- M. Carbonaro
+- M. Boccardo
+- F. Truscello
+- S. Seoni
+- G.L. Cerone
+- K.M. Meiburger
+- G. Bardoscia
+- B.J. Raiteri
+- A. Botter
## Dataset Creation Date
@@ -32,8 +48,7 @@ Contributors include the personnel involved in raw data acquisition, beamforming
## License / Terms of Use
-[Creative Commons Attribution 4.0 International (CC BY 4.0)](https://creativecommons.org/licenses/by/4.0/legalcode.en).
-The data is cleared for this license (see ethical considerations below).
+[Creative Commons Attribution 4.0 International (CC BY 4.0)](https://creativecommons.org/licenses/by/4.0/legalcode.en). Retain attribution and identify modifications when reusing the data.
## Intended Usage
@@ -43,21 +58,24 @@ This data was employed for an initial study evaluating fascicle tracking algorit
- **Data Collection Method:** in-vivo human musculoskeletal
- **Labeling Method:** derived fascicle tracking from UltraTimTrack
-- **Acquisition system:** 128-element linear array (L11-5v),
- sampling 31.25 MHz, center frequency 7.6 MHz
+- **Acquisition system:** 128-element linear array (L11-5v), sampling 31.25 MHz, center frequency 7.6 MHz
-## Dataset Format
+## Processing the Dataset
+
+The acquisitions can be processed with the `reconstruct.py` [script](https://github.com/open-h/OpenH-RF/blob/main/datasets/politorino/reconstruct.py) as provided in the [OpenH-RF GitHub repository](https://github.com/open-h/OpenH-RF), together with the `pipeline.yaml` definition in this folder and the [zea library](https://github.com/tue-bmd/zea). The script streams the data from the Hugging Face Hub.
-Submitted in the [`zea` file format](https://zea.readthedocs.io/en/latest/)
-(one HDF5 file per acquisition).
-`reconstruct.py` reconstructs a B-mode from the raw channel data and overlays
-the stored fascicle tracking on it, writing a `.png`. An example output is
-provided. The constants at the top of the script select what is drawn:
+The script reconstructs a B-mode from the raw channel data and overlays the stored fascicle tracking on it, writing a `.png`. The constants at the top of the script select what is drawn:
- `FRAME` -- index of the acquisition frame to reconstruct
- `FPS` -- which stored tracking rate to overlay (25, 50 or 125 fps)
- `TRACK_INDEX` -- index of the tracking sample within that rate
+## Dataset Format
+
+[zea v0.1.6](https://github.com/tue-bmd/zea)
+
+Submitted in the [`zea` file format](https://zea.readthedocs.io/en/latest/) (one HDF5 file per acquisition).
+
Per-sample contents of the HDF5:
| Group / field | Shape | Dtype | Units | Description |
@@ -69,7 +87,6 @@ Per-sample contents of the HDF5:
| `probe` | -- | -- | -- | element width, probe_center_frequency, probe_geometry |
| `metadata/tracking_` | -- | -- | -- | Tracking data as saved by UltraTimTrack |
-
## Dataset Quantification
**Current OpenH-RF release:** 30 HDF5 files; 169.95 GB (169,950,314,496 bytes) stored; root `zea_version` **0.1.6**. Sizes include all HDF5 contents and use decimal units (MB = 10^6 bytes, GB = 10^9 bytes, TB = 10^12 bytes), not decoded-array memory or original-source download sizes.
@@ -79,25 +96,21 @@ Per-sample contents of the HDF5:
## Subject Metadata
-Five healthy subjects (2 men, 3 women; (mean ± SD) age: 25.6 ± 1.3 yr, height: 1.78 ± 0.06 m, weight: 67 ± 11 kg) were recruited. All data were acquired with the same Verasonics system and probe.
+Five healthy subjects (2 men, 3 women; (mean ± SD) age: 25.6 ± 1.3 yr, height: 1.78 ± 0.06 m, weight: 67 ± 11 kg) were recruited. All data were acquired with the same Verasonics system and probe.
## Data Validation
-[`reconstruct.py`](reconstruct.py) builds a `zea.Pipeline` of DAS beamforming →
-envelope detection → normalization → log-compression **in code** and reconstructs
-a B-mode directly from `raw_data` — showing the raw-to-image flow without any
-config file. It contains also the code employed to view the plotting of the tracking data. It also saves the pipeline to [`pipeline.yaml`](pipeline.yaml) as a
-shareable recipe.
+`reconstruct.py` builds a `zea.Pipeline` of DAS beamforming → envelope detection → normalization → log-compression **in code** and reconstructs a B-mode directly from `raw_data` — showing the raw-to-image flow without any config file. It contains also the code employed to view the plotting of the tracking data. It also saves the pipeline to `pipeline.yaml` as a shareable recipe.
## Known Issues
-- The tracking data for three subjects (PAT01, PAT04, PAT05) were obtained on the reconstructed images after a horizontal flip. This is noted in the file and the provided code to view the tracking data automatically checks for this and flips the data, if needed.
+- The tracking data for three subjects (PAT01, PAT04, PAT05) were obtained on the reconstructed images after a horizontal flip. This is noted in the file and the provided code to view the tracking data automatically checks for this and flips the data, if needed.
- The tracking data covers the first 9s out of the provided 9.6s of the raw data.
- There is a small offset in depth between the reconstructed data used for the tracking and the raw data. The `reconstruct.py` code provides the correction at lines 233-240.
## Ethical Considerations
-The study was conducted in accordance with the Declaration of Helsinki and the procedure approved by the Institutional Ethics Committee of Politecnico di Torino (reference number: 2772/2025). Informed consent was obtained from all participants after receiving detailed explanation of the study procedures and before participating in the study.
+The study was conducted in accordance with the Declaration of Helsinki and the procedure approved by the Institutional Ethics Committee of Politecnico di Torino (reference number: 2772/2025). Informed consent was obtained from all participants after receiving detailed explanation of the study procedures and before participating in the study.
## Citation
diff --git a/datasets/politorino/assets/PAT02_w1.gif b/datasets/politorino/assets/PAT02_w1.gif
new file mode 100644
index 0000000..4ac2f57
Binary files /dev/null and b/datasets/politorino/assets/PAT02_w1.gif differ
diff --git a/datasets/politorino/assets/PAT02_w1_reconstructed.png b/datasets/politorino/assets/PAT02_w1_reconstructed.png
new file mode 100644
index 0000000..47b0655
Binary files /dev/null and b/datasets/politorino/assets/PAT02_w1_reconstructed.png differ
diff --git a/datasets/politorino/assets/main.png b/datasets/politorino/assets/main.png
new file mode 100644
index 0000000..15f388f
Binary files /dev/null and b/datasets/politorino/assets/main.png differ
diff --git a/datasets/politorino/reconstruct.py b/datasets/politorino/reconstruct.py
index 1fd9681..06dd0a3 100644
--- a/datasets/politorino/reconstruct.py
+++ b/datasets/politorino/reconstruct.py
@@ -44,7 +44,7 @@
# Defaults stream straight from the published corpus. Swap any of these for a
# local path to run against your own copy.
ZEA_FILE = "hf://nvidia/OpenH-RF/politorino/data/PAT02/PAT02_w1.hdf5"
-OUT = HERE / "PAT02_w1_reconstructed.png"
+OUT = HERE / "assets" / "PAT02_w1_reconstructed.png"
SAVE_PIPELINE = None # Optionally write the pipeline to a reusable pipeline.yaml
FRAME = 0
FPS = 50 # tracking rate to overlay: 25, 50 or 125
@@ -191,6 +191,7 @@ def row_to_mm(row):
ax.set_ylabel("Axial depth [mm]")
ax.legend(loc="upper right", fontsize=8)
fig.tight_layout()
+ Path(OUT).parent.mkdir(parents=True, exist_ok=True)
fig.savefig(str(OUT), dpi=150, bbox_inches="tight")
print(f"Saved {OUT}")
diff --git a/datasets/resolvestroke/README.md b/datasets/resolvestroke/README.md
index 2aea793..3aa5ca8 100644
--- a/datasets/resolvestroke/README.md
+++ b/datasets/resolvestroke/README.md
@@ -1,24 +1,67 @@
-# OpenH-RF - Resolve Stroke datasets
-
-[Resolve Stroke](https://www.resolvestroke.com/) develops SYLVER, a
-software-driven ultrasound platform, that supports clinical assessment in
-patients suspected of, or at risk for, cerebral perfusion abnormalities by
-improving visualization of cerebral vasculature and providing complementary
-information on cerebral perfusion.
-SYLVER images with a 32×32 matrix array probe at 2 MHz
-using diverging-wave transmits. CE and FDA clearances are expected in 2026.
-This directory holds the data Resolve Stroke contributes to OpenH-RF: pre-beamformed
-RF/IQ channel data from an imaging phantom, a flow phantom, and in-vivo transcranial
-acquisitions, all de-identified and released under CC BY 4.0. The in-vivo data comes
-from the CPP-approved SCULPT clinical study. Two transmit sequences are included: a
-saddle sequence that images a 2D plane for real-time B-mode, and a 4 kHz
-single-aperture volume sequence for CEUS and blood-flow measurement.
-
-Each dataset directory is a self-contained data card: an HDF5 file, a
-B-mode preview PNG, a `reconstruct.py` + `pipeline.yaml` beamforming recipe, a
-`README.md`, and a `LICENCE` (CC BY 4.0).
-
-## OpenH-RF Release Inventory
+---
+name: resolvestroke
+pretty_name: "Resolve Stroke Transcranial CEUS, Flow and Imaging Phantom Channel Data"
+license: cc-by-4.0
+task_categories:
+ - other
+tags:
+ - ultrasound
+ - iq
+ - openh-rf
+ - 3d
+ - matrix-probe
+ - diverging-wave
+ - contrast-enhanced
+ - power-doppler
+ - transcranial
+ - clinical
+ - phantom
+language:
+ - en
+size_categories:
+ - 100K
+
+*3D power Doppler of the transcranial CEUS acquisition [`clinical/SP03-Left/SP03-Left.hdf5`](https://huggingface.co/datasets/nvidia/OpenH-RF/blob/main/resolvestroke/clinical/SP03-Left/SP03-Left.hdf5) at bolus +10 s, x-z maximum-intensity projection, reconstructed from the released channel data.*
+
+## Dataset Description
+
+[Resolve Stroke](https://www.resolvestroke.com/) develops SYLVER, a software-driven ultrasound platform that supports clinical assessment in patients suspected of, or at risk for, cerebral perfusion abnormalities by improving visualization of cerebral vasculature and providing complementary information on cerebral perfusion. SYLVER images with a 32×32 matrix array probe at 2 MHz using diverging-wave transmits. CE and FDA clearances are expected in 2026. This directory holds the data Resolve Stroke contributes to OpenH-RF: pre-beamformed RF/IQ channel data from an imaging phantom, a flow phantom, and in-vivo transcranial acquisitions, all de-identified and released under CC BY 4.0. The in-vivo data comes from the CPP-approved SCULPT clinical study. Two transmit sequences are included: a saddle sequence that images a 2D plane for real-time B-mode, and a 4 kHz single-aperture volume sequence for CEUS and blood-flow measurement.
+
+Each dataset directory holds its data card (`README.md`), a `reconstruct.py` + `pipeline.yaml` beamforming recipe and, for the CEUS datasets, a power-Doppler reconstruction; the HDF5 files are on the Hub and the preview images in [`assets/`](assets/).
+
+## Dataset Contributor(s)
+
+- Aitana Waelbroeck
+- Carl Ferlay
+- Arthur Chavignon
+- Maxence Reberol (contact)
+- Vincent Hingot
+- Resolve Stroke, 29 Rue du Faubourg Saint-Jacques, 75014 Paris
+
+## Dataset Creation Date
+
+01/23/2026 – 07/09/2026 (per sub-dataset; see each data card).
+
+## License / Terms of Use
+
+[Creative Commons Attribution 4.0 International (CC BY 4.0)](https://creativecommons.org/licenses/by/4.0/legalcode.en). Retain attribution and identify modifications when reusing the data.
+
+## Processing the Dataset
+
+Each sub-dataset has its own `reconstruct.py` and `pipeline.yaml`, as provided in the [OpenH-RF GitHub repository](https://github.com/open-h/OpenH-RF/tree/main/datasets/resolvestroke), built on the [zea library](https://github.com/tue-bmd/zea); the CEUS datasets add a power-Doppler reconstruction. See the data card of each sub-dataset for how to run them.
+
+The Python scripts carry their own `SPDX-License-Identifier: Apache-2.0` header; the dataset itself is CC BY 4.0.
+
+## Dataset Format
+
+[zea v0.1.6](https://github.com/tue-bmd/zea)
+
+## Dataset Quantification
**Current OpenH-RF release:** 43 HDF5 files; 110.62 GB (110,619,394,048 bytes) stored; root `zea_version` **0.1.6**. Sizes include all HDF5 contents and use decimal units (MB = 10^6 bytes, GB = 10^9 bytes, TB = 10^12 bytes), not decoded-array memory or original-source download sizes.
@@ -26,15 +69,59 @@ B-mode preview PNG, a `reconstruct.py` + `pipeline.yaml` beamforming recipe, a
| Path | What's inside |
|------|---------------|
-| `clinical/` | 20 clinical transcranial CEUS acquisitions (SCULPT study, subjects `SP01`–`SP10`, Left/Right). Each subdirectory holds one acquisition's HDF5 (five 1 s bolus wash-in clips), reconstruction scripts, and B-mode / power-Doppler / reference montages. |
-| `phantom_flow/` | Flow-phantom CEUS (CIRS 769 + ATS523A) with microbubble contrast: five 1 s clips capturing a flow-on/flow-off bolus wash-in. Single combined HDF5 + 3D power-Doppler reconstruction. |
-| `phantom_mp/` | Multi-tissue imaging phantom (CIRS 040GSE), pre-beamformed channel data, 1000 volumetric frames of the same static scene (wire targets, cysts, tissue-mimicking background). |
-| `saddle/` | Single-frame anatomical reference B-modes (21 files: the 20 clinical acquisitions + 1 imaging phantom) from the wide-angle "saddle" sequence. These are the structural companion to the clinical CEUS clips. |
+| [`clinical/`](clinical/) | 20 clinical transcranial CEUS acquisitions (SCULPT study, subjects `SP01`–`SP10`, Left/Right), one HDF5 per acquisition (five 1 s bolus wash-in clips) under `clinical//`. All 20 share the same probe, sequence and layout, so one data card, the reconstruction scripts and the pipeline YAMLs live at the `clinical/` root (pick the acquisition with `SUBJECT` at the top of each script). |
+| [`phantom_flow/`](phantom_flow/) | Flow-phantom CEUS (CIRS 769 + ATS523A) with microbubble contrast: five 1 s clips capturing a flow-on/flow-off bolus wash-in. Single combined HDF5 + 3D power-Doppler reconstruction. |
+| [`phantom_mp/`](phantom_mp/) | Multi-tissue imaging phantom (CIRS 040GSE), pre-beamformed channel data, 1000 volumetric frames of the same static scene (wire targets, cysts, tissue-mimicking background). |
+| [`saddle/`](saddle/) | Single-frame anatomical reference B-modes (21 files: the 20 clinical acquisitions + 1 imaging phantom) from the wide-angle "saddle" sequence. These are the structural companion to the clinical CEUS clips. |
+
+## `clinical/` — transcranial CEUS, 20 acquisitions
+
+Ten human subjects of the SCULPT study, two acquisitions each (other side and/or second session), imaged through the temporal acoustic window during a microbubble bolus. Each file holds 20 000 frames of diverging-wave IQ channel data at 4 kHz: five 1 s clips taken before the bolus and at +5, +10, +15 and +20 s. Every file also carries reference maps computed by SYLVER from the complete bolus passage (`custom/computed_references/`: microvascular image and radial velocities on a 0.6 mm Cartesian grid), provided as targets, not as a clinical ground truth.
+
+Power Doppler reconstructed from the released channel data, one x-z projection per acquisition at bolus +10 s:
+
+
+
+The reference microvascular image of the same 20 acquisitions, x-z projection:
+
+
+
+The [data card](clinical/README.md) has the inventory of the 20 acquisitions with the five-clip power Doppler and the reference maps of each, the field table, and the reconstruction scripts.
+
+## `phantom_flow/` — flow phantom CEUS
+
+A CIRS 769 flow phantom with an ATS523A pump, microbubbles flowing through two tubes (4 mm and 2 mm), same sequence and clip structure as the clinical files. The file also carries the tube mask (known geometry, an actual ground truth) and the same computed reference maps as the clinical data.
+
+
+
+*Figure: B-mode of one frame, x-z and y-z sectors.*
+
+
+
+*Figure: power Doppler of the five clips, with the reference `mvi` in the last column.*
+
+
+
+*Figure: computed reference maps (tube mask, `mvi`, radial velocities).*
+
+See the [data card](phantom_flow/README.md).
+
+## `phantom_mp/` — multi-tissue imaging phantom
+
+A CIRS 040GSE phantom, 1000 volumetric frames of the same static scene with the 4 kHz diverging-wave sequence: wire targets, cysts and tissue-mimicking background, for beamforming and resolution studies.
+
+
+
+*Figure: B-mode of one frame, x-z and y-z sectors.*
+
+See the [data card](phantom_mp/README.md).
-## Contributors
+## `saddle/` — anatomical reference B-modes
-Aitana Waelbroeck\*, Carl Ferlay\*, Arthur Chavignon\*, Maxence Reberol\*, Vincent Hingot\*
+One wide-angle diverging-wave frame per acquisition from the "saddle" sequence (9 transmits steered −24° to +24°; each transmit is repeated for four consecutive 256-element receive sub-apertures, so the frame carries the full 1024-element aperture), for the 20 clinical acquisitions and the imaging phantom: the anatomical view at the same probe placement as the CEUS clips.
-_\*Resolve Stroke, 29 Rue du Faubourg Saint-Jacques, 75014 Paris_
+
+*Figure: the 21 saddle B-modes.*
+See the [data card](saddle/README.md).
diff --git a/datasets/resolvestroke/assets/clinical/SP01-Left-1_pd_clips.png b/datasets/resolvestroke/assets/clinical/SP01-Left-1_pd_clips.png
new file mode 100644
index 0000000..3b3fd4b
Binary files /dev/null and b/datasets/resolvestroke/assets/clinical/SP01-Left-1_pd_clips.png differ
diff --git a/datasets/resolvestroke/assets/clinical/SP01-Left-1_references.png b/datasets/resolvestroke/assets/clinical/SP01-Left-1_references.png
new file mode 100644
index 0000000..8ea41df
Binary files /dev/null and b/datasets/resolvestroke/assets/clinical/SP01-Left-1_references.png differ
diff --git a/datasets/resolvestroke/assets/clinical/SP01-Left-2_pd_clips.png b/datasets/resolvestroke/assets/clinical/SP01-Left-2_pd_clips.png
new file mode 100644
index 0000000..fd5ebab
Binary files /dev/null and b/datasets/resolvestroke/assets/clinical/SP01-Left-2_pd_clips.png differ
diff --git a/datasets/resolvestroke/assets/clinical/SP01-Left-2_references.png b/datasets/resolvestroke/assets/clinical/SP01-Left-2_references.png
new file mode 100644
index 0000000..7198003
Binary files /dev/null and b/datasets/resolvestroke/assets/clinical/SP01-Left-2_references.png differ
diff --git a/datasets/resolvestroke/assets/clinical/SP02-Left-1_pd_clips.png b/datasets/resolvestroke/assets/clinical/SP02-Left-1_pd_clips.png
new file mode 100644
index 0000000..076b199
Binary files /dev/null and b/datasets/resolvestroke/assets/clinical/SP02-Left-1_pd_clips.png differ
diff --git a/datasets/resolvestroke/assets/clinical/SP02-Left-1_references.png b/datasets/resolvestroke/assets/clinical/SP02-Left-1_references.png
new file mode 100644
index 0000000..219c0f6
Binary files /dev/null and b/datasets/resolvestroke/assets/clinical/SP02-Left-1_references.png differ
diff --git a/datasets/resolvestroke/assets/clinical/SP02-Left-2_pd_clips.png b/datasets/resolvestroke/assets/clinical/SP02-Left-2_pd_clips.png
new file mode 100644
index 0000000..33e6b97
Binary files /dev/null and b/datasets/resolvestroke/assets/clinical/SP02-Left-2_pd_clips.png differ
diff --git a/datasets/resolvestroke/assets/clinical/SP02-Left-2_references.png b/datasets/resolvestroke/assets/clinical/SP02-Left-2_references.png
new file mode 100644
index 0000000..6cbd2de
Binary files /dev/null and b/datasets/resolvestroke/assets/clinical/SP02-Left-2_references.png differ
diff --git a/datasets/resolvestroke/assets/clinical/SP03-Left_pd_clips.png b/datasets/resolvestroke/assets/clinical/SP03-Left_pd_clips.png
new file mode 100644
index 0000000..87a6164
Binary files /dev/null and b/datasets/resolvestroke/assets/clinical/SP03-Left_pd_clips.png differ
diff --git a/datasets/resolvestroke/assets/clinical/SP03-Left_references.png b/datasets/resolvestroke/assets/clinical/SP03-Left_references.png
new file mode 100644
index 0000000..fdd3301
Binary files /dev/null and b/datasets/resolvestroke/assets/clinical/SP03-Left_references.png differ
diff --git a/datasets/resolvestroke/assets/clinical/SP03-Right_pd_clips.png b/datasets/resolvestroke/assets/clinical/SP03-Right_pd_clips.png
new file mode 100644
index 0000000..6d4c355
Binary files /dev/null and b/datasets/resolvestroke/assets/clinical/SP03-Right_pd_clips.png differ
diff --git a/datasets/resolvestroke/assets/clinical/SP03-Right_references.png b/datasets/resolvestroke/assets/clinical/SP03-Right_references.png
new file mode 100644
index 0000000..7b2ed84
Binary files /dev/null and b/datasets/resolvestroke/assets/clinical/SP03-Right_references.png differ
diff --git a/datasets/resolvestroke/assets/clinical/SP04-Left-1_pd_clips.png b/datasets/resolvestroke/assets/clinical/SP04-Left-1_pd_clips.png
new file mode 100644
index 0000000..7a0b645
Binary files /dev/null and b/datasets/resolvestroke/assets/clinical/SP04-Left-1_pd_clips.png differ
diff --git a/datasets/resolvestroke/assets/clinical/SP04-Left-1_references.png b/datasets/resolvestroke/assets/clinical/SP04-Left-1_references.png
new file mode 100644
index 0000000..ccc6347
Binary files /dev/null and b/datasets/resolvestroke/assets/clinical/SP04-Left-1_references.png differ
diff --git a/datasets/resolvestroke/assets/clinical/SP04-Left-2_pd_clips.png b/datasets/resolvestroke/assets/clinical/SP04-Left-2_pd_clips.png
new file mode 100644
index 0000000..f53652b
Binary files /dev/null and b/datasets/resolvestroke/assets/clinical/SP04-Left-2_pd_clips.png differ
diff --git a/datasets/resolvestroke/assets/clinical/SP04-Left-2_references.png b/datasets/resolvestroke/assets/clinical/SP04-Left-2_references.png
new file mode 100644
index 0000000..6eef596
Binary files /dev/null and b/datasets/resolvestroke/assets/clinical/SP04-Left-2_references.png differ
diff --git a/datasets/resolvestroke/assets/clinical/SP05-Left_pd_clips.png b/datasets/resolvestroke/assets/clinical/SP05-Left_pd_clips.png
new file mode 100644
index 0000000..ff1dd86
Binary files /dev/null and b/datasets/resolvestroke/assets/clinical/SP05-Left_pd_clips.png differ
diff --git a/datasets/resolvestroke/assets/clinical/SP05-Left_references.png b/datasets/resolvestroke/assets/clinical/SP05-Left_references.png
new file mode 100644
index 0000000..3153a7b
Binary files /dev/null and b/datasets/resolvestroke/assets/clinical/SP05-Left_references.png differ
diff --git a/datasets/resolvestroke/assets/clinical/SP05-Right_pd_clips.png b/datasets/resolvestroke/assets/clinical/SP05-Right_pd_clips.png
new file mode 100644
index 0000000..60f2ce5
Binary files /dev/null and b/datasets/resolvestroke/assets/clinical/SP05-Right_pd_clips.png differ
diff --git a/datasets/resolvestroke/assets/clinical/SP05-Right_references.png b/datasets/resolvestroke/assets/clinical/SP05-Right_references.png
new file mode 100644
index 0000000..8d13d07
Binary files /dev/null and b/datasets/resolvestroke/assets/clinical/SP05-Right_references.png differ
diff --git a/datasets/resolvestroke/assets/clinical/SP06-Left_pd_clips.png b/datasets/resolvestroke/assets/clinical/SP06-Left_pd_clips.png
new file mode 100644
index 0000000..807e2cb
Binary files /dev/null and b/datasets/resolvestroke/assets/clinical/SP06-Left_pd_clips.png differ
diff --git a/datasets/resolvestroke/assets/clinical/SP06-Left_references.png b/datasets/resolvestroke/assets/clinical/SP06-Left_references.png
new file mode 100644
index 0000000..4e58759
Binary files /dev/null and b/datasets/resolvestroke/assets/clinical/SP06-Left_references.png differ
diff --git a/datasets/resolvestroke/assets/clinical/SP06-Right_pd_clips.png b/datasets/resolvestroke/assets/clinical/SP06-Right_pd_clips.png
new file mode 100644
index 0000000..4d4ecfd
Binary files /dev/null and b/datasets/resolvestroke/assets/clinical/SP06-Right_pd_clips.png differ
diff --git a/datasets/resolvestroke/assets/clinical/SP06-Right_references.png b/datasets/resolvestroke/assets/clinical/SP06-Right_references.png
new file mode 100644
index 0000000..e27b763
Binary files /dev/null and b/datasets/resolvestroke/assets/clinical/SP06-Right_references.png differ
diff --git a/datasets/resolvestroke/assets/clinical/SP07-Left_pd_clips.png b/datasets/resolvestroke/assets/clinical/SP07-Left_pd_clips.png
new file mode 100644
index 0000000..e9bec7c
Binary files /dev/null and b/datasets/resolvestroke/assets/clinical/SP07-Left_pd_clips.png differ
diff --git a/datasets/resolvestroke/assets/clinical/SP07-Left_references.png b/datasets/resolvestroke/assets/clinical/SP07-Left_references.png
new file mode 100644
index 0000000..1bdc362
Binary files /dev/null and b/datasets/resolvestroke/assets/clinical/SP07-Left_references.png differ
diff --git a/datasets/resolvestroke/assets/clinical/SP07-Right_pd_clips.png b/datasets/resolvestroke/assets/clinical/SP07-Right_pd_clips.png
new file mode 100644
index 0000000..180c7b0
Binary files /dev/null and b/datasets/resolvestroke/assets/clinical/SP07-Right_pd_clips.png differ
diff --git a/datasets/resolvestroke/assets/clinical/SP07-Right_references.png b/datasets/resolvestroke/assets/clinical/SP07-Right_references.png
new file mode 100644
index 0000000..1592319
Binary files /dev/null and b/datasets/resolvestroke/assets/clinical/SP07-Right_references.png differ
diff --git a/datasets/resolvestroke/assets/clinical/SP08-Left_pd_clips.png b/datasets/resolvestroke/assets/clinical/SP08-Left_pd_clips.png
new file mode 100644
index 0000000..1194423
Binary files /dev/null and b/datasets/resolvestroke/assets/clinical/SP08-Left_pd_clips.png differ
diff --git a/datasets/resolvestroke/assets/clinical/SP08-Left_references.png b/datasets/resolvestroke/assets/clinical/SP08-Left_references.png
new file mode 100644
index 0000000..e857156
Binary files /dev/null and b/datasets/resolvestroke/assets/clinical/SP08-Left_references.png differ
diff --git a/datasets/resolvestroke/assets/clinical/SP08-Right_pd_clips.png b/datasets/resolvestroke/assets/clinical/SP08-Right_pd_clips.png
new file mode 100644
index 0000000..aeab634
Binary files /dev/null and b/datasets/resolvestroke/assets/clinical/SP08-Right_pd_clips.png differ
diff --git a/datasets/resolvestroke/assets/clinical/SP08-Right_references.png b/datasets/resolvestroke/assets/clinical/SP08-Right_references.png
new file mode 100644
index 0000000..fbb258e
Binary files /dev/null and b/datasets/resolvestroke/assets/clinical/SP08-Right_references.png differ
diff --git a/datasets/resolvestroke/assets/clinical/SP09-Left-1_pd_clips.png b/datasets/resolvestroke/assets/clinical/SP09-Left-1_pd_clips.png
new file mode 100644
index 0000000..dec7d32
Binary files /dev/null and b/datasets/resolvestroke/assets/clinical/SP09-Left-1_pd_clips.png differ
diff --git a/datasets/resolvestroke/assets/clinical/SP09-Left-1_references.png b/datasets/resolvestroke/assets/clinical/SP09-Left-1_references.png
new file mode 100644
index 0000000..5dafa9c
Binary files /dev/null and b/datasets/resolvestroke/assets/clinical/SP09-Left-1_references.png differ
diff --git a/datasets/resolvestroke/assets/clinical/SP09-Left-2_pd_clips.png b/datasets/resolvestroke/assets/clinical/SP09-Left-2_pd_clips.png
new file mode 100644
index 0000000..cad62db
Binary files /dev/null and b/datasets/resolvestroke/assets/clinical/SP09-Left-2_pd_clips.png differ
diff --git a/datasets/resolvestroke/assets/clinical/SP09-Left-2_references.png b/datasets/resolvestroke/assets/clinical/SP09-Left-2_references.png
new file mode 100644
index 0000000..c1ea0b9
Binary files /dev/null and b/datasets/resolvestroke/assets/clinical/SP09-Left-2_references.png differ
diff --git a/datasets/resolvestroke/assets/clinical/SP10-Left_pd_clips.png b/datasets/resolvestroke/assets/clinical/SP10-Left_pd_clips.png
new file mode 100644
index 0000000..b9b298c
Binary files /dev/null and b/datasets/resolvestroke/assets/clinical/SP10-Left_pd_clips.png differ
diff --git a/datasets/resolvestroke/assets/clinical/SP10-Left_references.png b/datasets/resolvestroke/assets/clinical/SP10-Left_references.png
new file mode 100644
index 0000000..15dcf3a
Binary files /dev/null and b/datasets/resolvestroke/assets/clinical/SP10-Left_references.png differ
diff --git a/datasets/resolvestroke/assets/clinical/SP10-Right_pd_clips.png b/datasets/resolvestroke/assets/clinical/SP10-Right_pd_clips.png
new file mode 100644
index 0000000..0c99c73
Binary files /dev/null and b/datasets/resolvestroke/assets/clinical/SP10-Right_pd_clips.png differ
diff --git a/datasets/resolvestroke/assets/clinical/SP10-Right_references.png b/datasets/resolvestroke/assets/clinical/SP10-Right_references.png
new file mode 100644
index 0000000..ef7023b
Binary files /dev/null and b/datasets/resolvestroke/assets/clinical/SP10-Right_references.png differ
diff --git a/datasets/resolvestroke/assets/clinical_SP02-Left-2_bmode.png b/datasets/resolvestroke/assets/clinical_SP02-Left-2_bmode.png
new file mode 100644
index 0000000..513d761
Binary files /dev/null and b/datasets/resolvestroke/assets/clinical_SP02-Left-2_bmode.png differ
diff --git a/datasets/resolvestroke/assets/clinical_SP02-Left-2_references_montage.png b/datasets/resolvestroke/assets/clinical_SP02-Left-2_references_montage.png
new file mode 100644
index 0000000..0e9ecb0
Binary files /dev/null and b/datasets/resolvestroke/assets/clinical_SP02-Left-2_references_montage.png differ
diff --git a/datasets/resolvestroke/assets/clinical_SP03-Left_PD_montage.png b/datasets/resolvestroke/assets/clinical_SP03-Left_PD_montage.png
new file mode 100644
index 0000000..671bae3
Binary files /dev/null and b/datasets/resolvestroke/assets/clinical_SP03-Left_PD_montage.png differ
diff --git a/datasets/resolvestroke/assets/clinical_mvi_montage.png b/datasets/resolvestroke/assets/clinical_mvi_montage.png
new file mode 100644
index 0000000..a4d90d1
Binary files /dev/null and b/datasets/resolvestroke/assets/clinical_mvi_montage.png differ
diff --git a/datasets/resolvestroke/assets/clinical_pd_montage.png b/datasets/resolvestroke/assets/clinical_pd_montage.png
new file mode 100644
index 0000000..6b87262
Binary files /dev/null and b/datasets/resolvestroke/assets/clinical_pd_montage.png differ
diff --git a/datasets/resolvestroke/assets/main_image.png b/datasets/resolvestroke/assets/main_image.png
new file mode 100644
index 0000000..7ac5715
Binary files /dev/null and b/datasets/resolvestroke/assets/main_image.png differ
diff --git a/datasets/resolvestroke/assets/main_image_small.png b/datasets/resolvestroke/assets/main_image_small.png
new file mode 100644
index 0000000..1db20ee
Binary files /dev/null and b/datasets/resolvestroke/assets/main_image_small.png differ
diff --git a/datasets/resolvestroke/assets/phantom_flow_PD_montage.png b/datasets/resolvestroke/assets/phantom_flow_PD_montage.png
new file mode 100644
index 0000000..623f646
Binary files /dev/null and b/datasets/resolvestroke/assets/phantom_flow_PD_montage.png differ
diff --git a/datasets/resolvestroke/assets/phantom_flow_bmode.png b/datasets/resolvestroke/assets/phantom_flow_bmode.png
new file mode 100644
index 0000000..736d6af
Binary files /dev/null and b/datasets/resolvestroke/assets/phantom_flow_bmode.png differ
diff --git a/datasets/resolvestroke/assets/phantom_flow_references_montage.png b/datasets/resolvestroke/assets/phantom_flow_references_montage.png
new file mode 100644
index 0000000..7da9a0d
Binary files /dev/null and b/datasets/resolvestroke/assets/phantom_flow_references_montage.png differ
diff --git a/datasets/resolvestroke/assets/phantom_mp_bmode.png b/datasets/resolvestroke/assets/phantom_mp_bmode.png
new file mode 100644
index 0000000..ce35a56
Binary files /dev/null and b/datasets/resolvestroke/assets/phantom_mp_bmode.png differ
diff --git a/datasets/resolvestroke/assets/saddle_bmode_montage.png b/datasets/resolvestroke/assets/saddle_bmode_montage.png
new file mode 100644
index 0000000..2394d93
Binary files /dev/null and b/datasets/resolvestroke/assets/saddle_bmode_montage.png differ
diff --git a/datasets/resolvestroke/clinical/NOTE.md b/datasets/resolvestroke/clinical/NOTE.md
deleted file mode 100644
index d84c334..0000000
--- a/datasets/resolvestroke/clinical/NOTE.md
+++ /dev/null
@@ -1,10 +0,0 @@
-# Note on `clinical/`
-
-The full submission holds **20 clinical acquisitions** (`SP01`–`SP10`, Left/Right), as described
-in the parent `README.md`. This repository tracks only the **non-data files** of a submission
-(see `datasets/README.md`), and the reconstruction scripts are identical across all
-20 subject directories.
-
-Only one representative subject — **`SP02-Left-2`** — is therefore included here, rather than 19
-further copies of the same scripts. The remaining acquisitions, along with all `.hdf5` data and
-`.png` previews, are distributed with the dataset itself.
diff --git a/datasets/resolvestroke/clinical/README.md b/datasets/resolvestroke/clinical/README.md
new file mode 100644
index 0000000..0b24417
--- /dev/null
+++ b/datasets/resolvestroke/clinical/README.md
@@ -0,0 +1,220 @@
+---
+name: resolvestroke-clinical
+pretty_name: "Resolve Stroke Clinical Transcranial CEUS (SCULPT, 20 acquisitions)"
+license: cc-by-4.0
+task_categories:
+ - other
+tags:
+ - ultrasound
+ - iq
+ - openh-rf
+ - 3d
+ - matrix-probe
+ - contrast-enhanced
+ - ceus
+ - transcranial
+ - clinical
+language:
+ - en
+size_categories:
+ - 100K
+
+*Reference microvascular image (`mvi`, x-z maximum-intensity projection of the computed reference) for the 20 acquisitions in [`clinical/`](https://huggingface.co/datasets/nvidia/OpenH-RF/tree/main/resolvestroke/clinical).*
+
+## Dataset Description
+
+Contrast-enhanced ultrasound (CEUS) transcranial brain acquisitions of 10 human subjects (20 acquisitions), acquired with SYLVER, Resolve Stroke's ultrasound device, using a 32×32 matrix probe with diverging-wave transmits at 4 kHz frame rate. Each acquisition captures a microbubble contrast-agent bolus wash-in: microbubbles are injected, perfuse the brain vasculature through the temporal acoustic window, and gradually wash out.
+
+For each acquisition, five 1-second clips (4000 frames each, 20000 total) are extracted at intervals relative to the end-of-baseline marker:
+
+| Clip | Time offset | Description |
+|------|-------------|-------------|
+| `baseline_minus1s` | baseline − 1 s | Before microbubble arrival |
+| `baseline_plus5s` | baseline + 5 s | Early wash-in |
+| `baseline_plus10s` | baseline + 10 s | Mid wash-in |
+| `baseline_plus15s` | baseline + 15 s | Late wash-in |
+| `baseline_plus20s` | baseline + 20 s | Plateau / early wash-out |
+
+The anatomical companion of every acquisition, a single wide-angle B-mode frame taken at the same probe placement, is in the sibling [`saddle/`](../saddle/) dataset under the same name.
+
+## Dataset Contributor(s)
+
+- Aitana Waelbroeck
+- Carl Ferlay
+- Arthur Chavignon
+- Maxence Reberol (contact)
+- Vincent Hingot
+- Resolve Stroke, 29 Rue du Faubourg Saint-Jacques, 75014 Paris
+
+## Dataset Creation Date
+
+07/09/2026
+
+## License / Terms of Use
+
+[Creative Commons Attribution 4.0 International (CC BY 4.0)](https://creativecommons.org/licenses/by/4.0/legalcode.en). Retain attribution and identify modifications when reusing the data.
+
+## Intended Usage
+
+Contrast-enhanced ultrasound flow/perfusion quantification, microbubble detection and tracking, power-Doppler and CEUS transcranial imaging, and matrix-probe diverging-wave beamforming research (RFP task group 6.2, Blood Flow).
+
+## Dataset Characterization
+
+- Data collection method: 10 human subjects, 20 acquisitions (2 per subject: the other side and/or a second session), transcranial CEUS with microbubble contrast agent (bolus injection), acquired through the temporal acoustic window.
+- Labeling method: Automatic, no manual annotation. Per-frame clip labels (`metadata/annotations/label`, one of the five clip names above) are assigned from the acquisition time relative to the end-of-baseline marker. Per-voxel reference maps (`mvi`, radial velocities) are generated by SYLVER's processing pipeline from the complete bolus passage (see [Computed References](#computed-references)).
+- Acquisition system: SYLVER (Resolve Stroke's ultrasound device). 32×32 matrix probe, 0.50 mm pitch, 0.30 mm kerf; transmit center frequency ≈ 2.031 MHz, sound speed 1540 m/s. Diverging-wave transmits; receive sub-apertures flattened into 256 virtual elements. Channel data is DDC (baseband) IQ, so `sampling_frequency` (≈ 2.031 MHz) is the post-decimation IQ rate and equals `demodulation_frequency`.
+
+## Processing the Dataset
+
+The acquisitions can be processed with the `reconstruct.py` [script](https://github.com/open-h/OpenH-RF/blob/main/datasets/resolvestroke/clinical/reconstruct.py) as provided in the [OpenH-RF GitHub repository](https://github.com/open-h/OpenH-RF), together with the `pipeline.yaml` definition in this folder and the [zea library](https://github.com/tue-bmd/zea). The script streams the data from the Hugging Face Hub.
+
+The reconstruction recipe is identical for all 20 acquisitions, so the scripts and pipeline YAMLs live once in this directory. Each script has a `SUBJECT` constant at the top (default `"SP02-Left-2"`); set it to any acquisition name from the inventory, e.g. `SUBJECT = "SP07-Right"`, and the `hf://` input path `hf://nvidia/OpenH-RF/resolvestroke/clinical//.hdf5` and the output filenames follow from it. Swap `ZEA_FILE` (`INPUT` in `reconstruct_PD_3d.py`) for a local path to run against your own copy.
+
+```bash
+uv run --project /path/to/OpenH-RF python reconstruct.py
+```
+
+`reconstruct_PD_3d.py` (with `pipeline_PD_3d.yaml`) renders the power-Doppler reconstruction and `display_references.py` the computed reference maps; both are described below.
+
+The Python scripts carry their own `SPDX-License-Identifier: Apache-2.0` header; the dataset itself is CC BY 4.0.
+
+## Dataset Format
+
+[zea v0.1.6](https://github.com/tue-bmd/zea)
+
+One zea HDF5 file per acquisition, `/.hdf5`, containing all 5 clips concatenated. Files are named `-[-]` (anonymized subject code `SP01`–`SP10`, imaging side, and a sequential index when a subject has two acquisitions on the same side). Gaps between clips are encoded in `scan/time_to_next_transmit`. Per-frame clip labels are stored in `metadata/annotations/label`.
+
+Computed reference maps (derived from the SYLVER processed exam) are stored in the zea `custom` group under `custom/computed_references/`: `mvi`, `velocity_radial_avg` / `_min` / `_max`, and a shared `coordinates` array (per-voxel `[x, y, z]` in metres), all on one 0.6 mm Cartesian grid `(192, 171, 171)`. Read them via `zea.File(...).dataset("custom/computed_references/")`.
+
+The files are in the zea HDF5 format, root `zea_version` 0.1.6. `data/raw_data` is DDC IQ (last axis [I, Q]). The hardware time-gain compensation is baked into `raw_data`; `scan/tgc_gain_curve` is the applied (non-linear) gain per axial sample; divide by it to recover true channel amplitudes. The reconstruction scripts divide `raw_data` by this curve before beamforming (the `zea.Pipeline` itself stays standard; the reversal is a plain array step).
+
+## Dataset Quantification
+
+**Current OpenH-RF release:** 20 HDF5 files; 105.16 GB (105,159,196,672 bytes) stored; root `zea_version` **0.1.6**. Sizes include all HDF5 contents and use decimal units (MB = 10^6 bytes, GB = 10^9 bytes, TB = 10^12 bytes), not decoded-array memory or original-source download sizes.
+
+- Acquisitions: 20 (10 subjects × 2)
+- Frames per acquisition: 20000 (5 clips × 4000 frames)
+- Frame rate: 4000 Hz (within each clip)
+- Clip duration: 1 s each
+- **Stored HDF5 size:** ≈ 5.26 GB per acquisition, 105.16 GB in total.
+
+| Field | Shape | dtype | Units | Description |
+|---|---|---|---|---|
+| `data/raw_data` | `(20000, 1, 320, 256, 2)` | int16 | n/a | IQ channel data: frames × tx × axial × elements × {I, Q} |
+| `probe/probe_geometry` | `(256, 3)` | float32 | m | Virtual element positions |
+| `scan/t0_delays` | `(1, 256)` | float32 | s | Per-element transmit delays |
+| `scan/tx_apodizations` | `(1, 256)` | float32 | n/a | Per-element transmit weights |
+| `scan/focus_distances` | `(1,)` | float32 | m | Virtual-source distance (diverging wave, negative) |
+| `scan/polar_angles` | `(1,)` | float32 | rad | Transmit steering (0) |
+| `scan/azimuth_angles` | `(1,)` | float32 | rad | Transmit steering (0) |
+| `scan/transmit_origins` | `(1, 3)` | float32 | m | Transmit origin |
+| `scan/initial_times` | `(1,)` | float32 | s | ADC start time |
+| `scan/time_to_next_transmit` | `(20000, 1)` | float32 | s | Inter-frame timing (encodes clip gaps: 5, 4, 4, 4 s) |
+| `scan/tgc_gain_curve` | `(320,)` | float32 | n/a | Hardware TGC applied to `raw_data`; divide by it to undo (`reconstruct*.py` does this before beamforming) |
+| `scan/sampling_frequency` | scalar | float32 | Hz | 2031250 (post-DDC IQ rate) |
+| `scan/center_frequency` | scalar | float32 | Hz | 2031250 |
+| `scan/demodulation_frequency` | scalar | float32 | Hz | 2031250 |
+| `scan/sound_speed` | scalar | float32 | m/s | 1540 |
+
+### Inventory
+
+One row per acquisition. Power Doppler: x-z maximum-intensity projection of each of the five clips (baseline, +5, +10, +15, +20 s), display window set per acquisition from the 90th and 99.95th percentiles of its dB values. Reference maps: `mvi` (microvascular image) and `velocity_radial_avg`, each as x-z and y-z projections.
+
+
+
+
Acquisition
Subject
Side
Power Doppler, five clips (x-z MIP)
Reference maps (mvi · velocity_radial_avg, x-z and y-z)
+
+## Subject Metadata
+
+- Type: Human subjects (`metadata/subject/type` = `human`)
+- Subject IDs: `SP01`–`SP10` (anonymized, `metadata/subject/id`); each subject contributes 2 acquisitions (see the inventory above for side and session)
+- Anatomy: Brain (transcranial), left or right temporal acoustic window
+- Contrast agent: Microbubbles (bolus injection)
+
+## Data Validation
+
+`reconstruct.py` first divides `raw_data` by `scan/tgc_gain_curve` (reverse TGC), then runs a standard `zea.Pipeline` (cast → DAS beamform → envelope → normalize → log-compress) defined in `pipeline.yaml` to reconstruct a B-mode from the IQ channel data. Because the probe is a 2D matrix array insonified by a single diverging-wave transmit, `reconstruct.py` beamforms on polar (sector) grids and renders two perpendicular sector B-modes, the x-z plane (y = 0) and the y-z plane (x = 0), side by side:
+
+
+
+There is little to see in a single-frame B-mode of a transcranial CEUS acquisition: through the skull the diverging-wave frame is dominated by speckle and reverberation, and the microbubbles are not distinguishable from tissue without temporal filtering. The B-mode only checks the geometry and depth scaling of the reconstruction; the content of the data appears in the power-Doppler reconstruction below.
+
+A display-only linear TGC (1.5 dB/cm) adds a depth-dependent dB gain to the rendered image, compensating the attenuation that `reverse_tgc` leaves uncompensated so deeper structure stays visible. It does not modify the stored data.
+
+### Power-Doppler reconstruction (derived product)
+
+`reconstruct_PD_3d.py` (config `pipeline_PD_3d.yaml`) demonstrates a flow/contrast view. For each clip it beamforms all 4000 frames, in blocks of 250, onto a real 3D polar sector volume (radius × azimuth × elevation), applies a 100 Hz slow-time high-pass (wall) filter to suppress stationary tissue, and integrates power Doppler (sum of the squared envelope over the frames), then displays x-z and y-z maximum-intensity projections (MIPs) for all five clips in dB relative to the maximum over the clips (-25 to -5 dB, gamma 1.25, `hot` colormap), with the reference `mvi` map of the same file in the last column for comparison. The wall filter and power-Doppler integration are custom `zea` pipeline ops registered in the script (`tissue_highpass`, `power_doppler`). The hardware TGC stored in `raw_data` is kept.
+
+
+
+Run (a GPU is strongly recommended: about 14 min per acquisition with `uv sync --extra gpu`, hours with the CPU-only JAX of the plain `uv sync`):
+
+```bash
+uv run --project /path/to/OpenH-RF python reconstruct_PD_3d.py
+```
+
+## Computed References
+
+Reference maps derived from the SYLVER processed exam of each acquisition, stored in `custom/computed_references/` (read via `zea.File(...).dataset("custom/computed_references/")`). All share one 0.6 mm Cartesian grid `(192, 171, 171)`; the `coordinates` array gives each voxel's `[x, y, z]` in metres.
+
+The reference maps were computed by SYLVER's proprietary processing pipeline from the complete bolus passage, not from the five 1 s clips released here. They are therefore not reproducible from the released frames, and are provided as reference targets, for instance for learning-based reconstruction, microbubble-flow or perfusion estimation from the channel data. They are a device output, not a clinically validated ground truth.
+
+| Field | dtype | Unit | Description |
+|---|---|---|---|
+| `mvi` | float32 | a.u. | Microvascular image (enhanced, time-integrated over the bolus). NaN outside the sonified cone. |
+| `velocity_radial_avg` | float32 | m/s | Mean radial (along-beam) flow velocity; NaN where no flow. |
+| `velocity_radial_min` | float32 | m/s | Minimum radial flow velocity; NaN where no flow. |
+| `velocity_radial_max` | float32 | m/s | Maximum radial flow velocity; NaN where no flow. |
+| `coordinates` | float32 | m | Per-voxel `[x, y, z]` for all maps. |
+
+Notes:
+
+- Velocities are radial (Doppler, along-beam) components. True flow speed depends on the (subject- and vessel-dependent) insonation angle, which is not known a priori for in-vivo cerebral vasculature.
+- `mvi` and the velocity maps are NaN outside the sonified cone.
+
+`display_references.py` renders all reference maps of one acquisition to a montage. It reads `custom/computed_references/` (no beamforming) and, for each map, shows two orthogonal maximum-intensity projections (x-z on top, y-z below) on the true Cartesian geometry: `mvi` in magma and the velocities in a symmetric blue-white-red map (±0.76 m/s). It takes `SUBJECT` or `--input `:
+
+
+
+```bash
+uv run --project /path/to/OpenH-RF python display_references.py
+```
+
+## Ethical Considerations
+
+Human-subject data. Channel data was acquired during the SCULPT clinical study (National registration number (ID RCB): 2025-A00023-46; NCT07324421), a prospective monocentric trial conducted at CHU Gui de Chauliac (Montpellier, France) under approval from the French ethics committee (Comité de Protection des Personnes, CPP), comparing cerebral perfusion from Resolve Stroke's SYLVER ultrasound system with routine perfusion CT in ICU/CCU patients, using SonoVue® as the contrast agent.
+
+The dataset contains no direct personal identifiers: subjects are referenced only by an anonymized study code, and no name, date of birth, or device/operator identifiers are stored in the released files.
+
+## Known Issues
+
+- `raw_data` has the hardware TGC baked in; `scan/tgc_gain_curve` is that (non-linear) applied curve. The reconstruction scripts divide by the curve before beamforming; a downstream user reconstructing directly must divide by the curve too.
+- `sampling_frequency ≈ center_frequency` because the data is DDC baseband IQ (see Dataset Characterization), not an RF acquisition.
+- Radial velocity maps are along-beam only; absolute speed requires the unknown local vessel directions.
diff --git a/datasets/resolvestroke/clinical/SP02-Left-2/README.md b/datasets/resolvestroke/clinical/SP02-Left-2/README.md
deleted file mode 100644
index c450e4d..0000000
--- a/datasets/resolvestroke/clinical/SP02-Left-2/README.md
+++ /dev/null
@@ -1,220 +0,0 @@
----
-pretty_name: "OpenH-RF - Resolve Stroke Clinical Transcranial CEUS (SP02, Left)"
-license: cc-by-4.0
-task_categories:
- - other
-tags:
- - ultrasound
- - iq
- - openh-rf
- - 3d
- - matrix-probe
- - contrast-enhanced
- - ceus
- - transcranial
- - clinical
-language:
- - en
-size_categories:
- - 10K 0 else 0.0
+ apex = float(p.distance_to_apex) # virtual source behind the array
polar_limits = tuple(float(v) for v in p["polar_limits"])
z0, z1 = (float(v) for v in p["zlims"])
- # polar_pixel_grid measures radius from the apex, so offset the near bound by
- # the apex -> the configured zlims are true on-axis depth.
+ # polar_pixel_grid takes zlims as on-axis depth from the transducer face and adds
+ # distance_to_apex to the radii itself, so the configured zlims go in unchanged.
grid_xz = polar_pixel_grid(
polar_limits,
- (z0 + apex, z1),
+ (z0, z1),
num_radial_pixels=int(p["grid_size_z"]),
num_polar_pixels=int(p["grid_size_x"]),
distance_to_apex=apex,
@@ -122,17 +121,16 @@ def beamform_sector(pipeline, parameters, raw, grid):
def main():
- out_path = OUTPUT or Path(f"{Path(INPUT).stem}_bmode.png")
zea.init_device()
config = Config.from_path(str(CONFIG))
- with File(str(INPUT)) as f:
+ with File(str(ZEA_FILE)) as f:
parameters = f.load_parameters(**config.parameters)
raw = f.data.raw_data[FRAME : FRAME + 1] # (1, n_tx, n_ax, n_el, n_ch)
raw = reverse_tgc(raw, parameters) # undo hardware TGC before beamforming
- grid_xz, grid_yz, apex = build_sector_grids(config, parameters)
+ grid_xz, grid_yz, apex = build_sector_grids(config)
print(f"raw_data shape : {raw.shape}")
print(f"sector grid : {grid_xz.shape} (polar, apex={apex * 1e3:.1f} mm)")
@@ -176,8 +174,9 @@ def main():
print(f"y-z sector : {yz_slice.shape}")
fig.tight_layout()
- fig.savefig(str(out_path), dpi=150, bbox_inches="tight")
- print(f"Saved : {out_path}")
+ Path(OUT).parent.mkdir(parents=True, exist_ok=True)
+ fig.savefig(str(OUT), dpi=150, bbox_inches="tight")
+ print(f"Saved : {OUT}")
if __name__ == "__main__":
diff --git a/datasets/resolvestroke/clinical/SP02-Left-2/reconstruct_PD_3d.py b/datasets/resolvestroke/clinical/reconstruct_PD_3d.py
similarity index 53%
rename from datasets/resolvestroke/clinical/SP02-Left-2/reconstruct_PD_3d.py
rename to datasets/resolvestroke/clinical/reconstruct_PD_3d.py
index 0e59dcd..11eeb1b 100644
--- a/datasets/resolvestroke/clinical/SP02-Left-2/reconstruct_PD_3d.py
+++ b/datasets/resolvestroke/clinical/reconstruct_PD_3d.py
@@ -1,11 +1,16 @@
# SPDX-License-Identifier: Apache-2.0
"""Reconstruct power-Doppler 3D volumes for each clip and display as MIP montage.
+Serves all 20 resolvestroke/clinical acquisitions (``SP01``-``SP10``, Left/Right),
+which share probe, sequence and file layout: pick one with ``SUBJECT`` below.
+
For each of the 5 clips (4000 frames each), this script:
-1. Beamforms N frames onto a real 3D POLAR (sector) volume -> LINEAR envelope.
-2. Applies a slow-time high-pass (wall) filter to remove tissue clutter.
+1. Beamforms all frames, in blocks, onto a real 3D POLAR (sector) volume -> LINEAR
+ envelope. The hardware TGC stored in ``raw_data`` is kept.
+2. Applies a 100 Hz slow-time high-pass (wall) filter to remove tissue clutter.
3. Integrates power Doppler (sum of squared envelope over slow time).
-4. Displays a 5x2 montage: rows = clips, columns = x-z MIP and y-z MIP.
+4. Displays a montage: rows = x-z MIP and y-z MIP, columns = clips, plus the
+ reference ``mvi`` map of the file in the last column.
Grid: the acquisition is a matrix-probe DIVERGING wave, so a Cartesian box wastes
compute on the corners that fall outside the insonified cone. Instead we beamform
@@ -19,11 +24,15 @@
Pipeline: a single pipeline in pipeline_PD_3d.yaml does everything end to end —
cast -> beamform -> envelope_detect -> tissue_highpass -> power_doppler. Steps 2-3
are CUSTOM zea ops (`tissue_highpass`, `power_doppler`) registered here with
-`@ops_registry`; they act on the frame (slow-time) axis, so each clip's whole stack
+`@ops_registry`; they act on the frame (slow-time) axis, so each block of frames
is beamformed in one pass (zea patches the grid to bound memory). Custom
ops need no merged zea PR — they only need to be defined (imported) before a config
referencing them is loaded, which is why the YAML can list them by name.
+Runtime: about 14 min for a full acquisition on an RTX 4000 Ada with GPU JAX
+(``uv sync --extra gpu`` in the OpenH-RF repo; the plain ``uv sync`` installs a CPU-only
+JAX and this script then takes hours). Lower ``N_FRAMES`` for a quick look.
+
Usage:
KERAS_BACKEND=jax uv run --project /path/to/OpenH-RF python reconstruct_PD_3d.py
"""
@@ -39,14 +48,13 @@
import numpy as np
import zea
from keras import ops as kops
+from matplotlib.colors import PowerNorm
from zea import Config, File, Pipeline
from zea.internal.registry import ops_registry
from zea.ops import Operation
HERE = Path(__file__).parent
-_HDF5 = "hf://nvidia/OpenH-RF/resolvestroke/clinical/SP02-Left-2/SP02-Left-2.hdf5"
-DEFAULT_INPUT = "hf://nvidia/OpenH-RF/resolvestroke/clinical/SP02-Left-2/SP02-Left-2.hdf5"
-CONFIG = HERE / "pipeline_PD_3d.yaml"
+CONFIG = "hf://nvidia/OpenH-RF/resolvestroke/clinical/pipeline_PD_3d.yaml"
# Clip definitions (matching the combined file structure)
CLIPS = [
@@ -57,15 +65,20 @@
"baseline_plus20s",
]
FRAMES_PER_CLIP = 4000
-N_FRAMES_BF = 100 # frames to beamform per clip
-TGC_DB_PER_CM = 1.5 # display-only linear TGC (dB gain per cm of depth)
+N_FRAMES_BF = 4000 # frames to beamform per clip (all of them)
+BLOCK_FRAMES = 250 # frames per beamform + wall-filter pass (bounds GPU memory)
+DISPLAY_DB = (-25.0, -5.0) # dB range relative to the maximum over the five clips
+DISPLAY_GAMMA = 1.25 # gamma on the normalised dB image (>1 darkens the mid-tones)
+COLORMAP = "hot"
# --- Inputs -----------------------------------------------------------------
-# Defaults stream straight from the published corpus. Swap any of these for a
-# local path to run against your own copy.
-INPUT = "hf://nvidia/OpenH-RF/resolvestroke/clinical/SP02-Left-2/SP02-Left-2.hdf5"
+# One script serves all 20 clinical acquisitions; pick one with SUBJECT (the
+# subdirectory / file stem on the Hub, e.g. "SP07-Right"). Defaults stream straight
+# from the published corpus. Swap INPUT for a local path to run against your own copy.
+SUBJECT = "SP02-Left-2"
+INPUT = f"hf://nvidia/OpenH-RF/resolvestroke/clinical/{SUBJECT}/{SUBJECT}.hdf5"
N_FRAMES = N_FRAMES_BF
-OUTPUT = None
+OUT = HERE / f"{SUBJECT}_PD_montage.png"
# The 3D sector-volume grid (limits, depth, resolution) and the high-pass params
# all live in pipeline_PD_3d.yaml (`grid:` block and tissue_highpass params).
@@ -81,9 +94,10 @@ class TissueHighpass(Operation):
"""Slow-time high-pass (wall) filter to suppress stationary tissue clutter.
Operates along the frame (slow-time) axis with a frequency-domain filter and a
- raised-cosine taper around the cutoff. Marked non-jittable because it uses the
- NumPy FFT with a data-dependent mask; with the default ``jit_options="ops"``
- the surrounding pipeline still runs the other ops jitted.
+ raised-cosine taper around the cutoff. Implemented with Keras ops (``rfft`` /
+ ``irfft``), so it runs on the same device as the beamformer (the GPU when one is
+ available) and stays jittable: the filter mask only depends on the static frame
+ count, so the whole pipeline compiles as one program.
"""
def __init__(
@@ -94,29 +108,35 @@ def __init__(
time_axis: int = 0,
**kwargs,
):
- super().__init__(jittable=False, **kwargs)
+ super().__init__(**kwargs)
self.cutoff_hz = cutoff_hz
self.frame_rate_hz = frame_rate_hz
self.transition_hz = transition_hz
self.time_axis = time_axis
- def call(self, **kwargs):
- data = np.asarray(kops.convert_to_numpy(kwargs[self.key]))
- n = data.shape[self.time_axis]
- freqs = np.fft.rfftfreq(n, d=1.0 / self.frame_rate_hz) # non-negative
+ def frequency_mask(self, n_frames):
+ """Real mask over the ``n_frames // 2 + 1`` non-negative rfft bins.
+
+ 1 above the cutoff, 0 below, with a raised-cosine taper across
+ [cutoff - transition, cutoff) to reduce ringing. Built with NumPy at trace
+ time (it is a constant for a given frame count).
+ """
+ freqs = np.fft.rfftfreq(n_frames, d=1.0 / self.frame_rate_hz)
mask = (freqs >= self.cutoff_hz).astype(np.float32)
- # Raised-cosine taper across [cutoff - transition, cutoff) to reduce ringing.
taper = (freqs >= self.cutoff_hz - self.transition_hz) & (freqs < self.cutoff_hz)
mask[taper] = 0.5 * (
1.0 + np.cos(np.pi * (self.cutoff_hz - freqs[taper]) / self.transition_hz)
)
+ return mask
- spectrum = np.fft.rfft(data, axis=self.time_axis)
- shape = [1] * data.ndim
- shape[self.time_axis] = len(mask)
- spectrum = spectrum * mask.reshape(shape)
- filtered = np.fft.irfft(spectrum, n=n, axis=self.time_axis).astype(np.float32)
- return {self.output_key: filtered}
+ def call(self, **kwargs):
+ # Keras FFTs work along the last axis: move slow time there and back.
+ data = kops.moveaxis(kwargs[self.key], self.time_axis, -1)
+ n = int(data.shape[-1])
+ mask = kops.convert_to_tensor(self.frequency_mask(n), dtype=data.dtype)
+ real, imag = kops.rfft(data)
+ filtered = kops.irfft((real * mask, imag * mask), fft_length=n)
+ return {self.output_key: kops.moveaxis(filtered, -1, self.time_axis)}
@ops_registry("power_doppler")
@@ -132,17 +152,6 @@ def call(self, **kwargs):
return {self.output_key: kops.sum(kops.square(data), axis=self.time_axis)}
-def reverse_tgc(raw, parameters):
- """Undo the hardware time-gain compensation baked into ``raw_data``.
-
- zea stores ``scan/tgc_gain_curve`` (n_ax,) as "the TGC applied to every sample;
- divide by this curve to undo it". A plain per-axial-sample divide here keeps the
- zea pipeline fully standard (no custom op needed).
- """
- tgc = np.asarray(parameters.tgc_gain_curve, dtype=np.float32) # (n_ax,)
- return np.asarray(raw, dtype=np.float32) / tgc.reshape(1, 1, -1, 1, 1)
-
-
# --------------------------------------------------------------------------- #
# Sector-volume grid.
# --------------------------------------------------------------------------- #
@@ -183,16 +192,24 @@ def sector_plane_coords(r, angle, apex):
return lat, z
+def load_reference_mips(f):
+ """x-z and y-z MIPs of the reference ``mvi`` map with their Cartesian extents (mm)."""
+ ref = "custom/computed_references"
+ coords = np.asarray(f.dataset(f"{ref}/coordinates")[...]) # (nz, ny, nx, 3) m
+ mvi = np.asarray(f.dataset(f"{ref}/mvi")[...], dtype=np.float32)
+ x_mm, y_mm, z_mm = coords[0, 0, :, 0] * 1e3, coords[0, :, 0, 1] * 1e3, coords[:, 0, 0, 2] * 1e3
+ with np.errstate(all="ignore"):
+ xz, yz = np.nanmax(mvi, axis=1), np.nanmax(mvi, axis=2)
+ ext_xz = [x_mm.min(), x_mm.max(), z_mm.max(), z_mm.min()]
+ ext_yz = [y_mm.min(), y_mm.max(), z_mm.max(), z_mm.min()]
+ return xz, yz, ext_xz, ext_yz
+
+
def main():
- out_path = OUTPUT or Path(f"{Path(INPUT).stem}_PD_montage.png")
n_bf = N_FRAMES
zea.init_device()
config = Config.from_path(str(CONFIG))
- g = config["grid"] # 3D sector-volume spec
- azimuth_limits = tuple(float(v) for v in g["azimuth_limits"])
- elevation_limits = tuple(float(v) for v in g["elevation_limits"])
- zlims = tuple(float(v) for v in g["zlims"])
# One pipeline, end to end: cast -> beamform -> envelope -> tissue_highpass ->
# power_doppler. The custom slow-time ops resolve by name because they are
@@ -200,15 +217,23 @@ def main():
pipeline = Pipeline.from_config(config)
hp_cutoff = pipeline["tissue_highpass"].cutoff_hz
+ pd_volumes, (r, alpha, beta, apex), ref = beamform_clips(config, pipeline, hp_cutoff, n_bf)
+
+ render(pd_volumes, r, alpha, beta, apex, ref, n_bf, hp_cutoff)
+
+
+def beamform_clips(config, pipeline, hp_cutoff, n_bf):
+ """Beamform every clip of INPUT to a power-Doppler volume; also read the reference maps."""
+ g = config["grid"] # 3D sector-volume spec
+ azimuth_limits = tuple(float(v) for v in g["azimuth_limits"])
+ elevation_limits = tuple(float(v) for v in g["elevation_limits"])
+ zlims = tuple(float(v) for v in g["zlims"])
+
with File(str(INPUT)) as f:
parameters = f.load_parameters(**config.parameters)
total_frames = f.data.raw_data.shape[0]
- # Apex = virtual source behind the array; from the config or |focus_distances|.
- apex = g.get("distance_to_apex")
- if apex is None:
- focus = float(np.abs(np.ravel(parameters.focus_distances)[0]))
- apex = focus if focus > 0 else 0.0
+ apex = float(g["distance_to_apex"]) # virtual source behind the array
grid, (r, alpha, beta) = build_sector_volume_grid(
azimuth_limits,
@@ -221,15 +246,18 @@ def main():
)
flatgrid = grid.reshape(-1, 3)
n_vox = flatgrid.shape[0]
- print(f"Total frames: {total_frames}, beamforming {n_bf} per clip")
+ print(
+ f"Total frames: {total_frames}, beamforming {n_bf} per clip, blocks of {BLOCK_FRAMES}"
+ )
print(
f"Sector volume: {grid.shape[:-1]} = {n_vox} voxels (polar, apex={apex * 1e3:.1f} mm)"
)
inputs = pipeline.prepare_parameters(parameters, grid=grid, flatgrid=flatgrid)
- # Process each clip: the whole frame stack goes through the pipeline in one
- # pass, so the slow-time ops see all frames.
+ # Process each clip block by block: every block goes through the pipeline in
+ # one pass (the slow-time ops see BLOCK_FRAMES frames) and the power-Doppler
+ # volumes of the blocks are summed.
pd_volumes = [] # list of (n_r, n_az, n_el) power-Doppler volumes
for clip_idx, clip_name in enumerate(CLIPS):
clip_start = clip_idx * FRAMES_PER_CLIP
@@ -240,66 +268,85 @@ def main():
print(f"\n Clip '{clip_name}': frames {start}-{end} (HP cutoff={hp_cutoff} Hz)")
- raw = f.data.raw_data[start:end] # (n_bf, n_tx, n_ax, n_el, n_ch)
- raw = reverse_tgc(raw, parameters) # undo hardware TGC before beamforming
- outputs = pipeline(**{pipeline.key: raw}, **inputs, return_numpy=True)
- pd = np.asarray(outputs[pipeline.output_key]) # (n_r, n_az, n_el)
+ pd = np.zeros(grid.shape[:-1], dtype=np.float64)
+ for block_start in range(start, end, BLOCK_FRAMES):
+ raw = f.data.raw_data[block_start : block_start + BLOCK_FRAMES]
+ outputs = pipeline(**{pipeline.key: raw}, **inputs, return_numpy=True)
+ pd += np.asarray(outputs[pipeline.output_key], dtype=np.float64)
pd_volumes.append(pd)
print(f" PD volume: {pd.shape}, linear max={pd.max():.4g}")
- # Normalize all PD volumes to the same global max (common dB scale)
+ ref = load_reference_mips(f)
+ return pd_volumes, (r, alpha, beta, apex), ref
+
+
+def render(pd_volumes, r, alpha, beta, apex, ref, n_bf, hp_cutoff):
+ """Montage of all clips (x-z / y-z MIPs) plus the reference mvi column."""
+ ref_xz, ref_yz, ext_xz, ext_yz = ref
+
+ # Normalize all PD volumes to the same global max (common dB scale). Voxels the
+ # beamformer leaves at exactly zero (outside its receive aperture) become NaN.
global_max = max(pv.max() for pv in pd_volumes)
- pd_db_volumes = [
- 10.0 * np.log10(np.maximum(pd, global_max * 1e-35) / global_max) for pd in pd_volumes
- ]
-
- # Linear TGC (display only): a dB gain growing linearly with axial depth,
- # broadcast over the sector's angular axes. On-axis depth per radial sample is
- # (r - apex); the gain is zero at the shallowest sample. Reveals deep flow that
- # attenuation (uncompensated after reverse_tgc) would otherwise bury.
- depth_mm = (r - apex) * 1e3 # (n_r,)
- gain_db = TGC_DB_PER_CM * (depth_mm - depth_mm.min()) / 10.0
- pd_db_volumes = [pd + gain_db[:, None, None] for pd in pd_db_volumes]
+ with np.errstate(all="ignore"):
+ pd_db_volumes = [
+ 10.0 * np.log10(np.where(pd > 0, pd / global_max, np.nan)) for pd in pd_volumes
+ ]
+
+ vmin, vmax = DISPLAY_DB
+ norm = PowerNorm(DISPLAY_GAMMA, vmin=vmin, vmax=vmax)
+ cmap = plt.get_cmap(COLORMAP).copy()
+ cmap.set_bad("#101010")
# Scan-conversion coordinates for the two MIP planes (central plane of the fan)
xz_lat, xz_z = sector_plane_coords(r, alpha, apex) # (n_r, n_az)
yz_lat, yz_z = sector_plane_coords(r, beta, apex) # (n_r, n_el)
- vmin, vmax = -20.0, 0.0 # tight floor so vessels stand out from diffuse perfusion
zea.visualize.set_mpl_style()
- fig, axes = plt.subplots(2, 5, figsize=(24, 10))
-
- for col, (clip_name, pd_vol) in enumerate(zip(CLIPS, pd_db_volumes)):
- # x-z MIP: project out elevation (max over the y-fan)
- xz_mip = np.max(pd_vol, axis=2) # (n_r, n_az)
- ax = axes[0, col]
- ax.pcolormesh(xz_lat, xz_z, xz_mip, cmap="hot", vmin=vmin, vmax=vmax, shading="auto")
- ax.set_aspect("equal")
- ax.invert_yaxis()
- ax.set_title(f"{clip_name}\nx-z MIP", fontsize=9)
- ax.set_xlabel("x [mm]")
- if col == 0:
- ax.set_ylabel("z [mm]")
-
- # y-z MIP: project out azimuth (max over the x-fan)
- yz_mip = np.max(pd_vol, axis=1) # (n_r, n_el)
- ax = axes[1, col]
- ax.pcolormesh(yz_lat, yz_z, yz_mip, cmap="hot", vmin=vmin, vmax=vmax, shading="auto")
- ax.set_aspect("equal")
- ax.invert_yaxis()
- ax.set_title(f"{clip_name}\ny-z MIP", fontsize=9)
- ax.set_xlabel("y [mm]")
- if col == 0:
- ax.set_ylabel("z [mm]")
+ fig, axes = plt.subplots(2, len(CLIPS) + 1, figsize=(4.4 * (len(CLIPS) + 1), 9.5))
+
+ with np.errstate(all="ignore"):
+ for col, (clip_name, pd_vol) in enumerate(zip(CLIPS, pd_db_volumes)):
+ # x-z MIP: project out elevation (max over the y-fan)
+ xz_mip = np.nanmax(pd_vol, axis=2) # (n_r, n_az)
+ ax = axes[0, col]
+ ax.pcolormesh(xz_lat, xz_z, xz_mip, cmap=cmap, norm=norm, shading="auto")
+ ax.set_aspect("equal")
+ ax.invert_yaxis()
+ ax.set_title(f"{clip_name}\nx-z MIP", fontsize=9)
+ ax.set_xlabel("x [mm]")
+ if col == 0:
+ ax.set_ylabel("z [mm]")
+
+ # y-z MIP: project out azimuth (max over the x-fan)
+ yz_mip = np.nanmax(pd_vol, axis=1) # (n_r, n_el)
+ ax = axes[1, col]
+ ax.pcolormesh(yz_lat, yz_z, yz_mip, cmap=cmap, norm=norm, shading="auto")
+ ax.set_aspect("equal")
+ ax.invert_yaxis()
+ ax.set_title(f"{clip_name}\ny-z MIP", fontsize=9)
+ ax.set_xlabel("y [mm]")
+ if col == 0:
+ ax.set_ylabel("z [mm]")
+
+ # Reference mvi map of the same file, for comparison (its own linear scale).
+ vmax_ref = float(np.nanpercentile(ref_xz, 99.9))
+ for row, (img, ext, lab) in enumerate([(ref_xz, ext_xz, "x"), (ref_yz, ext_yz, "y")]):
+ ax = axes[row, -1]
+ ax.imshow(img, extent=ext, cmap=cmap, vmin=0, vmax=vmax_ref, aspect="equal")
+ ax.set_title(f"reference mvi\n{lab}-z MIP", fontsize=9)
+ ax.set_xlabel(f"{lab} [mm]")
+ ax.set_xlim(axes[row, 0].get_xlim())
+ ax.set_ylim(axes[row, 0].get_ylim())
fig.suptitle(
- f"Power Doppler 3D polar MIPs — {n_bf} frames/clip, HP cutoff {hp_cutoff} Hz",
+ f"Power Doppler 3D polar MIPs — {n_bf} frames/clip, HP cutoff {hp_cutoff} Hz, "
+ f"{vmin:.0f}..{vmax:.0f} dB, gamma {DISPLAY_GAMMA}",
fontsize=14,
fontweight="bold",
)
fig.tight_layout()
- fig.savefig(str(out_path), dpi=150, bbox_inches="tight")
- print(f"\nSaved montage: {out_path}")
+ fig.savefig(str(OUT), dpi=150, bbox_inches="tight")
+ print(f"\nSaved montage: {OUT}")
if __name__ == "__main__":
diff --git a/datasets/resolvestroke/phantom_flow/README.md b/datasets/resolvestroke/phantom_flow/README.md
index beb5e62..2862eb8 100644
--- a/datasets/resolvestroke/phantom_flow/README.md
+++ b/datasets/resolvestroke/phantom_flow/README.md
@@ -1,5 +1,6 @@
---
-pretty_name: "OpenH-RF - Resolve Stroke Flow Phantom (CIRS 769 + ATS523A) On/Off"
+name: resolvestroke-phantom-flow
+pretty_name: "Resolve Stroke Flow Phantom (CIRS 769 + ATS523A) On/Off"
license: cc-by-4.0
task_categories:
- other
@@ -18,18 +19,17 @@ size_categories:
- 10K (contact)
+- Vincent Hingot
+- Resolve Stroke, 29 Rue du Faubourg Saint-Jacques, 75014 Paris
## Dataset Creation Date
@@ -53,50 +54,39 @@ Contact email: maxence.reberol@resolvestroke.com
## License / Terms of Use
-CC BY 4.0 (see `LICENCE`). Data is released under Creative Commons Attribution
-4.0 International, which permits commercial use with attribution. (The Python
-scripts in this directory carry their own `SPDX-License-Identifier: Apache-2.0`
-header; the dataset itself is CC BY 4.0.)
+[Creative Commons Attribution 4.0 International (CC BY 4.0)](https://creativecommons.org/licenses/by/4.0/legalcode.en). Retain attribution and identify modifications when reusing the data.
## Intended Usage
-Contrast-enhanced ultrasound flow quantification, microbubble detection and
-tracking, power-Doppler and CEUS flow imaging, and matrix-probe diverging-wave
-beamforming research (RFP task group 6.2, Blood Flow).
+Contrast-enhanced ultrasound flow quantification, microbubble detection and tracking, power-Doppler and CEUS flow imaging, and matrix-probe diverging-wave beamforming research (RFP task group 6.2, Blood Flow).
## Dataset Characterization
- Data collection method: Phantom (CIRS 769 + ATS523A flow phantom with microbubble contrast agent)
-- Labeling method: Per-frame clip label (time offset relative to end-of-baseline),
- stored in `metadata/annotations/label` (one of the five clip names above).
-- Acquisition system: SYLVER (Resolve Stroke's ultrasound device). 32×32 matrix
- probe, 0.50 mm pitch, 0.30 mm kerf; transmit center frequency ≈ 2.031 MHz, sound
- speed 1540 m/s. Diverging-wave transmits; receive sub-apertures flattened into 256
- virtual elements. Channel data is DDC (baseband) IQ, so `sampling_frequency`
- (≈ 2.031 MHz) is the post-decimation IQ rate and equals `demodulation_frequency`.
- This is not an RF Nyquist rate (`n_ch = 2`, complex I/Q).
+- Labeling method: Automatic, no manual annotation. The per-voxel tube mask comes from the known phantom geometry; the reference maps (`mvi`, radial velocities) are generated by SYLVER's processing pipeline from the complete bolus passage (see [Computed References](#computed-references)). Per-frame clip labels (`metadata/annotations/label`, one of the five clip names above) are assigned from the acquisition time relative to the end-of-baseline marker.
+- Acquisition system: SYLVER (Resolve Stroke's ultrasound device). 32×32 matrix probe, 0.50 mm pitch, 0.30 mm kerf; transmit center frequency ≈ 2.031 MHz, sound speed 1540 m/s. Diverging-wave transmits; receive sub-apertures flattened into 256 virtual elements. Channel data is DDC (baseband) IQ, so `sampling_frequency` (≈ 2.031 MHz) is the post-decimation IQ rate and equals `demodulation_frequency`.
+
+## Processing the Dataset
+
+The acquisitions can be processed with the `reconstruct.py` [script](https://github.com/open-h/OpenH-RF/blob/main/datasets/resolvestroke/phantom_flow/reconstruct.py) as provided in the [OpenH-RF GitHub repository](https://github.com/open-h/OpenH-RF), together with the `pipeline.yaml` definition in this folder and the [zea library](https://github.com/tue-bmd/zea). The script streams the data from the Hugging Face Hub.
+
+```bash
+uv run --project /path/to/OpenH-RF python reconstruct.py
+```
+
+`reconstruct_PD_3d.py` (with `pipeline_PD_3d.yaml`) renders the power-Doppler reconstruction and `display_references.py` the computed reference maps; both are described below.
+
+The Python scripts carry their own `SPDX-License-Identifier: Apache-2.0` header; the dataset itself is CC BY 4.0.
## Dataset Format
-Single zea HDF5 file (`phantom_flow.hdf5`) containing all 5 clips concatenated.
-Gaps between clips are encoded in `scan/time_to_next_transmit`. Per-frame clip
-labels are stored in `metadata/annotations/label`.
-
-Computed reference maps (derived from the SYLVER processed exam) are stored in the
-zea `custom` group under `custom/computed_references/`: `mvi`,
-`velocity_radial_avg` / `_min` / `_max`, `tube_mask`, and a shared `coordinates`
-array (per-voxel `[x, y, z]` in metres), all on one 0.6 mm Cartesian grid
-`(192, 171, 171)`. Read them via `zea.File(...).custom`. They live in `custom`
-rather than a second track because zea uses a single global `n_frames`: a
-single-frame reference map cannot share that dimension with the per-frame
-`metadata/annotations/label` (20000), so a reference track fails spec validation.
-
-Originally written with `zea.File.create` (zea v0.1.1), validated `compliant: true` against
-`validate_zea_spec.py`. `data/raw_data` is DDC IQ (last axis [I, Q]). The hardware
-time-gain compensation is baked into `raw_data`; `scan/tgc_gain_curve` is the applied
-(non-linear) gain per axial sample; divide by it to recover true channel amplitudes.
-The reconstruction scripts divide `raw_data` by this curve before beamforming (the
-`zea.Pipeline` itself stays standard; the reversal is a plain array step).
+[zea v0.1.6](https://github.com/tue-bmd/zea)
+
+Single zea HDF5 file (`phantom_flow.hdf5`) containing all 5 clips concatenated. Gaps between clips are encoded in `scan/time_to_next_transmit`. Per-frame clip labels are stored in `metadata/annotations/label`.
+
+Computed reference maps (derived from the SYLVER processed exam) are stored in the zea `custom` group under `custom/computed_references/`: `mvi`, `velocity_radial_avg` / `_min` / `_max`, `tube_mask`, and a shared `coordinates` array (per-voxel `[x, y, z]` in metres), all on one 0.6 mm Cartesian grid `(192, 171, 171)`. Read them via `zea.File(...).custom`. They live in `custom` rather than a second track because zea uses a single global `n_frames`: a single-frame reference map cannot share that dimension with the per-frame `metadata/annotations/label` (20000), so a reference track fails spec validation.
+
+The file is in the zea HDF5 format, root `zea_version` 0.1.6, validated `compliant: true` against `validate_zea_spec.py`. `data/raw_data` is DDC IQ (last axis [I, Q]). The hardware time-gain compensation is baked into `raw_data`; `scan/tgc_gain_curve` is the applied (non-linear) gain per axial sample; divide by it to recover true channel amplitudes. The reconstruction scripts divide `raw_data` by this curve before beamforming (the `zea.Pipeline` itself stays standard; the reversal is a plain array step).
## Dataset Quantification
@@ -133,38 +123,27 @@ The reconstruction scripts divide `raw_data` by this curve before beamforming (t
## Data Validation
-`reconstruct.py` first divides `raw_data` by `scan/tgc_gain_curve` (reverse TGC),
-then runs a standard `zea.Pipeline` (cast → DAS beamform → envelope → normalize →
-log-compress) defined in `pipeline.yaml` to reconstruct a B-mode from the IQ channel
-data. Because the probe is a 2D matrix array insonified by a single diverging-wave
-transmit, `reconstruct.py` beamforms on polar (sector) grids and renders two
-perpendicular sector B-modes, the x-z plane (y = 0) and the y-z plane (x = 0), side
-by side:
+`reconstruct.py` first divides `raw_data` by `scan/tgc_gain_curve` (reverse TGC), then runs a standard `zea.Pipeline` (cast → DAS beamform → envelope → normalize → log-compress) defined in `pipeline.yaml` to reconstruct a B-mode from the IQ channel data. Because the probe is a 2D matrix array insonified by a single diverging-wave transmit, `reconstruct.py` beamforms on polar (sector) grids and renders two perpendicular sector B-modes, the x-z plane (y = 0) and the y-z plane (x = 0), side by side:
-
-
-Run: `uv run --project /path/to/OpenH-RF python reconstruct.py`
+
### Power-Doppler reconstruction (derived product)
-`reconstruct_PD_3d.py` (config `pipeline_PD_3d.yaml`) demonstrates a flow/contrast
-view. For each clip it beamforms the frame stack onto a real 3D polar sector volume
-(radius × azimuth × elevation), applies a slow-time high-pass (wall) filter to
-suppress stationary tissue, and integrates power Doppler, then displays x-z and y-z
-maximum-intensity projections (MIPs) for all five clips. The wall filter and
-power-Doppler integration are custom `zea` pipeline ops registered in the script
-(`tissue_highpass`, `power_doppler`).
+`reconstruct_PD_3d.py` (config `pipeline_PD_3d.yaml`) demonstrates a flow/contrast view. For each clip it beamforms all 4000 frames, in blocks of 250, onto a real 3D polar sector volume (radius × azimuth × elevation), applies a 100 Hz slow-time high-pass (wall) filter to suppress stationary tissue, and integrates power Doppler (sum of the squared envelope over the frames), then displays x-z and y-z maximum-intensity projections (MIPs) for all five clips in dB relative to the maximum over the clips (-25 to -5 dB, gamma 1.25, `hot` colormap), with the reference `mvi` map of the same file in the last column for comparison. The wall filter and power-Doppler integration are custom `zea` pipeline ops registered in the script (`tissue_highpass`, `power_doppler`). The hardware TGC stored in `raw_data` is kept.
+
+The resulting montage is shown at the top of this card.
-
+Run (a GPU is strongly recommended: about 14 min per acquisition with `uv sync --extra gpu`, hours with the CPU-only JAX of the plain `uv sync`):
-Run: `uv run --project /path/to/OpenH-RF python reconstruct_PD_3d.py`
+```bash
+uv run --project /path/to/OpenH-RF python reconstruct_PD_3d.py
+```
## Computed References
-Reference maps derived from the SYLVER processed exam of this acquisition, stored
-in `custom/computed_references/` (read via `zea.File(...).custom`). All share one
-0.6 mm Cartesian grid `(192, 171, 171)`; the `coordinates` array gives each voxel's
-`[x, y, z]` in metres.
+Reference maps derived from the SYLVER processed exam of this acquisition, stored in `custom/computed_references/` (read via `zea.File(...).dataset("custom/computed_references/")`). All share one 0.6 mm Cartesian grid `(192, 171, 171)`; the `coordinates` array gives each voxel's `[x, y, z]` in metres.
+
+The reference maps were computed by SYLVER's proprietary processing pipeline from the complete bolus passage, not from the five 1 s clips released here. They are therefore not reproducible from the released frames, and are provided as reference targets, for instance for learning-based reconstruction, microbubble-flow or perfusion estimation from the channel data. They are a device output, not a clinically validated ground truth. `tube_mask` is the known phantom geometry and is an actual ground truth.
| Field | dtype | Unit | Description |
|---|---|---|---|
@@ -176,28 +155,19 @@ in `custom/computed_references/` (read via `zea.File(...).custom`). All share on
| `coordinates` | float32 | m | Per-voxel `[x, y, z]` for all maps. |
Notes:
-- Velocities are radial (Doppler, along-beam). The probe sits at ~72° to the flow,
- so true speed ≈ radial ÷ cos(72°).
-- Tube ground truth: two straight parallel tubes fitted to the flow, ⌀4 mm and
- ⌀2 mm, ~35 mm apart, direction ≈ (−0.95, +0.04, +0.31), spanning the imaging cone.
+- Velocities are radial (Doppler, along-beam). The probe sits at ~72° to the flow, so true speed ≈ radial ÷ cos(72°).
+- Tube ground truth: two straight parallel tubes fitted to the flow, ⌀4 mm and ⌀2 mm, ~35 mm apart, direction ≈ (−0.95, +0.04, +0.31), spanning the imaging cone.
-`display_references.py` renders all reference maps to a montage. It reads
-`custom/computed_references/` (via `h5py`; no beamforming) and, for each map, shows
-two orthogonal maximum-intensity projections (x-z on top, y-z below) on the true
-Cartesian geometry: `mvi` in magma, the velocities in a symmetric blue-white-red
-map (±0.76 m/s), and `tube_mask` as discrete labels (⌀4 mm, ⌀2 mm):
+`display_references.py` renders all reference maps to a montage. It reads `custom/computed_references/` (via `h5py`; no beamforming) and, for each map, shows two orthogonal maximum-intensity projections (x-z on top, y-z below) on the true Cartesian geometry: `mvi` in magma, the velocities in a symmetric blue-white-red map (±0.76 m/s), and `tube_mask` as discrete labels (⌀4 mm, ⌀2 mm):
-
+
Run: `uv run --project /path/to/OpenH-RF python display_references.py`
## Known Issues
-- `raw_data` has the hardware TGC baked in; `scan/tgc_gain_curve` is that (non-linear)
- applied curve. The reconstruction scripts divide by the curve before beamforming;
- a downstream user reconstructing directly must divide by the curve too.
-- `sampling_frequency ≈ center_frequency` because the data is DDC baseband IQ (see
- Dataset Characterization), not an RF acquisition.
+- `raw_data` has the hardware TGC baked in; `scan/tgc_gain_curve` is that (non-linear) applied curve. The reconstruction scripts divide by the curve before beamforming; a downstream user reconstructing directly must divide by the curve too.
+- `sampling_frequency ≈ center_frequency` because the data is DDC baseband IQ (see Dataset Characterization), not an RF acquisition.
## Ethical Considerations
diff --git a/datasets/resolvestroke/phantom_flow/assets/main.png b/datasets/resolvestroke/phantom_flow/assets/main.png
new file mode 100644
index 0000000..ce76193
Binary files /dev/null and b/datasets/resolvestroke/phantom_flow/assets/main.png differ
diff --git a/datasets/resolvestroke/phantom_flow/display_references.py b/datasets/resolvestroke/phantom_flow/display_references.py
index af66bb6..ea989f3 100644
--- a/datasets/resolvestroke/phantom_flow/display_references.py
+++ b/datasets/resolvestroke/phantom_flow/display_references.py
@@ -17,14 +17,14 @@
matplotlib.use("Agg")
-import h5py
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.colors import ListedColormap
+from zea import File
-HERE = Path(__file__).parent
-_HDF5 = sorted(HERE.glob("*.hdf5"))
-DEFAULT_INPUT = _HDF5[0] if _HDF5 else HERE / "phantom_flow.hdf5"
+# --- Inputs -----------------------------------------------------------------
+# Defaults stream straight from the published corpus; override with --input.
+DEFAULT_INPUT = "hf://nvidia/OpenH-RF/resolvestroke/phantom_flow/phantom_flow.hdf5"
# name, colormap, contrast limits (None = auto), signed (diverging max-|.| MIP)
# Columns left -> right; mask first.
@@ -51,15 +51,19 @@ def mip(vol, axis, signed):
def main():
ap = argparse.ArgumentParser(description=__doc__)
- ap.add_argument("--input", type=Path, default=DEFAULT_INPUT)
+ ap.add_argument("--input", default=DEFAULT_INPUT, help="zea HDF5 (hf:// or local path)")
ap.add_argument("--output", type=Path, default=None)
args = ap.parse_args()
- out = args.output or args.input.with_name("phantom_flow_references_montage.png")
+ out = args.output or Path("phantom_flow_references_montage.png")
- with h5py.File(str(args.input), "r") as f:
- g = f.custom.computed_references
- coords = np.asarray(g["coordinates"][:]) # (nz, ny, nx, 3) = [x, y, z] m
- data = {name: np.asarray(g[name][:]).astype(np.float32) for name, *_ in MAPS}
+ with File(args.input) as f:
+ # file.dataset(key) is zea's concurrent-read path (file[key] would read serially).
+ ref = "custom/computed_references"
+ coords = np.asarray(f.dataset(f"{ref}/coordinates")[...]) # (nz, ny, nx, 3) = [x, y, z] m
+ data = {
+ name: np.asarray(f.dataset(f"{ref}/{name}")[...]).astype(np.float32)
+ for name, *_ in MAPS
+ }
x_mm = coords[0, 0, :, 0] * 1e3
y_mm = coords[0, :, 0, 1] * 1e3
@@ -100,7 +104,9 @@ def main():
axes[0, 0].set_ylabel("x-z MIP\nz [mm]")
axes[1, 0].set_ylabel("y-z MIP\nz [mm]")
- fig.suptitle(f"Computed reference maps — {args.input.name}", fontsize=13, fontweight="bold")
+ fig.suptitle(
+ f"Computed reference maps — {Path(args.input).name}", fontsize=13, fontweight="bold"
+ )
fig.savefig(str(out), dpi=130)
print(f"Saved: {out}")
diff --git a/datasets/resolvestroke/phantom_flow/phantom_flow_hdf5_structure.md b/datasets/resolvestroke/phantom_flow/phantom_flow_hdf5_structure.md
deleted file mode 100644
index 91fab92..0000000
--- a/datasets/resolvestroke/phantom_flow/phantom_flow_hdf5_structure.md
+++ /dev/null
@@ -1,83 +0,0 @@
-# phantom_flow.hdf5 — structure & metadata
-
-- **File:** `/media/m2_fast/data-openh-rf/phantom_flow/phantom_flow.hdf5`
-- **Size:** 6.397 GB (6,397,249,242 bytes)
-- **Root attributes:** `description`='Contrast-enhanced flow phantom acquisition (flow on/off). 5 clips of 1s (4000 frames at 4kHz) extracted at: baseline-1s, +5s, +10s, +15s, +20s relative to end_of_baseline. Source: Internal lab acquisition on flow phantom (CIRS 769 + ATS523A).'; `zea_version`='0.1.1'
-- **Top-level groups:** `custom`, `metadata`, `metrics`, `probe`, `tracks`
-
-## Tree
-
-```
-custom/
- computed_references/
- coordinates (192, 171, 171, 3) float32
- mvi (192, 171, 171) float32
- tube_mask (192, 171, 171) uint8
- velocity_radial_avg (192, 171, 171) float32
- velocity_radial_max (192, 171, 171) float32
- velocity_radial_min (192, 171, 171) float32
-metadata/
- annotations/
- anatomy () object
- label (20000,) object
- credit () object
- subject/
- id () object
-metrics/
-probe/
- name () object
- probe_geometry (256, 3) float32
-tracks/
- track_0/
- data/
- raw_data (20000, 1, 320, 256, 2) int16
- scan/
- azimuth_angles (1,) float32
- center_frequency () float32
- demodulation_frequency () float32
- focus_distances (1,) float32
- initial_times (1,) float32
- polar_angles (1,) float32
- sampling_frequency () float32
- sound_speed () float32
- t0_delays (1, 256) float32
- tgc_gain_curve (320,) float32
- time_to_next_transmit (20000, 1) float32
- transmit_origins (1, 3) float32
- tx_apodizations (1, 256) float32
-```
-
-## Group attributes
-
-- `/custom/computed_references` — `description`='Computed reference maps on a shared 0.6 mm Cartesian grid (see coordinates). Derived from the SYLVER processed exam.'
-
-## Datasets — shape, dtype, unit, description, value/stats
-
-| Path | Shape | dtype | Unit | Description | Value / stats |
-|---|---|---|---|---|---|
-| `/custom/computed_references/coordinates` | `(192, 171, 171, 3)` | `float32` | m | Per-voxel Cartesian positions (x, y, z) in metres for all maps. | min=-0.051, max=0.120497, mean=0.0210657 |
-| `/custom/computed_references/mvi` | `(192, 171, 171)` | `float32` | a.u. | Microvascular image (contrast/flow intensity, time-integrated). NaN outside sonified volume, 0 inside cone far from tubes, value within ~1 cm of a tube (smooth transition). | min=0, max=1.51211, mean=0.00350104, NaN=3259292 |
-| `/custom/computed_references/tube_mask` | `(192, 171, 171)` | `uint8` | – | Ground-truth tube segmentation: 1 = tube (4 mm diameter), 2 = tube (2 mm diameter); 0 = background. | min=0, max=2, mean=0.00129117 |
-| `/custom/computed_references/velocity_radial_avg` | `(192, 171, 171)` | `float32` | m/s | Mean radial (along-beam) flow velocity over slow-time; NaN where no flow. Radial component — divide by cos(Doppler angle ~72 deg) for true speed. | min=-1.44523, max=1.17046, mean=-0.152576, NaN=5571770 |
-| `/custom/computed_references/velocity_radial_max` | `(192, 171, 171)` | `float32` | m/s | Maximum radial flow velocity over slow-time; NaN where no flow. | min=-1.44523, max=1.43931, mean=-0.0628551, NaN=5571770 |
-| `/custom/computed_references/velocity_radial_min` | `(192, 171, 171)` | `float32` | m/s | Minimum radial flow velocity over slow-time; NaN where no flow. | min=-1.44523, max=0.301096, mean=-0.229416, NaN=5571770 |
-| `/metadata/annotations/anatomy` | `()` | `object` | – | Anatomy label. | `'phantom'` |
-| `/metadata/annotations/label` | `(20000,)` | `object` | – | Per-frame clip label (bolus time-offset relative to end-of-baseline). | counts: baseline_minus1s×4000, baseline_plus10s×4000, baseline_plus15s×4000, baseline_plus20s×4000, baseline_plus5s×4000 |
-| `/metadata/credit` | `()` | `object` | – | Credit or attribution for the dataset. | `'Aitana Waelbroeck, Carl Ferlay, Arthur Chavignon, Maxence Reberol, Vincent Hingot - Resolve Stroke'` |
-| `/metadata/subject/id` | `()` | `object` | – | Subject ID. Needed for subject-wise splits. | `'phantom_flow'` |
-| `/probe/name` | `()` | `object` | – | Probe model name/identifier. | `'SN2652'` |
-| `/probe/probe_geometry` | `(256, 3)` | `float32` | m | Element positions (x, y, z) per element, shape (n_el, 3). | min=-0.0082, max=0.0082, mean=0 |
-| `/tracks/track_0/data/raw_data` | `(20000, 1, 320, 256, 2)` | `int16` | – | Raw channel data. | min=-32765, max=32766, mean=11.019 |
-| `/tracks/track_0/scan/azimuth_angles` | `(1,)` | `float32` | rad | Azimuthal angles of transmit beams. | `[0.]` |
-| `/tracks/track_0/scan/center_frequency` | `()` | `float32` | Hz | Center frequency of the transmit pulse. | `2031250.0` |
-| `/tracks/track_0/scan/demodulation_frequency` | `()` | `float32` | Hz | Demodulation frequency. | `2031250.0` |
-| `/tracks/track_0/scan/focus_distances` | `(1,)` | `float32` | m | Transmit focus distances. | `[-0.022]` |
-| `/tracks/track_0/scan/initial_times` | `(1,)` | `float32` | s | A/D converter start times per transmit. | `[1.083077e-05]` |
-| `/tracks/track_0/scan/polar_angles` | `(1,)` | `float32` | rad | Polar angles of transmit beams. | `[0.]` |
-| `/tracks/track_0/scan/sampling_frequency` | `()` | `float32` | Hz | Sampling frequency. | `2031250.0` |
-| `/tracks/track_0/scan/sound_speed` | `()` | `float32` | m/s | Speed of sound. | `1540.0` |
-| `/tracks/track_0/scan/t0_delays` | `(1, 256)` | `float32` | s | Transmit delays per element. | min=0, max=1.76589e-06, mean=6.51021e-07 |
-| `/tracks/track_0/scan/tgc_gain_curve` | `(320,)` | `float32` | – | Time-gain-compensation curve. | min=15.4516, max=501.187, mean=423.616 |
-| `/tracks/track_0/scan/time_to_next_transmit` | `(20000, 1)` | `float32` | s | Time between transmit events. | min=0.00025, max=4, mean=0.00104995 |
-| `/tracks/track_0/scan/transmit_origins` | `(1, 3)` | `float32` | m | Transmit beam origins (x, y, z). | `[0. 0. 0.]` |
-| `/tracks/track_0/scan/tx_apodizations` | `(1, 256)` | `float32` | – | Transmit apodization per element. | min=1, max=1, mean=1 |
diff --git a/datasets/resolvestroke/phantom_flow/pipeline.yaml b/datasets/resolvestroke/phantom_flow/pipeline.yaml
index e5a953b..37c329b 100644
--- a/datasets/resolvestroke/phantom_flow/pipeline.yaml
+++ b/datasets/resolvestroke/phantom_flow/pipeline.yaml
@@ -1,7 +1,8 @@
parameters:
grid_type: polar
polar_limits: [-0.45, 0.45]
- zlims: [0.01, 0.11]
+ zlims: [0.01, 0.11] # on-axis depth from the transducer face [m]
+ distance_to_apex: 0.022 # virtual source behind the array (|focus_distances|)
grid_size_z: 420
grid_size_x: 220
grid_size_y: 1
diff --git a/datasets/resolvestroke/phantom_flow/pipeline_PD_3d.yaml b/datasets/resolvestroke/phantom_flow/pipeline_PD_3d.yaml
index 5d83ea9..7b75ca2 100644
--- a/datasets/resolvestroke/phantom_flow/pipeline_PD_3d.yaml
+++ b/datasets/resolvestroke/phantom_flow/pipeline_PD_3d.yaml
@@ -6,9 +6,10 @@ grid:
azimuth_limits: [-0.45, 0.45] # x-z fan half-angle [rad] (≈ ±26°)
elevation_limits: [-0.45, 0.45] # y-z fan half-angle [rad]
zlims: [0.01, 0.11] # on-axis depth range [m]
- n_radial: 160 # samples along each ray (~depth)
- n_azimuth: 64 # rays in the x-z plane
- n_elevation: 64 # rays in the y-z plane
+ distance_to_apex: 0.022 # virtual source behind the array
+ n_radial: 200 # samples along each ray (~depth, 0.5 mm)
+ n_azimuth: 80 # rays in the x-z plane
+ n_elevation: 80 # rays in the y-z plane
parameters:
grid_type: polar
@@ -25,7 +26,7 @@ pipeline:
- name: envelope_detect
- name: tissue_highpass # custom op: slow-time high-pass (wall) filter
params:
- cutoff_hz: 50.0
+ cutoff_hz: 100.0
frame_rate_hz: 4000.0
transition_hz: 10.0
- name: power_doppler # custom op: sum of squared envelope over slow time
diff --git a/datasets/resolvestroke/phantom_flow/reconstruct.py b/datasets/resolvestroke/phantom_flow/reconstruct.py
index 0d24a69..cc76b1a 100644
--- a/datasets/resolvestroke/phantom_flow/reconstruct.py
+++ b/datasets/resolvestroke/phantom_flow/reconstruct.py
@@ -37,16 +37,14 @@
from zea.beamform.pixelgrid import polar_pixel_grid
HERE = Path(__file__).parent
-_HDF5 = "hf://nvidia/OpenH-RF/resolvestroke/phantom_flow/phantom_flow.hdf5"
-DEFAULT_INPUT = "hf://nvidia/OpenH-RF/resolvestroke/phantom_flow/phantom_flow.hdf5"
-CONFIG = HERE / "pipeline.yaml"
+CONFIG = "hf://nvidia/OpenH-RF/resolvestroke/phantom_flow/pipeline.yaml"
# --- Inputs -----------------------------------------------------------------
# Defaults stream straight from the published corpus. Swap any of these for a
# local path to run against your own copy.
-INPUT = "hf://nvidia/OpenH-RF/resolvestroke/phantom_flow/phantom_flow.hdf5"
+ZEA_FILE = "hf://nvidia/OpenH-RF/resolvestroke/phantom_flow/phantom_flow.hdf5"
FRAME = 0
-OUTPUT = None
+OUT = HERE / "assets" / f"{Path(ZEA_FILE).stem}_bmode.png"
def reverse_tgc(raw, parameters):
@@ -61,7 +59,7 @@ def reverse_tgc(raw, parameters):
return np.asarray(raw, dtype=np.float32) / tgc.reshape(1, 1, -1, 1, 1)
-def build_sector_grids(config, parameters):
+def build_sector_grids(config):
"""Build two perpendicular 2D sector grids (x-z and y-z) for a diverging wave.
zea's polar grid only supports the x-z plane (y = 0), so the y-z sector is
@@ -72,19 +70,15 @@ def build_sector_grids(config, parameters):
in Cartesian (x, y, z) metres; apex is the virtual-source depth in metres.
"""
p = config.parameters
- # Diverging-wave apex = virtual source behind the array (|focus_distances|).
- apex = p.get("distance_to_apex")
- if apex is None:
- focus = float(np.abs(np.ravel(parameters.focus_distances)[0]))
- apex = focus if focus > 0 else 0.0
+ apex = float(p.distance_to_apex) # virtual source behind the array
polar_limits = tuple(float(v) for v in p["polar_limits"])
z0, z1 = (float(v) for v in p["zlims"])
- # polar_pixel_grid measures radius from the apex, so offset the near bound by
- # the apex -> the configured zlims are true on-axis depth.
+ # polar_pixel_grid takes zlims as on-axis depth from the transducer face and adds
+ # distance_to_apex to the radii itself, so the configured zlims go in unchanged.
grid_xz = polar_pixel_grid(
polar_limits,
- (z0 + apex, z1),
+ (z0, z1),
num_radial_pixels=int(p["grid_size_z"]),
num_polar_pixels=int(p["grid_size_x"]),
distance_to_apex=apex,
@@ -106,17 +100,16 @@ def beamform_sector(pipeline, parameters, raw, grid):
def main():
- out_path = OUTPUT or Path(f"{Path(INPUT).stem}_bmode.png")
zea.init_device()
config = Config.from_path(str(CONFIG))
- with File(str(INPUT)) as f:
+ with File(str(ZEA_FILE)) as f:
parameters = f.load_parameters(**config.parameters)
raw = f.data.raw_data[FRAME : FRAME + 1] # (1, n_tx, n_ax, n_el, n_ch)
raw = reverse_tgc(raw, parameters) # undo hardware TGC before beamforming
- grid_xz, grid_yz, apex = build_sector_grids(config, parameters)
+ grid_xz, grid_yz, apex = build_sector_grids(config)
print(f"raw_data shape : {raw.shape}")
print(f"sector grid : {grid_xz.shape} (polar, apex={apex * 1e3:.1f} mm)")
@@ -156,8 +149,9 @@ def main():
print(f"y-z sector : {yz_slice.shape}")
fig.tight_layout()
- fig.savefig(str(out_path), dpi=150, bbox_inches="tight")
- print(f"Saved : {out_path}")
+ Path(OUT).parent.mkdir(parents=True, exist_ok=True)
+ fig.savefig(str(OUT), dpi=150, bbox_inches="tight")
+ print(f"Saved : {OUT}")
if __name__ == "__main__":
diff --git a/datasets/resolvestroke/phantom_flow/reconstruct_PD_3d.py b/datasets/resolvestroke/phantom_flow/reconstruct_PD_3d.py
index cb6e8b4..5dcae95 100644
--- a/datasets/resolvestroke/phantom_flow/reconstruct_PD_3d.py
+++ b/datasets/resolvestroke/phantom_flow/reconstruct_PD_3d.py
@@ -1,11 +1,16 @@
# SPDX-License-Identifier: Apache-2.0
"""Reconstruct power-Doppler 3D volumes for each clip and display as MIP montage.
+Flow-phantom (CIRS 769 + ATS523A) CEUS acquisition, five 1 s clips of a bolus
+wash-in through two tubes.
+
For each of the 5 clips (4000 frames each), this script:
-1. Beamforms N frames onto a real 3D POLAR (sector) volume -> LINEAR envelope.
-2. Applies a slow-time high-pass (wall) filter to remove tissue clutter.
+1. Beamforms all frames, in blocks, onto a real 3D POLAR (sector) volume -> LINEAR
+ envelope. The hardware TGC stored in ``raw_data`` is kept.
+2. Applies a 100 Hz slow-time high-pass (wall) filter to remove tissue clutter.
3. Integrates power Doppler (sum of squared envelope over slow time).
-4. Displays a 5x2 montage: rows = clips, columns = x-z MIP and y-z MIP.
+4. Displays a montage: rows = x-z MIP and y-z MIP, columns = clips, plus the
+ reference ``mvi`` map of the file in the last column.
Grid: the acquisition is a matrix-probe DIVERGING wave, so a Cartesian box wastes
compute on the corners that fall outside the insonified cone. Instead we beamform
@@ -19,11 +24,15 @@
Pipeline: a single pipeline in pipeline_PD_3d.yaml does everything end to end —
cast -> beamform -> envelope_detect -> tissue_highpass -> power_doppler. Steps 2-3
are CUSTOM zea ops (`tissue_highpass`, `power_doppler`) registered here with
-`@ops_registry`; they act on the frame (slow-time) axis, so each clip's whole stack
+`@ops_registry`; they act on the frame (slow-time) axis, so each block of frames
is beamformed in one pass (zea patches the grid to bound memory). Custom
ops need no merged zea PR — they only need to be defined (imported) before a config
referencing them is loaded, which is why the YAML can list them by name.
+Runtime: about 14 min for a full acquisition on an RTX 4000 Ada with GPU JAX
+(``uv sync --extra gpu`` in the OpenH-RF repo; the plain ``uv sync`` installs a CPU-only
+JAX and this script then takes hours). Lower ``N_FRAMES`` for a quick look.
+
Usage:
KERAS_BACKEND=jax uv run --project /path/to/OpenH-RF python reconstruct_PD_3d.py
"""
@@ -39,14 +48,13 @@
import numpy as np
import zea
from keras import ops as kops
+from matplotlib.colors import PowerNorm
from zea import Config, File, Pipeline
from zea.internal.registry import ops_registry
from zea.ops import Operation
HERE = Path(__file__).parent
-_HDF5 = "hf://nvidia/OpenH-RF/resolvestroke/phantom_flow/phantom_flow.hdf5"
-DEFAULT_INPUT = "hf://nvidia/OpenH-RF/resolvestroke/phantom_flow/phantom_flow.hdf5"
-CONFIG = HERE / "pipeline_PD_3d.yaml"
+CONFIG = "hf://nvidia/OpenH-RF/resolvestroke/phantom_flow/pipeline_PD_3d.yaml"
# Clip definitions (matching the combined file structure)
CLIPS = [
@@ -57,14 +65,18 @@
"baseline_plus20s",
]
FRAMES_PER_CLIP = 4000
-N_FRAMES_BF = 100 # frames to beamform per clip
+N_FRAMES_BF = 4000 # frames to beamform per clip (all of them)
+BLOCK_FRAMES = 250 # frames per beamform + wall-filter pass (bounds GPU memory)
+DISPLAY_DB = (-25.0, -5.0) # dB range relative to the maximum over the five clips
+DISPLAY_GAMMA = 1.25 # gamma on the normalised dB image (>1 darkens the mid-tones)
+COLORMAP = "hot"
# --- Inputs -----------------------------------------------------------------
-# Defaults stream straight from the published corpus. Swap any of these for a
-# local path to run against your own copy.
+# Defaults stream straight from the published corpus. Swap INPUT for a local path to
+# run against your own copy.
INPUT = "hf://nvidia/OpenH-RF/resolvestroke/phantom_flow/phantom_flow.hdf5"
N_FRAMES = N_FRAMES_BF
-OUTPUT = None
+OUT = HERE / f"{Path(INPUT).stem}_PD_montage.png"
# The 3D sector-volume grid (limits, depth, resolution) and the high-pass params
# all live in pipeline_PD_3d.yaml (`grid:` block and tissue_highpass params).
@@ -80,9 +92,10 @@ class TissueHighpass(Operation):
"""Slow-time high-pass (wall) filter to suppress stationary tissue clutter.
Operates along the frame (slow-time) axis with a frequency-domain filter and a
- raised-cosine taper around the cutoff. Marked non-jittable because it uses the
- NumPy FFT with a data-dependent mask; with the default ``jit_options="ops"``
- the surrounding pipeline still runs the other ops jitted.
+ raised-cosine taper around the cutoff. Implemented with Keras ops (``rfft`` /
+ ``irfft``), so it runs on the same device as the beamformer (the GPU when one is
+ available) and stays jittable: the filter mask only depends on the static frame
+ count, so the whole pipeline compiles as one program.
"""
def __init__(
@@ -93,29 +106,35 @@ def __init__(
time_axis: int = 0,
**kwargs,
):
- super().__init__(jittable=False, **kwargs)
+ super().__init__(**kwargs)
self.cutoff_hz = cutoff_hz
self.frame_rate_hz = frame_rate_hz
self.transition_hz = transition_hz
self.time_axis = time_axis
- def call(self, **kwargs):
- data = np.asarray(kops.convert_to_numpy(kwargs[self.key]))
- n = data.shape[self.time_axis]
- freqs = np.fft.rfftfreq(n, d=1.0 / self.frame_rate_hz) # non-negative
+ def frequency_mask(self, n_frames):
+ """Real mask over the ``n_frames // 2 + 1`` non-negative rfft bins.
+
+ 1 above the cutoff, 0 below, with a raised-cosine taper across
+ [cutoff - transition, cutoff) to reduce ringing. Built with NumPy at trace
+ time (it is a constant for a given frame count).
+ """
+ freqs = np.fft.rfftfreq(n_frames, d=1.0 / self.frame_rate_hz)
mask = (freqs >= self.cutoff_hz).astype(np.float32)
- # Raised-cosine taper across [cutoff - transition, cutoff) to reduce ringing.
taper = (freqs >= self.cutoff_hz - self.transition_hz) & (freqs < self.cutoff_hz)
mask[taper] = 0.5 * (
1.0 + np.cos(np.pi * (self.cutoff_hz - freqs[taper]) / self.transition_hz)
)
+ return mask
- spectrum = np.fft.rfft(data, axis=self.time_axis)
- shape = [1] * data.ndim
- shape[self.time_axis] = len(mask)
- spectrum = spectrum * mask.reshape(shape)
- filtered = np.fft.irfft(spectrum, n=n, axis=self.time_axis).astype(np.float32)
- return {self.output_key: filtered}
+ def call(self, **kwargs):
+ # Keras FFTs work along the last axis: move slow time there and back.
+ data = kops.moveaxis(kwargs[self.key], self.time_axis, -1)
+ n = int(data.shape[-1])
+ mask = kops.convert_to_tensor(self.frequency_mask(n), dtype=data.dtype)
+ real, imag = kops.rfft(data)
+ filtered = kops.irfft((real * mask, imag * mask), fft_length=n)
+ return {self.output_key: kops.moveaxis(filtered, -1, self.time_axis)}
@ops_registry("power_doppler")
@@ -131,17 +150,6 @@ def call(self, **kwargs):
return {self.output_key: kops.sum(kops.square(data), axis=self.time_axis)}
-def reverse_tgc(raw, parameters):
- """Undo the hardware time-gain compensation baked into ``raw_data``.
-
- zea stores ``scan/tgc_gain_curve`` (n_ax,) as "the TGC applied to every sample;
- divide by this curve to undo it". A plain per-axial-sample divide here keeps the
- zea pipeline fully standard (no custom op needed).
- """
- tgc = np.asarray(parameters.tgc_gain_curve, dtype=np.float32) # (n_ax,)
- return np.asarray(raw, dtype=np.float32) / tgc.reshape(1, 1, -1, 1, 1)
-
-
# --------------------------------------------------------------------------- #
# Sector-volume grid.
# --------------------------------------------------------------------------- #
@@ -182,16 +190,24 @@ def sector_plane_coords(r, angle, apex):
return lat, z
+def load_reference_mips(f):
+ """x-z and y-z MIPs of the reference ``mvi`` map with their Cartesian extents (mm)."""
+ ref = "custom/computed_references"
+ coords = np.asarray(f.dataset(f"{ref}/coordinates")[...]) # (nz, ny, nx, 3) m
+ mvi = np.asarray(f.dataset(f"{ref}/mvi")[...], dtype=np.float32)
+ x_mm, y_mm, z_mm = coords[0, 0, :, 0] * 1e3, coords[0, :, 0, 1] * 1e3, coords[:, 0, 0, 2] * 1e3
+ with np.errstate(all="ignore"):
+ xz, yz = np.nanmax(mvi, axis=1), np.nanmax(mvi, axis=2)
+ ext_xz = [x_mm.min(), x_mm.max(), z_mm.max(), z_mm.min()]
+ ext_yz = [y_mm.min(), y_mm.max(), z_mm.max(), z_mm.min()]
+ return xz, yz, ext_xz, ext_yz
+
+
def main():
- out_path = OUTPUT or Path("phantom_flow_PD_montage.png")
n_bf = N_FRAMES
zea.init_device()
config = Config.from_path(str(CONFIG))
- g = config["grid"] # 3D sector-volume spec
- azimuth_limits = tuple(float(v) for v in g["azimuth_limits"])
- elevation_limits = tuple(float(v) for v in g["elevation_limits"])
- zlims = tuple(float(v) for v in g["zlims"])
# One pipeline, end to end: cast -> beamform -> envelope -> tissue_highpass ->
# power_doppler. The custom slow-time ops resolve by name because they are
@@ -199,15 +215,23 @@ def main():
pipeline = Pipeline.from_config(config)
hp_cutoff = pipeline["tissue_highpass"].cutoff_hz
+ pd_volumes, (r, alpha, beta, apex), ref = beamform_clips(config, pipeline, hp_cutoff, n_bf)
+
+ render(pd_volumes, r, alpha, beta, apex, ref, n_bf, hp_cutoff)
+
+
+def beamform_clips(config, pipeline, hp_cutoff, n_bf):
+ """Beamform every clip of INPUT to a power-Doppler volume; also read the reference maps."""
+ g = config["grid"] # 3D sector-volume spec
+ azimuth_limits = tuple(float(v) for v in g["azimuth_limits"])
+ elevation_limits = tuple(float(v) for v in g["elevation_limits"])
+ zlims = tuple(float(v) for v in g["zlims"])
+
with File(str(INPUT)) as f:
parameters = f.load_parameters(**config.parameters)
total_frames = f.data.raw_data.shape[0]
- # Apex = virtual source behind the array; from the config or |focus_distances|.
- apex = g.get("distance_to_apex")
- if apex is None:
- focus = float(np.abs(np.ravel(parameters.focus_distances)[0]))
- apex = focus if focus > 0 else 0.0
+ apex = float(g["distance_to_apex"]) # virtual source behind the array
grid, (r, alpha, beta) = build_sector_volume_grid(
azimuth_limits,
@@ -220,15 +244,18 @@ def main():
)
flatgrid = grid.reshape(-1, 3)
n_vox = flatgrid.shape[0]
- print(f"Total frames: {total_frames}, beamforming {n_bf} per clip")
+ print(
+ f"Total frames: {total_frames}, beamforming {n_bf} per clip, blocks of {BLOCK_FRAMES}"
+ )
print(
f"Sector volume: {grid.shape[:-1]} = {n_vox} voxels (polar, apex={apex * 1e3:.1f} mm)"
)
inputs = pipeline.prepare_parameters(parameters, grid=grid, flatgrid=flatgrid)
- # Process each clip: the whole frame stack goes through the pipeline in one
- # pass, so the slow-time ops see all frames.
+ # Process each clip block by block: every block goes through the pipeline in
+ # one pass (the slow-time ops see BLOCK_FRAMES frames) and the power-Doppler
+ # volumes of the blocks are summed.
pd_volumes = [] # list of (n_r, n_az, n_el) power-Doppler volumes
for clip_idx, clip_name in enumerate(CLIPS):
clip_start = clip_idx * FRAMES_PER_CLIP
@@ -239,58 +266,85 @@ def main():
print(f"\n Clip '{clip_name}': frames {start}-{end} (HP cutoff={hp_cutoff} Hz)")
- raw = f.data.raw_data[start:end] # (n_bf, n_tx, n_ax, n_el, n_ch)
- raw = reverse_tgc(raw, parameters) # undo hardware TGC before beamforming
- outputs = pipeline(**{pipeline.key: raw}, **inputs, return_numpy=True)
- pd = np.asarray(outputs[pipeline.output_key]) # (n_r, n_az, n_el)
+ pd = np.zeros(grid.shape[:-1], dtype=np.float64)
+ for block_start in range(start, end, BLOCK_FRAMES):
+ raw = f.data.raw_data[block_start : block_start + BLOCK_FRAMES]
+ outputs = pipeline(**{pipeline.key: raw}, **inputs, return_numpy=True)
+ pd += np.asarray(outputs[pipeline.output_key], dtype=np.float64)
pd_volumes.append(pd)
print(f" PD volume: {pd.shape}, linear max={pd.max():.4g}")
- # Normalize all PD volumes to the same global max (common dB scale)
+ ref = load_reference_mips(f)
+ return pd_volumes, (r, alpha, beta, apex), ref
+
+
+def render(pd_volumes, r, alpha, beta, apex, ref, n_bf, hp_cutoff):
+ """Montage of all clips (x-z / y-z MIPs) plus the reference mvi column."""
+ ref_xz, ref_yz, ext_xz, ext_yz = ref
+
+ # Normalize all PD volumes to the same global max (common dB scale). Voxels the
+ # beamformer leaves at exactly zero (outside its receive aperture) become NaN.
global_max = max(pv.max() for pv in pd_volumes)
- pd_db_volumes = [
- 10.0 * np.log10(np.maximum(pd, global_max * 1e-35) / global_max) for pd in pd_volumes
- ]
+ with np.errstate(all="ignore"):
+ pd_db_volumes = [
+ 10.0 * np.log10(np.where(pd > 0, pd / global_max, np.nan)) for pd in pd_volumes
+ ]
+
+ vmin, vmax = DISPLAY_DB
+ norm = PowerNorm(DISPLAY_GAMMA, vmin=vmin, vmax=vmax)
+ cmap = plt.get_cmap(COLORMAP).copy()
+ cmap.set_bad("#101010")
# Scan-conversion coordinates for the two MIP planes (central plane of the fan)
xz_lat, xz_z = sector_plane_coords(r, alpha, apex) # (n_r, n_az)
yz_lat, yz_z = sector_plane_coords(r, beta, apex) # (n_r, n_el)
- vmin, vmax = -30.0, 0.0
zea.visualize.set_mpl_style()
- fig, axes = plt.subplots(2, 5, figsize=(24, 10))
-
- for col, (clip_name, pd_vol) in enumerate(zip(CLIPS, pd_db_volumes)):
- # x-z MIP: project out elevation (max over the y-fan)
- xz_mip = np.max(pd_vol, axis=2) # (n_r, n_az)
- ax = axes[0, col]
- ax.pcolormesh(xz_lat, xz_z, xz_mip, cmap="hot", vmin=vmin, vmax=vmax, shading="auto")
- ax.set_aspect("equal")
- ax.invert_yaxis()
- ax.set_title(f"{clip_name}\nx-z MIP", fontsize=9)
- ax.set_xlabel("x [mm]")
- if col == 0:
- ax.set_ylabel("z [mm]")
-
- # y-z MIP: project out azimuth (max over the x-fan)
- yz_mip = np.max(pd_vol, axis=1) # (n_r, n_el)
- ax = axes[1, col]
- ax.pcolormesh(yz_lat, yz_z, yz_mip, cmap="hot", vmin=vmin, vmax=vmax, shading="auto")
- ax.set_aspect("equal")
- ax.invert_yaxis()
- ax.set_title(f"{clip_name}\ny-z MIP", fontsize=9)
- ax.set_xlabel("y [mm]")
- if col == 0:
- ax.set_ylabel("z [mm]")
+ fig, axes = plt.subplots(2, len(CLIPS) + 1, figsize=(4.4 * (len(CLIPS) + 1), 9.5))
+
+ with np.errstate(all="ignore"):
+ for col, (clip_name, pd_vol) in enumerate(zip(CLIPS, pd_db_volumes)):
+ # x-z MIP: project out elevation (max over the y-fan)
+ xz_mip = np.nanmax(pd_vol, axis=2) # (n_r, n_az)
+ ax = axes[0, col]
+ ax.pcolormesh(xz_lat, xz_z, xz_mip, cmap=cmap, norm=norm, shading="auto")
+ ax.set_aspect("equal")
+ ax.invert_yaxis()
+ ax.set_title(f"{clip_name}\nx-z MIP", fontsize=9)
+ ax.set_xlabel("x [mm]")
+ if col == 0:
+ ax.set_ylabel("z [mm]")
+
+ # y-z MIP: project out azimuth (max over the x-fan)
+ yz_mip = np.nanmax(pd_vol, axis=1) # (n_r, n_el)
+ ax = axes[1, col]
+ ax.pcolormesh(yz_lat, yz_z, yz_mip, cmap=cmap, norm=norm, shading="auto")
+ ax.set_aspect("equal")
+ ax.invert_yaxis()
+ ax.set_title(f"{clip_name}\ny-z MIP", fontsize=9)
+ ax.set_xlabel("y [mm]")
+ if col == 0:
+ ax.set_ylabel("z [mm]")
+
+ # Reference mvi map of the same file, for comparison (its own linear scale).
+ vmax_ref = float(np.nanpercentile(ref_xz, 99.9))
+ for row, (img, ext, lab) in enumerate([(ref_xz, ext_xz, "x"), (ref_yz, ext_yz, "y")]):
+ ax = axes[row, -1]
+ ax.imshow(img, extent=ext, cmap=cmap, vmin=0, vmax=vmax_ref, aspect="equal")
+ ax.set_title(f"reference mvi\n{lab}-z MIP", fontsize=9)
+ ax.set_xlabel(f"{lab} [mm]")
+ ax.set_xlim(axes[row, 0].get_xlim())
+ ax.set_ylim(axes[row, 0].get_ylim())
fig.suptitle(
- f"Power Doppler 3D polar MIPs — {n_bf} frames/clip, HP cutoff {hp_cutoff} Hz",
+ f"Power Doppler 3D polar MIPs — {n_bf} frames/clip, HP cutoff {hp_cutoff} Hz, "
+ f"{vmin:.0f}..{vmax:.0f} dB, gamma {DISPLAY_GAMMA}",
fontsize=14,
fontweight="bold",
)
fig.tight_layout()
- fig.savefig(str(out_path), dpi=150, bbox_inches="tight")
- print(f"\nSaved montage: {out_path}")
+ fig.savefig(str(OUT), dpi=150, bbox_inches="tight")
+ print(f"\nSaved montage: {OUT}")
if __name__ == "__main__":
diff --git a/datasets/resolvestroke/phantom_mp/README.md b/datasets/resolvestroke/phantom_mp/README.md
index f171f65..23aa4fc 100644
--- a/datasets/resolvestroke/phantom_mp/README.md
+++ b/datasets/resolvestroke/phantom_mp/README.md
@@ -1,5 +1,6 @@
---
-pretty_name: "OpenH-RF - Resolve Stroke Multi-tissue Phantom (CIRS 040GSE)"
+name: resolvestroke-phantom-mp
+pretty_name: "Resolve Stroke Multi-tissue Phantom (CIRS 040GSE)"
license: cc-by-4.0
task_categories:
- other
@@ -16,24 +17,24 @@ size_categories:
- 1K (contact)
+- Vincent Hingot
+- Resolve Stroke, 29 Rue du Faubourg Saint-Jacques, 75014 Paris
## Dataset Creation Date
@@ -41,39 +42,33 @@ Contact email: maxence.reberol@resolvestroke.com
## License / Terms of Use
-CC BY 4.0 (see `LICENCE`). Data is released under Creative Commons Attribution
-4.0 International, which permits commercial use with attribution. (The Python
-scripts in this directory carry their own `SPDX-License-Identifier: Apache-2.0`
-header; the dataset itself is CC BY 4.0.)
+[Creative Commons Attribution 4.0 International (CC BY 4.0)](https://creativecommons.org/licenses/by/4.0/legalcode.en). Retain attribution and identify modifications when reusing the data.
## Intended Usage
-Beamforming and reconstruction research (RFP task group 6.1, Generalized
-Reconstruction): resolution and contrast assessment, compressed sensing,
-super-resolution, and matrix-probe diverging-wave 3D beamforming on a phantom with
-known target structures.
+Beamforming and reconstruction research (RFP task group 6.1, Generalized Reconstruction): resolution and contrast assessment, compressed sensing, super-resolution, and matrix-probe diverging-wave 3D beamforming on a phantom with known target structures.
## Dataset Characterization
- Data collection method: Phantom (CIRS 040GSE multi-purpose, multi-tissue imaging phantom)
- Labeling method: None (single static acquisition; no per-frame labels)
-- Acquisition system: SYLVER (Resolve Stroke's ultrasound device). 32×32 matrix
- probe, 0.50 mm pitch, 0.30 mm kerf; transmit center frequency ≈ 2.031 MHz, sound
- speed 1540 m/s. Diverging-wave transmits; receive sub-apertures flattened into 256
- virtual elements. Channel data is DDC (baseband) IQ, so `sampling_frequency`
- (≈ 2.031 MHz) is the post-decimation IQ rate and equals `demodulation_frequency`.
- This is not an RF Nyquist rate (`n_ch = 2`, complex I/Q).
+- Acquisition system: SYLVER (Resolve Stroke's ultrasound device). 32×32 matrix probe, 0.50 mm pitch, 0.30 mm kerf; transmit center frequency ≈ 2.031 MHz, sound speed 1540 m/s. Diverging-wave transmits; receive sub-apertures flattened into 256 virtual elements. Channel data is DDC (baseband) IQ, so `sampling_frequency` (≈ 2.031 MHz) is the post-decimation IQ rate and equals `demodulation_frequency`.
+
+## Processing the Dataset
+
+The acquisitions can be processed with the `reconstruct.py` [script](https://github.com/open-h/OpenH-RF/blob/main/datasets/resolvestroke/phantom_mp/reconstruct.py) as provided in the [OpenH-RF GitHub repository](https://github.com/open-h/OpenH-RF), together with the `pipeline.yaml` definition in this folder and the [zea library](https://github.com/tue-bmd/zea). The script streams the data from the Hugging Face Hub.
+
+```bash
+uv run --project /path/to/OpenH-RF python reconstruct.py
+```
+
+The Python scripts carry their own `SPDX-License-Identifier: Apache-2.0` header; the dataset itself is CC BY 4.0.
## Dataset Format
-Single zea HDF5 file (`phantom_mp.hdf5`), one track holding the raw channel data
-and scan parameters. Originally written with `zea.File.create` (zea v0.1.1), validated
-`compliant: true` against `validate_zea_spec.py`. `data/raw_data` is DDC IQ (last
-axis [I, Q]). The hardware time-gain compensation is baked into `raw_data`;
-`scan/tgc_gain_curve` is the applied (non-linear) gain per axial sample; divide by
-it to recover true channel amplitudes. `reconstruct.py` divides `raw_data` by this
-curve before beamforming (the `zea.Pipeline` itself stays standard; the reversal is
-a plain array step).
+[zea v0.1.6](https://github.com/tue-bmd/zea)
+
+Single zea HDF5 file (`phantom_mp.hdf5`), one track holding the raw channel data and scan parameters, in the zea HDF5 format, root `zea_version` 0.1.6, validated `compliant: true` against `validate_zea_spec.py`. `data/raw_data` is DDC IQ (last axis [I, Q]). The hardware time-gain compensation is baked into `raw_data`; `scan/tgc_gain_curve` is the applied (non-linear) gain per axial sample; divide by it to recover true channel amplitudes. `reconstruct.py` divides `raw_data` by this curve before beamforming (the `zea.Pipeline` itself stays standard; the reversal is a plain array step).
## Dataset Quantification
@@ -108,27 +103,13 @@ a plain array step).
## Data Validation
-`reconstruct.py` first divides `raw_data` by `scan/tgc_gain_curve` (reverse TGC),
-then runs a standard `zea.Pipeline` (cast → DAS beamform → envelope → normalize →
-log-compress) defined in `pipeline.yaml` to reconstruct a B-mode from the IQ channel
-data. Because the probe is a 2D matrix array insonified by a single diverging-wave
-transmit, `reconstruct.py` beamforms on polar (sector) grids and renders two
-perpendicular sector B-modes, the x-z plane (y = 0) and the y-z plane (x = 0), side
-by side:
-
-
-
-Run: `uv run --project /path/to/OpenH-RF python reconstruct.py`
+`reconstruct.py` first divides `raw_data` by `scan/tgc_gain_curve` (reverse TGC), then runs a standard `zea.Pipeline` (cast → DAS beamform → envelope → normalize → log-compress) defined in `pipeline.yaml` to reconstruct a B-mode from the IQ channel data. Because the probe is a 2D matrix array insonified by a single diverging-wave transmit, `reconstruct.py` beamforms on polar (sector) grids and renders two perpendicular sector B-modes, the x-z plane (y = 0) and the y-z plane (x = 0), side by side, as shown at the top of this card.
## Known Issues
-- `raw_data` has the hardware TGC baked in; `scan/tgc_gain_curve` is that (non-linear)
- applied curve. The reconstruction script divides by the curve before beamforming;
- a downstream user reconstructing directly must divide by the curve too.
-- `sampling_frequency ≈ center_frequency` because the data is DDC baseband IQ (see
- Dataset Characterization), not an RF acquisition.
-- The proposed 3D phantom-geometry reference (known target positions for the CIRS
- 040GSE) is not yet included.
+- `raw_data` has the hardware TGC baked in; `scan/tgc_gain_curve` is that (non-linear) applied curve. The reconstruction script divides by the curve before beamforming; a downstream user reconstructing directly must divide by the curve too.
+- `sampling_frequency ≈ center_frequency` because the data is DDC baseband IQ (see Dataset Characterization), not an RF acquisition.
+- The proposed 3D phantom-geometry reference (known target positions for the CIRS 040GSE) is not yet included.
## Ethical Considerations
diff --git a/datasets/resolvestroke/phantom_mp/assets/main.png b/datasets/resolvestroke/phantom_mp/assets/main.png
new file mode 100644
index 0000000..7d8be44
Binary files /dev/null and b/datasets/resolvestroke/phantom_mp/assets/main.png differ
diff --git a/datasets/resolvestroke/phantom_mp/pipeline.yaml b/datasets/resolvestroke/phantom_mp/pipeline.yaml
index e5a953b..37c329b 100644
--- a/datasets/resolvestroke/phantom_mp/pipeline.yaml
+++ b/datasets/resolvestroke/phantom_mp/pipeline.yaml
@@ -1,7 +1,8 @@
parameters:
grid_type: polar
polar_limits: [-0.45, 0.45]
- zlims: [0.01, 0.11]
+ zlims: [0.01, 0.11] # on-axis depth from the transducer face [m]
+ distance_to_apex: 0.022 # virtual source behind the array (|focus_distances|)
grid_size_z: 420
grid_size_x: 220
grid_size_y: 1
diff --git a/datasets/resolvestroke/phantom_mp/reconstruct.py b/datasets/resolvestroke/phantom_mp/reconstruct.py
index 6d5b1be..4cbc589 100644
--- a/datasets/resolvestroke/phantom_mp/reconstruct.py
+++ b/datasets/resolvestroke/phantom_mp/reconstruct.py
@@ -35,37 +35,34 @@
from zea.beamform.pixelgrid import polar_pixel_grid
HERE = Path(__file__).parent
-_HDF5 = "hf://nvidia/OpenH-RF/resolvestroke/phantom_mp/phantom_mp.hdf5"
-DEFAULT_INPUT = "hf://nvidia/OpenH-RF/resolvestroke/phantom_mp/phantom_mp.hdf5"
-CONFIG = HERE / "pipeline.yaml"
+CONFIG = "hf://nvidia/OpenH-RF/resolvestroke/phantom_mp/pipeline.yaml"
# --- Inputs -----------------------------------------------------------------
# Defaults stream straight from the published corpus. Swap any of these for a
# local path to run against your own copy.
-INPUT = "hf://nvidia/OpenH-RF/resolvestroke/phantom_mp/phantom_mp.hdf5"
+ZEA_FILE = "hf://nvidia/OpenH-RF/resolvestroke/phantom_mp/phantom_mp.hdf5"
FRAME = 0
-OUTPUT = None
+OUT = HERE / "assets" / f"{Path(ZEA_FILE).stem}_bmode.png"
def sector_grids(p, apex):
"""Two perpendicular diverging-wave sector fans, each (n_radial, n_angular, 3)
in Cartesian metres. The y-z fan is the x-z fan rotated 90 deg about z (swap
- x and y). polar_pixel_grid measures radius from the apex, so the near bound is
- offset by the apex to keep the configured zlims as true on-axis depth."""
+ x and y). polar_pixel_grid takes zlims as on-axis depth and adds the apex to the
+ radii itself, so the configured zlims go in unchanged."""
lims = tuple(float(v) for v in p["polar_limits"])
z0, z1 = (float(v) for v in p["zlims"])
- xz = polar_pixel_grid(lims, (z0 + apex, z1), int(p["grid_size_z"]), int(p["grid_size_x"]), apex)
+ xz = polar_pixel_grid(lims, (z0, z1), int(p["grid_size_z"]), int(p["grid_size_x"]), apex)
yz = xz.copy()
yz[..., 0], yz[..., 1] = 0.0, xz[..., 0]
return np.stack([xz, yz]) # (2, n_r, n_theta, 3)
def main():
- out_path = OUTPUT or Path(f"{Path(INPUT).stem}_bmode.png")
zea.init_device()
config = Config.from_path(str(CONFIG))
- with File(str(INPUT)) as f:
+ with File(str(ZEA_FILE)) as f:
parameters = f.load_parameters(**config.parameters)
raw = f.data.raw_data[FRAME : FRAME + 1] # (1, n_tx, n_ax, n_el, n_ch)
@@ -73,7 +70,7 @@ def main():
tgc = np.asarray(parameters.tgc_gain_curve, np.float32)
raw = np.asarray(raw, np.float32) / tgc.reshape(1, 1, -1, 1, 1)
- apex = float(np.abs(np.ravel(parameters.focus_distances)[0])) # virtual-source depth
+ apex = float(config.parameters.distance_to_apex) # virtual source behind the array
grid = sector_grids(config.parameters, apex) # (2, n_r, n_theta, 3): [x-z, y-z]
# Beamform both fans in one pass; reshape_grid restores the (2, n_r, n_theta) shape.
@@ -110,8 +107,9 @@ def main():
fig.colorbar(pm, cax=cax, label="dB")
fig.tight_layout()
- fig.savefig(str(out_path), dpi=150, bbox_inches="tight")
- print(f"Saved: {out_path}")
+ Path(OUT).parent.mkdir(parents=True, exist_ok=True)
+ fig.savefig(str(OUT), dpi=150, bbox_inches="tight")
+ print(f"Saved: {OUT}")
if __name__ == "__main__":
diff --git a/datasets/resolvestroke/saddle/README.md b/datasets/resolvestroke/saddle/README.md
index 8d4795d..2b8b9b4 100644
--- a/datasets/resolvestroke/saddle/README.md
+++ b/datasets/resolvestroke/saddle/README.md
@@ -1,5 +1,6 @@
---
-pretty_name: "OpenH-RF - Resolve Stroke Saddle-Array Reference B-modes (Transcranial CEUS + Phantom)"
+name: resolvestroke-saddle
+pretty_name: "Resolve Stroke Saddle-Array Reference B-modes (Transcranial CEUS + Phantom)"
license: cc-by-4.0
task_categories:
- other
@@ -19,32 +20,26 @@ size_categories:
- n<1K
---
-# OpenH-RF - Resolve Stroke Saddle-Array Reference B-modes
+# Resolve Stroke Saddle-Array Reference B-modes
-## Dataset Description
+
-Single-frame anatomical B-mode acquisitions from the "saddle" imaging sequence of
-Resolve Stroke's SYLVER ultrasound device, using a 32×32 matrix probe. Each raw
-acquisition contains, alongside the multi-thousand-frame contrast-enhanced
-ultrasound (CEUS) sequence, one
-wide-angle diverging-wave frame (the *saddle* sequence: `x_ang` −24°…+24° in nine
-steps, no elevation steering, cylindrical elevation focus) received on the full
-1024-element aperture. Beamformed, this single frame gives a sector B-mode of the
-imaging plane: the structural reference view acquired at the same probe placement
-as the contrast (CEUS) recording.
-
-This directory contains one such reference B-mode per dataset: 20 clinical
-transcranial acquisitions (SCULPT study) and 1 static matrix-probe imaging phantom
-(21 files total). It is the structural companion to the OpenH-RF Resolve Stroke
-clinical CEUS clip submission, and the two use the same anonymized subject codes.
+*Saddle-array B-modes of all 21 files in [`saddle/data/`](https://huggingface.co/datasets/nvidia/OpenH-RF/tree/main/resolvestroke/saddle/data), one panel per dataset; the phantom (`PMP01`) shows a regular column of point targets.*
-## Dataset Contributor(s)
+## Dataset Description
-Aitana Waelbroeck\*, Carl Ferlay\*, Arthur Chavignon\*, Maxence Reberol\*, Vincent Hingot\*
+Single-frame anatomical B-mode acquisitions from the "saddle" imaging sequence of Resolve Stroke's SYLVER ultrasound device, using a 32×32 matrix probe. Each raw acquisition contains, alongside the multi-thousand-frame contrast-enhanced ultrasound (CEUS) sequence, one wide-angle diverging-wave frame (the *saddle* sequence: `x_ang` −24°…+24° in nine steps, no elevation steering, cylindrical elevation focus) received on the full 1024-element aperture through four consecutive 256-element receive events per transmit. Beamformed, this single frame gives a sector B-mode of the imaging plane: the structural reference view acquired at the same probe placement as the contrast (CEUS) recording.
-\* Resolve Stroke (29 Rue du Faubourg Saint-Jacques, 75014 Paris)
+This directory contains one such reference B-mode per dataset: 20 clinical transcranial acquisitions (SCULPT study) and 1 static matrix-probe imaging phantom (21 files total). It is the structural companion to the OpenH-RF Resolve Stroke clinical CEUS clip submission, and the two use the same anonymized subject codes.
+
+## Dataset Contributor(s)
-Contact email: maxence.reberol@resolvestroke.com
+- Aitana Waelbroeck
+- Carl Ferlay
+- Arthur Chavignon
+- Maxence Reberol (contact)
+- Vincent Hingot
+- Resolve Stroke, 29 Rue du Faubourg Saint-Jacques, 75014 Paris
## Dataset Creation Date
@@ -52,48 +47,39 @@ Contact email: maxence.reberol@resolvestroke.com
## License / Terms of Use
-CC BY 4.0 (see `LICENCE`). Data is released under Creative Commons Attribution
-4.0 International, which permits commercial use with attribution. (The Python
-scripts in this directory carry their own `SPDX-License-Identifier: Apache-2.0`
-header; the dataset itself is CC BY 4.0.)
+[Creative Commons Attribution 4.0 International (CC BY 4.0)](https://creativecommons.org/licenses/by/4.0/legalcode.en). Retain attribution and identify modifications when reusing the data.
## Intended Usage
-Matrix-probe diverging-wave beamforming research, anatomical B-mode
-reconstruction, and structural reference for the companion transcranial CEUS
-flow/perfusion datasets (OpenH-RF request-for-proposals task group 6.2, Blood Flow).
+Matrix-probe diverging-wave beamforming research, anatomical B-mode reconstruction, and structural reference for the companion transcranial CEUS flow/perfusion datasets (OpenH-RF request-for-proposals task group 6.2, Blood Flow).
## Dataset Characterization
-- Data collection method: 10 human subjects, 20 acquisitions (2 per subject:
- different side and/or session), transcranial through the temporal acoustic
- window, plus 1 static imaging phantom (wire/point targets).
+- Data collection method: 10 human subjects, 20 acquisitions (2 per subject: different side and/or session), transcranial through the temporal acoustic window, plus 1 static imaging phantom (wire/point targets).
- Labeling method: none (a single unlabeled anatomical frame per file).
-- Acquisition system: SYLVER (Resolve Stroke's ultrasound device). SN2672 32×32
- matrix probe, 0.50 mm pitch, 0.30 mm kerf; transmit center frequency ≈ 2.031 MHz,
- sound speed 1540 m/s. The *saddle* sequence transmits 9 diverging waves steered
- `x_ang` −24°…+24° (6° steps), `y_ang = 0`, virtual source at −50 mm, with an
- elevation (saddle) focus at 120 mm. Receive is the full probe, packed as 4
- sub-apertures of 256 elements each and flattened into 1024 virtual elements
- (element index = `aperture·256 + element`, matching PyCompute's `apElemPos`
- ordering). Channel data is digital down-converted (DDC) baseband IQ, so `sampling_frequency`
- (≈ 2.031 MHz) is the post-decimation IQ rate and equals `demodulation_frequency`;
- it is not an RF Nyquist rate (`n_ch = 2`, complex I/Q).
+- Acquisition system: SYLVER (Resolve Stroke's ultrasound device). SN2672 32×32 matrix probe, 0.50 mm pitch, 0.30 mm kerf; transmit center frequency ≈ 2.031 MHz, sound speed 1540 m/s. The *saddle* sequence transmits 9 diverging waves steered `x_ang` −24°…+24° (6° steps), `y_ang = 0`, virtual source at −50 mm, with an elevation (saddle) focus at 120 mm. The system receives 256 channels at a time, so each transmit is fired four times in a row, once per 256-element receive sub-aperture; the four receptions are stacked into 1024 virtual elements (element index = `aperture·256 + element`, matching PyCompute's `apElemPos` ordering), giving the full probe on receive. Channel data is digital down-converted (DDC) baseband IQ, so `sampling_frequency` (≈ 2.031 MHz) is the post-decimation IQ rate and equals `demodulation_frequency`.
+
+## Processing the Dataset
+
+The acquisitions can be processed with the `reconstruct.py` [script](https://github.com/open-h/OpenH-RF/blob/main/datasets/resolvestroke/saddle/reconstruct.py) as provided in the [OpenH-RF GitHub repository](https://github.com/open-h/OpenH-RF), together with the `pipeline.yaml` definition in this folder and the [zea library](https://github.com/tue-bmd/zea). The script streams the data from the Hugging Face Hub.
+
+```bash
+uv run --project /path/to/OpenH-RF python reconstruct.py
+```
+
+`reconstruct.py` streams `PMP01.hdf5` from the Hub by default; set `ZEA_FILE` at the top of the script to another of the 21 files (or a local path). The B-mode PNG is written to `assets/_bmode.png`.
+
+The Python scripts carry their own `SPDX-License-Identifier: Apache-2.0` header; the dataset itself is CC BY 4.0.
## Dataset Format
-One zea HDF5 file per dataset under `data/`, each holding a single frame of DDC IQ
-channel data (`data/raw_data`, last axis `[I, Q]`). Originally written with `zea.File.create`
-(zea v0.1.1), validated `compliant: true` against `validate_zea_spec.py`.
+[zea v0.1.6](https://github.com/tue-bmd/zea)
+
+One zea HDF5 file per dataset under `data/`, each holding a single frame of DDC IQ channel data (`data/raw_data`, last axis `[I, Q]`), in the zea HDF5 format, root `zea_version` 0.1.6, validated `compliant: true` against `validate_zea_spec.py`.
-Files are named `[-][-].hdf5` (anonymized subject code, imaging
-side, and a sequential index when a subject/side has more than one acquisition);
-the phantom is `PMP01.hdf5`.
+Files are named `[-][-].hdf5` (anonymized subject code, imaging side, and a sequential index when a subject/side has more than one acquisition); the phantom is `PMP01.hdf5`.
-The hardware time-gain compensation is baked into `raw_data`; `scan/tgc_gain_curve`
-is the applied (non-linear) gain per axial sample. `reconstruct.py` beamforms the
-stored IQ directly (it does **not** undo the TGC, so deeper structure stays bright);
-divide `raw_data` by `scan/tgc_gain_curve` first to recover true channel amplitudes.
+The hardware time-gain compensation is baked into `raw_data`; `scan/tgc_gain_curve` is the applied (non-linear) gain per axial sample. `reconstruct.py` beamforms the stored IQ directly (it does **not** undo the TGC, so deeper structure stays bright); divide `raw_data` by `scan/tgc_gain_curve` first to recover true channel amplitudes.
## Dataset Quantification
@@ -124,54 +110,22 @@ divide `raw_data` by `scan/tgc_gain_curve` first to recover true channel amplitu
## Subject Metadata
- Type: 10 human subjects (20 acquisitions) + 1 phantom
-- Subject IDs: `SP01`–`SP10` (anonymized), `PMP01` (phantom). Each subject
- contributes 2 files (different side and/or session).
+- Subject IDs: `SP01`–`SP10` (anonymized), `PMP01` (phantom). Each subject contributes 2 files (different side and/or session).
- Anatomy: Brain (transcranial), via the temporal acoustic window.
## Data Validation
-`reconstruct.py` runs a standard `zea.Pipeline` (cast → DAS beamform → envelope →
-normalize → log-compress), configured in `pipeline.yaml`, to reconstruct a B-mode
-from the IQ channel data. The probe is a 2D matrix array insonified by
-diverging-wave transmits, so it beamforms on a polar (sector) grid (a fan spanning
-the divergence angle in the x-z plane at y = 0, apex at the virtual source) and
-scan-converts the result.
-
-The montage below shows the reconstruction of all 21 files, one panel per dataset.
-The phantom (PMP01) shows a regular column of point targets, which checks the depth
-scaling and geometry.
-
-
-
-Set up the OpenH-RF environment once (clone
-and run `uv sync` in it), then reconstruct any file:
-
-```
-uv run --project /path/to/OpenH-RF python reconstruct.py --input data/.hdf5
-```
+`reconstruct.py` runs a standard `zea.Pipeline` (cast → DAS beamform → envelope → normalize → log-compress), configured in `pipeline.yaml`, to reconstruct a B-mode from the IQ channel data. The probe is a 2D matrix array insonified by diverging-wave transmits, so it beamforms on a polar (sector) grid (a fan spanning the divergence angle in the x-z plane at y = 0, apex at the virtual source) and scan-converts the result.
-The B-mode PNG is written to `outputs/_bmode.png` (override with `--output`).
-With no `--input`, the first file under `data/` is used.
+The montage at the top of this card shows the reconstruction of all 21 files, one panel per dataset. The phantom (PMP01) shows a regular column of point targets, which checks the depth scaling and geometry.
## Ethical Considerations
-Human-subject data. Channel data was acquired during the SCULPT clinical study
-(National registration number (ID RCB): 2025-A00023-46; NCT07324421), a prospective
-monocentric trial conducted at CHU Gui de Chauliac (Montpellier, France) under approval
-from the French ethics committee (Comité de Protection des Personnes, CPP), comparing
-cerebral perfusion from Resolve Stroke's SYLVER ultrasound system with routine perfusion
-CT in ICU/CCU patients, using SonoVue® as the contrast agent.
+Human-subject data. Channel data was acquired during the SCULPT clinical study (National registration number (ID RCB): 2025-A00023-46; NCT07324421), a prospective monocentric trial conducted at CHU Gui de Chauliac (Montpellier, France) under approval from the French ethics committee (Comité de Protection des Personnes, CPP), comparing cerebral perfusion from Resolve Stroke's SYLVER ultrasound system with routine perfusion CT in ICU/CCU patients, using SonoVue® as the contrast agent.
-The dataset contains no direct personal identifiers: subjects are referenced only by
-an anonymized study code, and no name, date of birth, or operator identifiers are
-stored in the released files. The only hardware field is the probe model (`SN2672`),
-which is identical across all files and identifies the study device, not any subject.
+The dataset contains no direct personal identifiers: subjects are referenced only by an anonymized study code, and no name, date of birth, or operator identifiers are stored in the released files. The only hardware field is the probe model (`SN2672`), which is identical across all files and identifies the study device, not any subject.
## Known Issues
-- `raw_data` has the hardware TGC baked in; `scan/tgc_gain_curve` is that (non-linear)
- applied curve. `reconstruct.py` beamforms the stored IQ as-is (leaving the TGC in,
- which keeps deep structure bright); a user wanting true channel amplitudes must
- divide `raw_data` by the curve.
-- `sampling_frequency ≈ center_frequency` because the data is DDC baseband IQ (see
- Dataset Characterization), not an RF acquisition.
+- `raw_data` has the hardware TGC baked in; `scan/tgc_gain_curve` is that (non-linear) applied curve. `reconstruct.py` beamforms the stored IQ as-is (leaving the TGC in, which keeps deep structure bright); a user wanting true channel amplitudes must divide `raw_data` by the curve.
+- `sampling_frequency ≈ center_frequency` because the data is DDC baseband IQ (see Dataset Characterization), not an RF acquisition.
diff --git a/datasets/resolvestroke/saddle/assets/main.png b/datasets/resolvestroke/saddle/assets/main.png
new file mode 100644
index 0000000..ba9498e
Binary files /dev/null and b/datasets/resolvestroke/saddle/assets/main.png differ
diff --git a/datasets/resolvestroke/saddle/pipeline.yaml b/datasets/resolvestroke/saddle/pipeline.yaml
index 39a16e3..2fda330 100644
--- a/datasets/resolvestroke/saddle/pipeline.yaml
+++ b/datasets/resolvestroke/saddle/pipeline.yaml
@@ -1,7 +1,8 @@
parameters:
grid_type: polar
polar_limits: [-0.45, 0.45] # sector half-angle in rad (≈ ±26°)
- zlims: [0.01, 0.12] # on-axis depth range in m (reconstruct.py offsets the apex)
+ zlims: [0.01, 0.12] # on-axis depth range in m (zea adds distance_to_apex)
+ distance_to_apex: 0.05 # virtual source behind the array (|focus_distances|)
grid_size_z: 420 # radial samples
grid_size_x: 220 # angular samples
grid_size_y: 1 # 1 => 2D sector (unlocks polar grid)
diff --git a/datasets/resolvestroke/saddle/reconstruct.py b/datasets/resolvestroke/saddle/reconstruct.py
index eadf4a5..e9f16f4 100644
--- a/datasets/resolvestroke/saddle/reconstruct.py
+++ b/datasets/resolvestroke/saddle/reconstruct.py
@@ -33,63 +33,54 @@
from zea import Config, File, Pipeline
HERE = Path(__file__).parent
-# Datasets live under data/; fall back to a file sitting next to the script.
-_HDF5 = "hf://nvidia/OpenH-RF/resolvestroke/saddle/data/PMP01.hdf5"
-DEFAULT_INPUT = _HDF5[0] if _HDF5 else None
-CONFIG = HERE / "pipeline.yaml"
+CONFIG = "hf://nvidia/OpenH-RF/resolvestroke/saddle/pipeline.yaml"
+HF_DIR = "hf://nvidia/OpenH-RF/resolvestroke/saddle/data"
# --- Inputs -----------------------------------------------------------------
-# Defaults stream straight from the published corpus. Swap any of these for a
-# local path to run against your own copy.
-INPUT = "hf://nvidia/OpenH-RF/resolvestroke/saddle/data/PMP01.hdf5"
-OUTPUT = None # Output PNG path (default: outputs/_bmode.png)
-
-
-def main():
- # Default output goes to outputs/ next to the script; create it if needed.
- out_path = OUTPUT or (HERE / "outputs" / f"{Path(INPUT).stem}_bmode.png")
- out_path.parent.mkdir(parents=True, exist_ok=True)
-
- zea.init_device()
- config = Config.from_path(str(CONFIG))
-
- with File(str(INPUT)) as f:
+# Defaults stream straight from the published corpus. Any of the 21 files works:
+# the 20 clinical acquisitions (SP01-Left-1 ... SP10-Right) or the phantom PMP01.
+# Swap ZEA_FILE for a local path to run against your own copy.
+ZEA_FILE = f"{HF_DIR}/PMP01.hdf5"
+OUT = HERE / "assets" / f"{Path(ZEA_FILE).stem}_bmode.png"
+
+
+def reconstruct(input_path, config, pipeline=None):
+ """Beamform the single saddle frame of ``input_path`` with ``config``.
+
+ Returns:
+ (image, grid, grid_type): ``image`` is the log-compressed B-mode
+ (n_radial, n_angular) for a polar grid; ``grid`` the matching Cartesian
+ (x, y, z) sample positions in metres.
+ """
+ with File(str(input_path)) as f:
+ # pipeline.yaml pins distance_to_apex (the virtual source behind the array);
+ # zea takes zlims as on-axis depth and adds the apex to the radii itself.
parameters = f.load_parameters(**config.parameters)
- if parameters.grid_type == "polar":
- # For a diverging wave the polar-grid apex is the virtual source
- # (|focus_distances|); derive it unless pipeline.yaml pins it.
- apex = config.parameters.get("distance_to_apex")
- if apex is None:
- focus = float(np.abs(np.ravel(parameters.focus_distances)[0]))
- apex = focus if focus > 0 else 0.0
- # zea measures the polar near-bound as radius-from-apex, so shift the
- # near zlim by the apex → the configured zlims are true on-axis depth.
- z0, z1 = (float(v) for v in config.parameters["zlims"])
- overrides = {
- **config.parameters,
- "distance_to_apex": apex,
- "zlims": (z0 + apex, z1),
- }
- parameters = f.load_parameters(**overrides)
raw = f.data.raw_data[0:1] # single frame → (1, n_tx, n_ax, n_el, n_ch)
- print(f"raw_data shape : {raw.shape}")
- print(f"grid : {parameters.grid.shape} ({parameters.grid_type})")
-
- pipeline = Pipeline.from_config(config)
+ pipeline = pipeline or Pipeline.from_config(config)
inputs = pipeline.prepare_parameters(parameters)
outputs = pipeline(**{pipeline.key: raw}, **inputs, return_numpy=True)
image = np.asarray(outputs[pipeline.output_key])[0]
+ grid = np.asarray(parameters.grid) # (..., 3), last axis (x, y, z) in metres
+ return image, grid, parameters.grid_type
+
+
+def main():
+
+ zea.init_device()
+ config = Config.from_path(str(CONFIG))
+ image, grid, grid_type = reconstruct(ZEA_FILE, config)
+ print(f"grid : {grid.shape} ({grid_type})")
# Display dynamic range from pipeline.yaml (default 40 dB).
dr = config.parameters.get("dynamic_range", [-40, 0])
vmin, vmax = float(dr[0]), float(dr[1])
- grid = np.asarray(parameters.grid) # (..., 3), last axis (x, y, z) in metres
zea.visualize.set_mpl_style()
fig, ax = plt.subplots(figsize=(7, 7))
- if parameters.grid_type == "polar":
+ if grid_type == "polar":
# Scan-convert: place each (radial, angular) sample at its Cartesian (x, z).
x_mm, z_mm = grid[..., 0] * 1e3, grid[..., 2] * 1e3
pm = ax.pcolormesh(x_mm, z_mm, image, cmap="gray", vmin=vmin, vmax=vmax, shading="auto")
@@ -116,10 +107,11 @@ def main():
cax = make_axes_locatable(ax).append_axes("right", size="5%", pad=0.05)
fig.colorbar(pm, cax=cax, label="dB")
fig.tight_layout()
- fig.savefig(str(out_path), dpi=120, bbox_inches="tight")
+ Path(OUT).parent.mkdir(parents=True, exist_ok=True)
+ fig.savefig(str(OUT), dpi=120, bbox_inches="tight")
print(f"Reconstructed : {image.shape}")
- print(f"Saved : {out_path}")
+ print(f"Saved : {OUT}")
if __name__ == "__main__":
diff --git a/datasets/siemens-healthineers/README.md b/datasets/siemens-healthineers/README.md
index f325d96..ab47e6f 100644
--- a/datasets/siemens-healthineers/README.md
+++ b/datasets/siemens-healthineers/README.md
@@ -1,5 +1,6 @@
---
-pretty_name: "OpenH-RF — Siemens In-Vivo Raw Ultrasound Channel Data"
+name: siemens-healthineers
+pretty_name: "Siemens In-Vivo Raw Ultrasound Channel Data"
license: cc-by-4.0
task_categories:
- other
@@ -16,32 +17,23 @@ size_categories:
- 1K (Siemens Healthineers, Ultrasound; contact)
+- Jane Bucholz, BHS (Medical Imaging); PgDip HS (Ultrasound); DMU (General); PgDip Public Health (Dist) (Siemens Healthineers, Ultrasound)
+- Craig Williams, PG Dip Medical Ultrasound, BSc (Hons) Diagnostic Radiography (Siemens Healthineers, Ultrasound)
+- Walter Simson, PhD (additional contributor)
## Dataset Creation Date
@@ -49,38 +41,41 @@ Contact: Ismayil Guracar ([ismayil.guracar@siemens-healthineers.com](mailto:isma
## License / Terms of Use
-[Creative Commons Attribution 4.0 International (CC BY 4.0)](https://creativecommons.org/licenses/by/4.0/legalcode.en).
+[Creative Commons Attribution 4.0 International (CC BY 4.0)](https://creativecommons.org/licenses/by/4.0/legalcode.en). Retain attribution and identify modifications when reusing the data.
## Intended Usage
-Developing and benchmarking methods that operate on raw ultrasound channel
-data: learned/adaptive beamforming, and self-supervised representation
-learning on RF/IQ data. Subject IDs enable subject-wise splits. the
-reference split holds out Subject_13 and Subject_14 for validation.
+Developing and benchmarking methods that operate on raw ultrasound channel data: learned/adaptive beamforming, and self-supervised representation learning on RF/IQ data. Subject IDs enable subject-wise splits. the reference split holds out Subject_13 and Subject_14 for validation.
## Dataset Characterization
-- **Data Collection Method:** healthy adult volunteers in a
-non-clinical research setting.
-- **Labeling Method:** human-annotated subject/anatomy metadata and
-per-frame quality tags (`contact`, `challenging`).
-- **Acquisition system:** Siemens ACUSON Sequoia development scanner, 10L4
-180-element linear array (0.201 mm pitch, 36.2 mm aperture; elements
-0.2 × 9 mm); transmit center frequency 6.5 MHz; baseband IQ sampled at
-13.33 MHz. Full synthetic aperture multi-static acquisition: 180
-single-element transmit events per frame, all 180 elements received.
+- **Data Collection Method:** healthy adult volunteers in a non-clinical research setting.
+- **Labeling Method:** human-annotated subject/anatomy metadata and per-frame quality tags (`contact`, `challenging`).
+- **Acquisition system:** Siemens ACUSON Sequoia development scanner, 10L4 180-element linear array (0.201 mm pitch, 36.2 mm aperture; elements 0.2 × 9 mm); transmit center frequency 6.5 MHz; baseband IQ sampled at 13.33 MHz. Full synthetic aperture multi-static acquisition: 180 single-element transmit events per frame, all 180 elements received.
+
+## Processing the Dataset
+
+The acquisitions can be processed with the `pipeline.yaml` definition in this folder and the [zea library](https://github.com/tue-bmd/zea).
+
+`zea` streams the data from the Hugging Face Hub and processes it according to the pipeline. You can try it out with the following command:
+
+```bash
+zea process \
+ --dataset hf://nvidia/OpenH-RF/siemens-healthineers/data/Subject_03_acq_008.hdf5 \
+ --config hf://nvidia/OpenH-RF/siemens-healthineers/pipeline.yaml
+```
+
+Alternatively, you can use the `reconstruct.py` [script](https://github.com/open-h/OpenH-RF/blob/main/datasets/siemens-healthineers/reconstruct.py) as provided in the [OpenH-RF GitHub repository](https://github.com/open-h/OpenH-RF).
## Dataset Format
-Packaged in the `zea` [file format](https://zea.readthedocs.io/en/openh-rf-latest/data-acquisition.html)
-(current release `zea_version` 0.1.6), **one HDF5
-file per acquisition**:
+[zea v0.1.6](https://github.com/tue-bmd/zea)
+
+Packaged in the `zea` [file format](https://zea.readthedocs.io/en/openh-rf-latest/data-acquisition.html) (current release `zea_version` 0.1.6), **one HDF5 file per acquisition**:
-- On-scanner quadrature demodulation to baseband IQ, demodulation frequency stored per
-file.
+- On-scanner quadrature demodulation to baseband IQ, demodulation frequency stored per file.
- On-scanner analog TGC and digital filtering with scaling are applied.
-- FSA transmit scheme encoded explicitly (one-hot `tx_apodizations`,
-zero `t0_delays`, transmit origins at element positions).
+- FSA transmit scheme encoded explicitly (one-hot `tx_apodizations`, zero `t0_delays`, transmit origins at element positions).
Per-file contents:
@@ -112,54 +107,33 @@ All spatial maps carry per-pixel Cartesian `coordinates` in meters, last axis `[
**Current OpenH-RF release:** 590 HDF5 files; 228.54 GB (228,538,449,920 bytes) stored; root `zea_version` **0.1.6**. Sizes include all HDF5 contents and use decimal units (MB = 10^6 bytes, GB = 10^9 bytes, TB = 10^12 bytes), not decoded-array memory or original-source download sizes.
-- **590 acquisitions (4,541 frames) from 15 subjects**, one continuous
-dataset: 51 acquisitions / 411 frames (Subjects 01–03) from the first
-acquisition round and 539 acquisitions / 4,130 frames (Subjects 04–15) from
-the second.
-- **File naming:** one HDF5 per acquisition, `Subject_XX_acq_NNN.hdf5`
-(acquisitions numbered per subject in acquisition order).
+- **590 acquisitions (4,539 frames) from 15 subjects**, one continuous dataset: 51 acquisitions / 411 frames (Subjects 01–03) from the first acquisition round and 539 acquisitions / 4,128 frames (Subjects 04–15) from the second.
+- **File naming:** one HDF5 per acquisition, `Subject_XX_acq_NNN.hdf5` (acquisitions numbered per subject in acquisition order).
- **Stored HDF5 size:** 228.54 GB (228,538,449,920 bytes); raw IQ stored as float32 I/Q, one HDF5 per acquisition.
-- Per-frame boolean quality labels support curation: `contact` and
-`challenging` (see feature table). Acquisitions not yet through
-manual review default to `contact=True, challenging=False`.
+- Per-frame boolean quality labels support curation: `contact` and `challenging` (see feature table). Acquisitions not yet through manual review default to `contact=True, challenging=False`.
## Subject Metadata
Aggregate statistics only; files carry anonymized subject IDs, no PHI.
- **15 adult volunteers in total** (Subject_01–Subject_15).
-- Acquisitions per subject (590 total): Subject_01: 12, Subject_02: 6,
-Subject_03: 33, Subject_04: 44, Subject_05: 41, Subject_06: 47,
-Subject_07: 35, Subject_08: 51, Subject_09: 44, Subject_10: 32,
-Subject_11: 49, Subject_12: 36, Subject_13: 36, Subject_14: 52,
-Subject_15: 72.
-- Anatomies scanned (by acquisition): breast (284), thyroid (117),
-axilla (59), neck (29), abdomen (20), carotid (18), other/unlabeled (63).
-- All scans are B-mode-style views (predominantly superficial anatomy) on a
-single probe and system; no pathology labels are asserted.
+- Acquisitions per subject (590 total): Subject_01: 12, Subject_02: 6, Subject_03: 33, Subject_04: 44, Subject_05: 41, Subject_06: 47, Subject_07: 35, Subject_08: 51, Subject_09: 44, Subject_10: 32, Subject_11: 49, Subject_12: 36, Subject_13: 36, Subject_14: 52, Subject_15: 72.
+- Anatomies scanned (by acquisition): breast (284), thyroid (117), axilla (59), neck (29), abdomen (20), carotid (18), other/unlabeled (63).
+- All scans are B-mode-style views (predominantly superficial anatomy) on a single probe and system; no pathology labels are asserted.
## Data Validation
-[`pipeline.yaml`](pipeline.yaml). `data/image` is produced by this same
-pipeline at conversion time, so `reconstruct.py` reproduces it exactly — a
-round-trip check that the probe geometry, transmit description, and timing are
-recorded correctly. Reference B-modes rendered by this pipeline — one per
-anatomy (breast, thyroid, axilla, carotid, neck, abdomen) — are in
+[`pipeline.yaml`](pipeline.yaml). `data/image` is produced by this same pipeline at conversion time, so `reconstruct.py` reproduces it — a round-trip check that the probe geometry, transmit description, and timing are recorded correctly. Reference B-modes rendered by this pipeline are in [`assets/`](assets), and the strip at the top of this card is four of them.
+
+
+Ten frames of `data/Subject_03_acq_008.hdf5`. `custom/contact` marks the first frame as off-subject — use those per-frame flags when picking frames, rather than assuming frame 0 is usable.
## Known Issues
-- Time-axis length (`n_ax` = `raw_data.shape[2]`) varies per acquisition
-(native lengths range ~700–2270 samples); each file is stored at its own
-native length.
+- Time-axis length (`n_ax` = `raw_data.shape[2]`) varies per acquisition (native lengths range ~700–2270 samples); each file is stored at its own native length.
- `view_difficulty` annotations exist for the first acquisition round only.
## Ethical Considerations
-The released data is anonymized and contains no protected health information
-(PHI). Acquisitions were performed under Siemens Healthineers internal
-ultrasound research safety, human-safety, and consent procedures. Metadata
-labels, file names, and source identifiers are screened against the HIPAA Safe
-Harbor standard, with GDPR-equivalent handling for any EU-origin data; this
-release contains no EU-origin data. The dataset is released under the CC BY
-4.0 license.
+The released data is anonymized and contains no protected health information (PHI). Acquisitions were performed under Siemens Healthineers internal ultrasound research safety, human-safety, and consent procedures. Metadata labels, file names, and source identifiers are screened against the HIPAA Safe Harbor standard, with GDPR-equivalent handling for any EU-origin data; this release contains no EU-origin data. The dataset is released under the CC BY 4.0 license.
diff --git a/datasets/siemens-healthineers/assets/Subject_01_acq_006_recon.png b/datasets/siemens-healthineers/assets/Subject_01_acq_006_recon.png
new file mode 100644
index 0000000..27ac49e
Binary files /dev/null and b/datasets/siemens-healthineers/assets/Subject_01_acq_006_recon.png differ
diff --git a/datasets/siemens-healthineers/assets/Subject_03_acq_008.gif b/datasets/siemens-healthineers/assets/Subject_03_acq_008.gif
new file mode 100644
index 0000000..bc781be
Binary files /dev/null and b/datasets/siemens-healthineers/assets/Subject_03_acq_008.gif differ
diff --git a/datasets/siemens-healthineers/assets/anatomies.png b/datasets/siemens-healthineers/assets/anatomies.png
new file mode 100644
index 0000000..58e0aaa
Binary files /dev/null and b/datasets/siemens-healthineers/assets/anatomies.png differ
diff --git a/datasets/siemens-healthineers/assets/main.png b/datasets/siemens-healthineers/assets/main.png
new file mode 100644
index 0000000..2251773
Binary files /dev/null and b/datasets/siemens-healthineers/assets/main.png differ
diff --git a/datasets/siemens-healthineers/pipeline.yaml b/datasets/siemens-healthineers/pipeline.yaml
index d477f6b..091cc13 100644
--- a/datasets/siemens-healthineers/pipeline.yaml
+++ b/datasets/siemens-healthineers/pipeline.yaml
@@ -1,3 +1,14 @@
+parameters:
+ xlims: [-0.018, 0.018]
+ zlims: [0.0, 0.035] # RF runs out at 40.7 mm
+ # Isotropic pixels (~35.5 um both ways). The stored data/image is exactly
+ # isotropic (0.0791 mm over 36 x 40 mm); 1014 x 1100 over 36 x 35 mm is not,
+ # and stretched every reconstruction ~12% vertically against the reference.
+ grid_size_x: 1014
+ grid_size_z: 986
+ n_ch: 2 # baseband IQ
+ selected_transmits: all
+ dynamic_range: [-60, 0]
pipeline:
operations:
- beamform
diff --git a/datasets/siemens-healthineers/reconstruct.py b/datasets/siemens-healthineers/reconstruct.py
index c61e9d3..ffbbccb 100644
--- a/datasets/siemens-healthineers/reconstruct.py
+++ b/datasets/siemens-healthineers/reconstruct.py
@@ -5,10 +5,9 @@
B-mode reconstruction of in-vivo IQ channel data from a clinical scanner.
-The script renders a three-panel figure: IQ magnitude, the stored B-mode, and
-the zea reconstruction. ``data/image`` was produced by this same processing at
-conversion time, so the reconstruction reproduces it exactly -- a round-trip
-check on the converted data.
+``data/image`` was produced by this same processing at conversion time, so the
+reconstruction reproduces it exactly -- a round-trip check on the converted
+data. The grid and display range live in ``pipeline.yaml``.
Requires zea>=0.1.6 (https://github.com/tue-bmd/zea), the library that does the
ultrasound processing here, together with one of its Keras backends (JAX,
@@ -29,72 +28,53 @@
import keras
import matplotlib.pyplot as plt
import zea
-from zea.ops import Beamform, EnvelopeDetect, LogCompress, Normalize
+from zea import Config, File, Pipeline
HERE = Path(__file__).parent
# --- Inputs -----------------------------------------------------------------
# Defaults stream straight from the published corpus. Swap any of these for a
# local path to run against your own copy.
-INPUT = "hf://nvidia/OpenH-RF/siemens-healthineers/data/Subject_01_acq_006.hdf5"
-OUTPUT = None # PNG path (default: _recon.png)
+ZEA_FILE = "hf://nvidia/OpenH-RF/siemens-healthineers/data/Subject_01_acq_006.hdf5"
+CONFIG = HERE / "pipeline.yaml"
+OUT = None # PNG path (default: _recon.png)
FRAME = 0
-DEPTH_M = 0.035 # reconstruct down to 35 mm
-SAVE_PIPELINE = None # Optionally write the pipeline to a reusable pipeline.yaml
-
-
-def coords_to_imshow_mm(coords):
- """Per-pixel coordinates (z, x, 3), last axis [x, y, z] in metres ->
- mpl imshow extent [left, right, bottom, top] in mm."""
- x, z = coords[..., 0], coords[..., 2]
- return [x.min() * 1e3, x.max() * 1e3, z.max() * 1e3, z.min() * 1e3]
+HF_CONFIG = "hf://nvidia/OpenH-RF/siemens-healthineers/pipeline.yaml" # where CONFIG is published
def main():
- output = OUTPUT or Path(Path(INPUT).stem + "_recon.png")
+ output = OUT or HERE / "assets" / f"{Path(ZEA_FILE).stem}_recon.png"
zea.init_device()
+ config = Config.from_path(str(CONFIG))
- with zea.File(str(INPUT)) as f:
- raw = f.data.raw_data[:]
- img_coords = f.data.image.coordinates[:]
- # Acquisition parameters straight from the file; reconstruction grid
- # derived from the stored B-mode's coordinates so the results align.
- nz, nx = img_coords.shape[0], img_coords.shape[1]
- params = f.load_parameters(
- grid_size_x=nx,
- grid_size_z=nz,
- xlims=[float(img_coords[..., 0].min()), float(img_coords[..., 0].max())],
- zlims=[float(img_coords[..., 2].min()), DEPTH_M],
- n_ch=raw.shape[-1], # 2 = baseband IQ
- selected_transmits="all",
- )
+ with File(str(ZEA_FILE)) as f:
+ params = f.load_parameters(**config.parameters)
+ raw = f.data.raw_data[FRAME : FRAME + 1]
print(f"raw_data: {raw.shape}")
- pipeline = zea.Pipeline(
- operations=[
- Beamform(beamformer="delay_and_sum"),
- EnvelopeDetect(),
- Normalize(),
- LogCompress(),
- ]
- )
- if SAVE_PIPELINE is not None:
- pipeline.to_yaml(str(SAVE_PIPELINE))
- print(f"Saved pipeline recipe to {SAVE_PIPELINE}")
+ pipeline = Pipeline.from_config(config)
inputs = pipeline.prepare_parameters(params)
- recon = keras.ops.convert_to_numpy(pipeline(data=raw[FRAME : FRAME + 1], **inputs)["data"])[0]
+ recon = keras.ops.convert_to_numpy(pipeline(data=raw, **inputs)["data"])[0]
recon_ext = [v * 1e3 for v in params.extent_imshow]
print(f"Reconstructed: {recon.shape}")
zea.visualize.set_mpl_style()
fig, ax = plt.subplots(figsize=(6, 6))
- ax.imshow(recon, aspect="equal", cmap="gray", vmin=-60, vmax=0, extent=recon_ext)
+ ax.imshow(
+ recon,
+ aspect="equal",
+ cmap="gray",
+ vmin=params.dynamic_range[0],
+ vmax=params.dynamic_range[1],
+ extent=recon_ext,
+ )
ax.set_xlabel("Lateral [mm]")
ax.set_ylabel("Depth [mm]")
plt.tight_layout()
+ Path(output).parent.mkdir(parents=True, exist_ok=True)
plt.savefig(output, dpi=150, bbox_inches="tight")
print(f"Saved {output}")
diff --git a/datasets/stanford-murine/README.md b/datasets/stanford-murine/README.md
index 91000d3..2da4292 100644
--- a/datasets/stanford-murine/README.md
+++ b/datasets/stanford-murine/README.md
@@ -1,4 +1,5 @@
---
+name: stanford-murine
license: cc-by-4.0
pretty_name: Stanford Murine Liver and Sound-Speed Phantom Ultrasound
task_categories:
@@ -22,30 +23,39 @@ size_categories:
# Stanford Murine Liver and Sound-Speed Phantom Ultrasound
+
+
+*Frame 0 reconstructed with `reconstruct.py` (L12-3v, 60 dB). Top: the exposed liver of [Rat3](https://huggingface.co/datasets/nvidia/OpenH-RF/blob/main/stanford-murine/data/RatExperiments/VerasonicsAcq/Rat3/ExposedLiver/DATA_Tracks_20190319_115804.hdf5), `multifocal` track. Bottom: the ATS 549 phantom's [lesions](https://huggingface.co/datasets/nvidia/OpenH-RF/blob/main/stanford-murine/data/SoSExperiments/august13_2020/L12_3v/ATS_phantom/lesion/DATA_Tracks_20200813_164505.hdf5) and [point targets](https://huggingface.co/datasets/nvidia/OpenH-RF/blob/main/stanford-murine/data/SoSExperiments/august13_2020/L12_3v/ATS_phantom/point_target/DATA_Tracks_20200813_164745.hdf5), `hadamard` track. The point targets curve into arcs because the phantom is beamformed at 1540 m/s while its own sound speed is lower — the mismatch this dataset is built to estimate and correct.*
+
## Dataset Description
-This dataset contains pre-beamformed pulse-echo ultrasound channel data from
-murine livers and sound-speed phantoms. The data were acquired on a Verasonics
-Vantage 256 using multifocal, Hadamard-encoded, and full synthetic aperture
-(FSA) transmit sequences. The dataset supports research on beamforming,
-sound-speed estimation, and aberration correction; it is not intended for
-clinical diagnosis.
+This dataset contains pre-beamformed pulse-echo ultrasound channel data from murine livers and sound-speed phantoms. The data were acquired on a Verasonics Vantage 256 using multifocal, Hadamard-encoded, and full synthetic aperture (FSA) transmit sequences. The dataset supports research on beamforming, sound-speed estimation, and aberration correction; it is not intended for clinical diagnosis.
The source data are available from Figshare:
- [Murine liver acquisitions](https://doi.org/10.25452/figshare.plus.28291985)
- [Sound-speed phantom and meat-layer acquisitions](https://doi.org/10.25452/figshare.plus.28291988)
-The converted demo dataset is hosted at
-[openh-rf/stanford](https://huggingface.co/datasets/openh-rf/stanford).
+The original Figshare releases were published under Apache 2.0; this converted release is CC BY 4.0.
+
+The converted dataset is hosted at [nvidia/OpenH-RF/stanford-murine](https://huggingface.co/datasets/nvidia/OpenH-RF/tree/main/stanford-murine).
-## Dataset Contributors
+## Dataset Contributor(s)
-The source datasets were created at Stanford University by Arsenii V.
-Telichko, Rehman Ali, Andrew Andrzejek, Thurston Brevett, Benjamin N. Frey,
-Brian Boitnott, Jihye Baek, Louise Zhuang, Hoda Hashemi, Jun Hong Park, Caelia
-Thomas, and Jeremy Dahl. The contributing organization is the Dahl Lab,
-Stanford University. Contact: `jjdahl@stanford.edu`.
+The source datasets were created at Stanford University (Dahl Lab):
+
+- Arsenii V. Telichko
+- Rehman Ali
+- Andrew Andrzejek
+- Thurston Brevett
+- Benjamin N. Frey
+- Brian Boitnott
+- Jihye Baek
+- Louise Zhuang
+- Hoda Hashemi
+- Jun Hong Park
+- Caelia Thomas
+- Jeremy Dahl (contact)
## Dataset Creation Date
@@ -53,7 +63,7 @@ Stanford University. Contact: `jjdahl@stanford.edu`.
## License / Terms of Use
-This dataset is provided in OpenH-RF under the Creative Commons Attribution 4.0 International License (CC BY 4.0) (https://creativecommons.org/licenses/by/4.0/). The original Figshare releases were published under Apache 2.0.
+[Creative Commons Attribution 4.0 International (CC BY 4.0)](https://creativecommons.org/licenses/by/4.0/legalcode.en). Retain attribution and identify modifications when reusing the data.
## Intended Usage
@@ -64,33 +74,24 @@ The data are intended for development and validation of:
- aberration correction through tissue or meat layers; and
- comparisons among multifocal, Hadamard-encoded, and FSA acquisition schemes.
-The provided pipeline is a reference delay-and-sum B-mode reconstruction, not
-a prescribed preprocessing pipeline for model training.
+The provided pipeline is a reference delay-and-sum B-mode reconstruction, not a prescribed preprocessing pipeline for model training.
## Dataset Characterization
### Data Collection Method
-The collection combines in-vivo and post-mortem animal acquisitions with
-table-top phantom acquisitions:
+The collection combines in-vivo and post-mortem animal acquisitions with table-top phantom acquisitions:
-- The murine study contains liver scans from 20 Zucker rats: 4 lean controls
- and 16 obese animals used as a model of hepatic steatosis.
-- The phantom study contains an ATS 549 phantom and six agarose/graphite
- phantoms with varying n-propanol concentration. Many acquisitions include a
- 10–15 mm porcine or galline meat layer as a controlled aberrator.
+- The murine study contains liver scans from 20 Zucker rats: 4 lean controls and 16 obese animals used as a model of hepatic steatosis.
+- The phantom study contains an ATS 549 phantom and six agarose/graphite phantoms with varying n-propanol concentration. Many acquisitions include a 10–15 mm porcine or galline meat layer as a controlled aberrator.
### Labeling Method
-No image, pixel-wise segmentation, or manual annotation labels are supplied.
-Rat-level sound-speed, fat-percentage, and histopathology measurements are
-derived from the source quantification workbooks when available. Phantom
-sound speeds were measured independently with a through-transmission setup.
+No image, pixel-wise segmentation, or manual annotation labels are supplied. Rat-level sound-speed, fat-percentage, and histopathology measurements are derived from the source quantification workbooks when available. Phantom sound speeds were measured independently with a through-transmission setup.
### Acquisition System
-All acquisitions use a Verasonics Vantage 256 research scanner. The converted
-demo covers:
+All acquisitions use a Verasonics Vantage 256 research scanner. The converted demo covers:
| Probe | Geometry | Elements | Center frequency | Sampling frequency |
|---|---|---:|---:|---:|
@@ -98,18 +99,29 @@ demo covers:
| L12-3v | Linear | 192 | 6.0 or 7.813 MHz | 25.0 or 31.25 MHz |
| L12-5 | Linear | 256 | 7.5 MHz | 31.25 MHz |
-Each output file bundles three tracks named `multifocal`, `hadamard`, and
-`synthetic_aperture`. Transmit delays, transmit apodization, focal distances,
-origins, receive initial times, probe geometry, acquisition sound speed, and
-sampling frequencies are read from the corresponding MAT file.
-For the rat acquisitions, the Verasonics sound-speed setting is 1540 m/s; this
-is retained in `scan/sound_speed` for reconstruction. It is distinct from the
-post-acquisition liver sound-speed measurements described below.
+Each output file bundles three tracks named `multifocal`, `hadamard`, and `synthetic_aperture`. Transmit delays, transmit apodization, focal distances, origins, receive initial times, probe geometry, acquisition sound speed, and sampling frequencies are read from the corresponding MAT file. For the rat acquisitions, the Verasonics sound-speed setting is 1540 m/s; this is retained in `scan/sound_speed` for reconstruction. It is distinct from the post-acquisition liver sound-speed measurements described below.
+
+## Processing the Dataset
+
+The acquisitions can be processed with the `pipeline_multifocal.yaml`, `pipeline_hadamard.yaml` and `pipeline_synthetic_aperture.yaml` definitions in this folder and the [zea library](https://github.com/tue-bmd/zea). Each file bundles three tracks, one per transmit sequence (`multifocal`, `hadamard`, `synthetic_aperture`), and each track has its own pipeline.
+
+`zea` streams the data from the Hugging Face Hub and processes it according to the pipeline; pass the matching track with `--track`. You can try it out with the following command:
+
+```bash
+zea process \
+ --dataset hf://nvidia/OpenH-RF/stanford-murine/data/RatExperiments/VerasonicsAcq/Rat3/ExposedLiver/DATA_Tracks_20190319_115804.hdf5 \
+ --config hf://nvidia/OpenH-RF/stanford-murine/pipeline_synthetic_aperture.yaml \
+ --track synthetic_aperture \
+ --n-frames 1
+```
+
+Alternatively, you can use the `reconstruct.py` [script](https://github.com/open-h/OpenH-RF/blob/main/datasets/stanford-murine/reconstruct.py) as provided in the [OpenH-RF GitHub repository](https://github.com/open-h/OpenH-RF). It reconstructs the first frame of every track in `ZEA_FILE` with the same pipelines and writes one image per track to `assets/`. On top of the YAML, the script inserts a baseband FIR low-pass after demodulation, with its cutoff at half the probe bandwidth (4.0 MHz for L12-3v, 3.0 MHz for L12-5, 1.3 MHz for C5-2v). The cutoff depends on the probe, so it is not part of the pipeline YAMLs and `zea process` runs without it; the difference is small on the rat acquisitions and clearly visible at depth on the phantoms.
## Dataset Format
-Converted data use the zea HDF5 representation. Channel samples have dimension
-order:
+[zea v0.1.4](https://github.com/tue-bmd/zea)
+
+Converted data use the zea HDF5 representation. Channel samples have dimension order:
```text
(n_frames, n_tx, n_ax, n_el, n_ch)
@@ -117,34 +129,23 @@ order:
The converter:
-1. reads every acquired Verasonics receive-buffer frame, limited to the sample
- interval referenced by each sequence's Receive metadata;
-2. coherently averages duplicate physical elements from overlapping receive
- apertures while retaining full amplitude for elements recorded once;
+1. reads every acquired Verasonics receive-buffer frame, limited to the sample interval referenced by each sequence's Receive metadata;
+2. coherently averages duplicate physical elements from overlapping receive apertures while retaining full amplitude for elements recorded once;
3. decodes the positive/negative Hadamard acquisitions;
-4. trims axial samples that are zero across every frame, transmit, element, and
- channel; and
+4. trims axial samples that are zero across every frame, transmit, element, and channel; and
5. stores the resulting RF channel data as `float32`.
-The `float32` dtype is intentional. Coherent aperture averaging can create
-half-integer samples, and Hadamard decoding can exceed the `int16` range.
-Saving decoded RF as `int16` would round or overflow valid samples.
+The `float32` dtype is intentional. Coherent aperture averaging can create half-integer samples, and Hadamard decoding can exceed the `int16` range. Saving decoded RF as `int16` would round or overflow valid samples.
-Reconstructed B-mode images and segmentation masks are not stored in the
-converted files. They are generated separately by the validation pipeline.
+Reconstructed B-mode images and segmentation masks are not stored in the converted files. They are generated separately by the validation pipeline.
## Dataset Quantification
**Current OpenH-RF release:** 245 HDF5 files; 328.99 GB (328,985,804,800 bytes) stored; root `zea_version` **0.1.4**. Sizes include all HDF5 contents and use decimal units (MB = 10^6 bytes, GB = 10^9 bytes, TB = 10^12 bytes), not decoded-array memory or original-source download sizes.
-The original four-file demo (not the complete HF release summarized above) contains four HDF5 acquisition bundles: one Rat9 bundle
-and one phantom bundle for each of C5-2v, L12-3v, and L12-5. Each bundle has
-three sequence tracks, and each track retains every frame in its source MAT
-file. That demo has 12 tracks and 64 frames and occupies approximately
-5.5 GiB; HDF5 writer and compression versions may change the exact byte count.
+The original four-file demo (not the complete HF release summarized above) contains four HDF5 acquisition bundles: one Rat9 bundle and one phantom bundle for each of C5-2v, L12-3v, and L12-5. Each bundle has three sequence tracks, and each track retains every frame in its source MAT file. That demo has 12 tracks and 64 frames and occupies approximately 5.5 GiB; HDF5 writer and compression versions may change the exact byte count.
-The two complete source Figshare records contain approximately 491.9 GB in
-total. No train, validation, or test split is defined. The current converted-release size and file count are reported above; the scripts do not assign learning splits.
+The two complete source Figshare records contain approximately 491.9 GB in total. No train, validation, or test split is defined. The current converted-release size and file count are reported above; the scripts do not assign learning splits.
Representative `raw_data` shapes in the demo are:
@@ -155,13 +156,7 @@ Representative `raw_data` shapes in the demo are:
| Phantom, L12-3v | `(2, 576, 1613, 192, 1)` | `(2, 192, 1613, 192, 1)` | `(10, 192, 1613, 192, 1)` |
| Phantom, L12-5 | `(2, 512, 2018, 256, 1)` | `(2, 256, 2018, 256, 1)` | `(2, 256, 2018, 256, 1)` |
-The Rat9 multifocal sequence uses the three focal depths programmed in the
-source MAT file: 17.74, 29.57, and 41.39 mm. Its programmed imaging range
-extends to 50.46 mm, so all three foci are intentional. The stored RF tensor
-ends near 21.24 mm because samples beyond that depth are zero across every
-transmit and receive channel and the converter removes this all-zero tail.
-The focal metadata are retained even when a focus lies beyond the remaining
-nonzero RF support.
+The Rat9 multifocal sequence uses the three focal depths programmed in the source MAT file: 17.74, 29.57, and 41.39 mm. Its programmed imaging range extends to 50.46 mm, so all three foci are intentional. The stored RF tensor ends near 21.24 mm because samples beyond that depth are zero across every transmit and receive channel and the converter removes this all-zero tail. The focal metadata are retained even when a focus lies beyond the remaining nonzero RF support.
Core per-track features are:
@@ -181,12 +176,7 @@ Core per-track features are:
## Subject Metadata
-The source murine cohort contains 4 lean Zucker rats (2 male and 2 female) and
-16 obese Zucker rats (8 male and 8 female), beginning at 13 weeks of age. The
-obese animals were fed a high-fat diet for up to eight weeks. Converted rat
-files store the rat identifier and, when present in the source workbooks, sex,
-fat percentage, measured liver sound speed, weight, diet duration, and
-histopathology-derived values.
+The source murine cohort contains 4 lean Zucker rats (2 male and 2 female) and 16 obese Zucker rats (8 male and 8 female), beginning at 13 weeks of age. The obese animals were fed a high-fat diet for up to eight weeks. Converted rat files store the rat identifier and, when present in the source workbooks, sex, fat percentage, measured liver sound speed, weight, diet duration, and histopathology-derived values.
Values with standard DataSpec fields are stored under `metadata/subject`:
@@ -196,149 +186,36 @@ Values with standard DataSpec fields are stored under `metadata/subject`:
| `weight` | `float32` | kg | Animal weight, converted from workbook grams |
| `sex` | string | unitless | Sex reported by the source workbook |
-Other workbook measurements are scalar `float32` datasets under
-`custom/rat_quantification/`, each with `unit` and `description` attributes.
-These include the ground-truth sound-speed mean and standard deviation,
-sequence-specific local and global sound-speed estimates, liver-lobe
-sound-speed measurements when available, diet duration, fat-percentage
-uncertainty, water temperature, and quantitative histopathology scores. The
-workbook's non-fat percentage is omitted because it is exactly
-`100 - metadata/subject/fat_percentage` for every rat. These measurements are
-scalars rather than homogeneous `sos_map` images because the source provides
-no spatial coordinates for these rat-level measurements.
-
-The phantom data contain no human subjects. Phantom identifiers describe the
-probe, material configuration, meat layer, and acquisition session. The source
-records report independently measured phantom and meat-layer sound speeds and
-temperature-dependent uncertainties.
-
-## Data Validation
-
-The reconstruction path uses the first stored frame and a zea `Pipeline`: RF
-demodulation and baseband FIR filtering, delay-and-sum beamforming, envelope
-detection, maximum normalization, and log compression. The pipeline YAML files
-use three pixels per acoustic wavelength and disable pressure-field weighting.
-Beamforming is split into bounded patches so the deepest C5-2v grid fits on a
-24 GB GPU.
+Other workbook measurements are scalar `float32` datasets under `custom/rat_quantification/`, each with `unit` and `description` attributes. These include the ground-truth sound-speed mean and standard deviation, sequence-specific local and global sound-speed estimates, liver-lobe sound-speed measurements when available, diet duration, fat-percentage uncertainty, water temperature, and quantitative histopathology scores. The workbook's non-fat percentage is omitted because it is exactly `100 - metadata/subject/fat_percentage` for every rat. These measurements are scalars rather than homogeneous `sos_map` images because the source provides no spatial coordinates for these rat-level measurements.
-From the repository root, generate the demo files and reference images with:
+The phantom data contain no human subjects. Phantom identifiers describe the probe, material configuration, meat layer, and acquisition session. The source records report independently measured phantom and meat-layer sound speeds and temperature-dependent uncertainties.
-```bash
-python examples/stanford/download.py --demo
-python examples/stanford/convert.py --dataset rat --demo
-python examples/stanford/convert.py --dataset phantom --demo
-
-CUDA_VISIBLE_DEVICES=0 JAX_PLATFORMS=cuda KERAS_BACKEND=jax \
- python examples/stanford/reconstruct.py --dataset rat --demo --rat-id 9
-CUDA_VISIBLE_DEVICES=0 JAX_PLATFORMS=cuda KERAS_BACKEND=jax \
- python examples/stanford/reconstruct.py --dataset phantom --demo
-
-python examples/stanford/stitch.py --dataset rat --demo --rat-id 9
-python examples/stanford/stitch.py --dataset phantom --demo
-```
-
-The reconstructed PNGs and demodulated spectra are written under
-`examples/stanford/outputs`. The stitched review documents are:
-
-- `examples/stanford/outputs/RatExperiments/all_bmode_reconstructions.pdf`
-- `examples/stanford/outputs/SoSExperiments/all_sos_bmode_reconstructions.pdf`
+## Data Validation
-The reconstruction scripts are validated with zea 0.1.4.
+The reference pipelines reconstruct the first stored frame of each track: RF demodulation, delay-and-sum beamforming without pressure-field weighting, envelope detection, maximum normalization and log compression, shown over a 60 dB dynamic range. The grid is derived at three pixels per acoustic wavelength over the acquired aperture and depth. `reconstruct.py` adds the probe-dependent baseband FIR described in [Processing the Dataset](#processing-the-dataset); without it, `zea process` and `reconstruct.py` produce the same image. The figure at the top of this card shows the `multifocal` track of Rat3 and the `hadamard` track of two ATS 549 acquisitions, reconstructed with `reconstruct.py`. `assets/main.png` is the same Rat3 `multifocal` reconstruction on its native grid, without axes.
## Known Issues
-- The demo MAT files store `Receive/TGC` profile index 1 but do not store the
- selected profile's `TGC/Waveform`. A profile index is not a gain curve, so
- the converter omits the optional `scan/tgc_gain_curve` field rather than
- inventing a unity curve. The RF samples already reflect acquisition-time
- TGC, but that gain cannot be calibrated or undone from these files alone.
-- Respiratory motion affected early in-vivo rat acquisitions. Later
- acquisitions were made shortly after euthanasia, as described by the source
- record and associated publication.
-- The source record notes settling and slight inhomogeneity in phantom 4 and
- phantom 5.
-- Strong meat/phantom interfaces and curved-probe reverberation can dominate
- individual B-mode images. Reconstruction limits preserve the acquired depth
- rather than cropping those regions automatically.
+- The demo MAT files store `Receive/TGC` profile index 1 but do not store the selected profile's `TGC/Waveform`. A profile index is not a gain curve, so the converter omits the optional `scan/tgc_gain_curve` field rather than inventing a unity curve. The RF samples already reflect acquisition-time TGC, but that gain cannot be calibrated or undone from these files alone.
+- Respiratory motion affected early in-vivo rat acquisitions. Later acquisitions were made shortly after euthanasia, as described by the source record and associated publication.
+- The source record notes settling and slight inhomogeneity in phantom 4 and phantom 5.
+- Strong meat/phantom interfaces and curved-probe reverberation can dominate individual B-mode images. Reconstruction limits preserve the acquired depth rather than cropping those regions automatically.
- The data contain no image or segmentation ground truth.
## Ethical Considerations
-No human data are included. The murine study was approved by Stanford
-University's Institutional Administrative Panel on Laboratory Animal Care.
-Animals were scanned under 2% isoflurane anesthesia on a heated platform with
-continuous temperature monitoring; the associated publication describes the
-euthanasia and tissue-measurement procedures. The public sources do not state
-an approval number or explicit ARRIVE 2.0 compliance.
-
-The phantom acquisitions require no human- or animal-subject approval. Both
-Figshare records confirm that no human personally identifiable information is
-present.
-
-## Scripts and Paths
-
-- `download.py`: download the raw Figshare demo subset or full records.
-- `download_figshare_full.sh`: resumably mirror both full Figshare records to
- `/ultra20/figshare` with progress and checksum verification.
-- `convert.py`: convert source MAT files to zea HDF5.
-- `reconstruct.py`: reconstruct HDF5 tracks to B-mode PNGs and spectra.
-- `stitch.py`: combine PNGs into review PDFs.
-- `upload.py`: upload selected HDF5 files, this README, and pipeline YAMLs.
-- `delete_hf.py`: delete existing remote `zea/` files before replacement.
-
-Default paths:
-
-- Raw rat input: `examples/stanford/data/RatExperiments`
-- Raw phantom input: `examples/stanford/data/SoSExperiments`
-- Converted rat output: `examples/stanford/data/RatExperiments_zea`
-- Converted phantom output: `examples/stanford/data/SoSExperiments_zea`
-- Reconstruction output: `examples/stanford/outputs`
-
-For full conversion after downloading both Figshare records:
-
-```bash
-python examples/stanford/download.py --full
-python examples/stanford/convert.py --dataset rat --full
-python examples/stanford/convert.py --dataset phantom --full
-python examples/stanford/reconstruct.py --dataset rat --full
-python examples/stanford/reconstruct.py --dataset phantom --full
-python examples/stanford/stitch.py --dataset rat --full
-python examples/stanford/stitch.py --dataset phantom --full
-```
-
-To resume an interrupted conversion without rewriting completed bundles, add
-`--skip-existing`. A bundle is skipped only when both its atomic HDF5 output
-and text summary are present.
-
-To keep a separate, resumable mirror of both complete Figshare records under
-`/ultra20/figshare`, with per-file and overall progress bars plus size and MD5
-verification, run:
-
-```bash
-examples/stanford/download_figshare_full.sh
-```
-
-This writes `RatExperiments_download` and `SoSExperiments_download`. Use
-`examples/stanford/download_figshare_full.sh --dry-run` to validate and
-summarize the public records without downloading them.
+No human data are included. The murine study was approved by Stanford University's Institutional Administrative Panel on Laboratory Animal Care. Animals were scanned under 2% isoflurane anesthesia on a heated platform with continuous temperature monitoring; the associated publication describes the euthanasia and tissue-measurement procedures. The public sources do not state an approval number or explicit ARRIVE 2.0 compliance.
-Use `--min-rat N` or `--rat-id N` with `convert.py` to limit rat conversion.
-Raw MAT files remain local; `upload.py` selects converted HDF5 files and
-documentation explicitly.
+The phantom acquisitions require no human- or animal-subject approval. Both Figshare records confirm that no human personally identifiable information is present.
## Citation
Please cite the applicable source dataset and its associated publication:
-- Telichko, A. V. et al. (2025). *Pulse-Echo Ultrasound Murine In Vivo
- Acquisitions*. Figshare+.
-- Ali, R. et al. (2025). *Pulse-Echo Ultrasound Sound Speed Phantom and Meat
- Aberrating Layer Acquisitions*. Figshare+.
+- Telichko, A. V. et al. (2025). *Pulse-Echo Ultrasound Murine In Vivo Acquisitions*. Figshare+.
+- Ali, R. et al. (2025). *Pulse-Echo Ultrasound Sound Speed Phantom and Meat Aberrating Layer Acquisitions*. Figshare+.
-- Telichko, A. V. et al. “Noninvasive Estimation of Local Speed of Sound by
- Pulse-Echo Ultrasound in a Rat Model of Nonalcoholic Fatty Liver.” *Physics
- in Medicine & Biology* 67(1), 015007 (2022).
+- Telichko, A. V. et al. “Noninvasive Estimation of Local Speed of Sound by Pulse-Echo Ultrasound in a Rat Model of Nonalcoholic Fatty Liver.” *Physics in Medicine & Biology* 67(1), 015007 (2022).
-- Ali, R. et al. “Local Sound Speed Estimation for Pulse-Echo Ultrasound in
- Layered Media.” *IEEE TUFFC* 69(2), 500–511 (2022).
+- Ali, R. et al. “Local Sound Speed Estimation for Pulse-Echo Ultrasound in Layered Media.” *IEEE TUFFC* 69(2), 500–511 (2022).
diff --git a/datasets/stanford-murine/assets/hero.png b/datasets/stanford-murine/assets/hero.png
new file mode 100644
index 0000000..bf3e682
Binary files /dev/null and b/datasets/stanford-murine/assets/hero.png differ
diff --git a/datasets/stanford-murine/assets/main.png b/datasets/stanford-murine/assets/main.png
new file mode 100644
index 0000000..187c924
Binary files /dev/null and b/datasets/stanford-murine/assets/main.png differ
diff --git a/datasets/stanford-murine/pipeline_hadamard.yaml b/datasets/stanford-murine/pipeline_hadamard.yaml
index 29a227a..048d670 100644
--- a/datasets/stanford-murine/pipeline_hadamard.yaml
+++ b/datasets/stanford-murine/pipeline_hadamard.yaml
@@ -3,14 +3,9 @@ pipeline:
operations:
# Overlap averaging creates fractional RF, and Hadamard decoding can exceed int16.
- demodulate
- - name: fir_filter
- params:
- axis: -3
- complex_channels: true
- name: beamform
params:
enable_pfield: false
- # Bound work units so the deep C5-2v grid fits on a 24 GB GPU.
- envelope_detect
# Use the true maximum; percentile normalization would clip strong reflectors.
- name: normalize
@@ -23,3 +18,6 @@ parameters:
sound_speed: 1540
# Derive both grid dimensions at three samples per acoustic wavelength.
pixels_per_wavelength: 3
+ dynamic_range:
+ - -60
+ - 0
diff --git a/datasets/stanford-murine/pipeline_multifocal.yaml b/datasets/stanford-murine/pipeline_multifocal.yaml
index 5e69e4d..03eb178 100644
--- a/datasets/stanford-murine/pipeline_multifocal.yaml
+++ b/datasets/stanford-murine/pipeline_multifocal.yaml
@@ -3,14 +3,9 @@ pipeline:
operations:
# Coherent overlap averaging can create fractional RF samples; no cast is needed.
- demodulate
- - name: fir_filter
- params:
- axis: -3
- complex_channels: true
- name: beamform
params:
enable_pfield: false
- # Bound work units so the deep C5-2v grid fits on a 24 GB GPU.
- envelope_detect
# Use the true maximum; percentile normalization would clip strong reflectors.
- name: normalize
@@ -23,3 +18,6 @@ parameters:
sound_speed: 1540
# Derive both grid dimensions at three samples per acoustic wavelength.
pixels_per_wavelength: 3
+ dynamic_range:
+ - -60
+ - 0
diff --git a/datasets/stanford-murine/pipeline_synthetic_aperture.yaml b/datasets/stanford-murine/pipeline_synthetic_aperture.yaml
index fa89ea5..261b777 100644
--- a/datasets/stanford-murine/pipeline_synthetic_aperture.yaml
+++ b/datasets/stanford-murine/pipeline_synthetic_aperture.yaml
@@ -4,14 +4,9 @@ pipeline:
# Coherent overlap averaging can create fractional RF samples; no cast is needed.
- apply_window
- demodulate
- - name: fir_filter
- params:
- axis: -3
- complex_channels: true
- name: beamform
params:
enable_pfield: false
- # Bound work units so the deep C5-2v grid fits on a 24 GB GPU.
- envelope_detect
# Use the true maximum; percentile normalization would clip strong reflectors.
- name: normalize
@@ -24,3 +19,6 @@ parameters:
sound_speed: 1540
# Derive both grid dimensions at three samples per acoustic wavelength.
pixels_per_wavelength: 3
+ dynamic_range:
+ - -60
+ - 0
diff --git a/datasets/stanford-murine/reconstruct.py b/datasets/stanford-murine/reconstruct.py
index a2b4a74..b7723b0 100644
--- a/datasets/stanford-murine/reconstruct.py
+++ b/datasets/stanford-murine/reconstruct.py
@@ -6,8 +6,12 @@
B-mode reconstruction of murine full synthetic aperture, multifocal and
Hadamard-encoded channel data.
-Acquisition parameters are built from each track's own metadata, and one
-displayed image is saved per track.
+Each file bundles three tracks. Every track is reconstructed with its own
+pipeline_
+
+*Scan-converted B-mode reconstructed from the full-synthetic-aperture channel data of one simulated acquisition in [`data/`](https://huggingface.co/datasets/nvidia/OpenH-RF/tree/main/unc-liver/data): the abdominal wall layers in the near field above the liver.*
-Full-wave nonlinear acoustic simulations of transabdominal liver imaging through
-anatomically realistic numerical phantoms of the human abdominal wall. Each acquisition
-pairs **full synthetic aperture (multistatic) RF channel data** with the **exact
-ground-truth material maps that generated it**: speed of sound, density, absorption and
-the coefficient of nonlinearity, plus a per-pixel tissue segmentation.
+## Dataset Description
-The phantoms were segmented from Visible Human Project cryosection photography at
-0.33 mm isotropic resolution and interpolated to 0.0825 mm. Wave propagation was
-simulated with Fullwave 2, which models reverberation, aberration and nonlinear
-propagation. The transducer modelled is a curvilinear C5-2v (Verasonics).
+Full-wave nonlinear acoustic simulations of transabdominal liver imaging through anatomically realistic numerical phantoms of the human abdominal wall. Each acquisition pairs **full synthetic aperture (multistatic) RF channel data** with the **exact ground-truth material maps that generated it**: speed of sound, density, absorption and the coefficient of nonlinearity, plus a per-pixel tissue segmentation.
-This is **simulated** data. Its distinguishing property is that the ground truth is
-exact rather than estimated: the sound-speed and attenuation maps are the simulation
-inputs, not a reconstruction, which makes it directly usable for training and
-quantitative evaluation of sound-speed estimation and aberration-correction methods.
+The phantoms were segmented from Visible Human Project cryosection photography at 0.33 mm isotropic resolution and interpolated to 0.0825 mm. Wave propagation was simulated with Fullwave 2, which models reverberation, aberration and nonlinear propagation. The transducer modelled is a curvilinear C5-2v (Verasonics).
-## Dataset Contributors
+This is **simulated** data. Its distinguishing property is that the ground truth is exact rather than estimated: the sound-speed and attenuation maps are the simulation inputs, not a reconstruction, which makes it directly usable for training and quantitative evaluation of sound-speed estimation and aberration-correction methods.
-University of North Carolina at Chapel Hill, NC State University, and Stanford University.
+## Dataset Contributor(s)
-Primary point of contact: **Gianmarco Pinton** (gia@email.unc.edu), Lampe Joint
-Department of Biomedical Engineering, UNC Chapel Hill and NC State University.
+- Gianmarco Pinton (primary point of contact; Lampe Joint Department of Biomedical Engineering, UNC Chapel Hill and NC State University)
+- University of North Carolina at Chapel Hill
+- NC State University
+- Stanford University
The underlying phantoms and simulations are described in Zhuang et al. (2026).
@@ -53,81 +50,55 @@ The underlying phantoms and simulations are described in Zhuang et al. (2026).
## License / Terms of Use
-**CC BY 4.0** (see `LICENSE`).
+[Creative Commons Attribution 4.0 International (CC BY 4.0)](https://creativecommons.org/licenses/by/4.0/legalcode.en). Retain attribution and identify modifications when reusing the data.
+
+## Intended Usage
+
+- **Speed-of-sound estimation:** exact per-pixel ground-truth sound speed, randomised per tissue per simulation so the mapping is not memorisable from anatomy alone.
+- **Aberration correction:** measured RMS arrival-time aberration is 138.9 ± 78.4 ns across the dataset.
+- **Reverberation / clutter suppression:** the abdominal wall produces realistic diffuse reverberation (decay in the expected −12 to −10 dB/cm range).
+- **Advanced beamforming:** the multistatic full synthetic aperture matrix supports retrospective synthesis of any transmit sequence (focused, plane wave, diverging).
+- **Tissue segmentation** from channel data.
+
+## Dataset Characterization
+
+- **Data Collection Method:** synthetic (Fullwave 2 numerical simulation)
+- **Labeling Method:** synthetic ground truth (simulation inputs)
+- **Acquisition system:** simulated Verasonics **C5-2v curvilinear array**: 128 elements, 49.57 mm radius of curvature, 0.508 mm arc pitch, 3.7 MHz transmit centre frequency, 70% fractional bandwidth, 14.436 MHz sampling. Transmit pulse is a two-cycle Gaussian-enveloped sine at 0.1 MPa. No lens or matching layer is modelled.
+
+## Source Attribution
-The material distributed here (the RF channel data, the acoustic material maps, and the
-segmentations) is original scholarly output of the contributing institutions
-(simulations and phantom construction by the UNC / Stanford team) and is released under
-CC BY 4.0.
+The material distributed here (the RF channel data, the acoustic material maps, and the segmentations) is original scholarly output of the contributing institutions (simulations and phantom construction by the UNC / Stanford team) and is released under CC BY 4.0.
-The phantoms derive from the **Visible Human Project** (VHP) cryosection imagery of the
-U.S. National Library of Medicine. As of July 2019 the NLM Data License was replaced by
-open Terms and Conditions
-(): no license
-agreement or registration is required, there is no restriction on commercial use, no
-royalties, and no share-alike or redistribution restriction, so nothing in the VHP
-terms conflicts with CC BY 4.0. NLM works are U.S. Government works and carry no
-copyright in the United States.
+The phantoms derive from the **Visible Human Project** (VHP) cryosection imagery of the U.S. National Library of Medicine. As of July 2019 the NLM Data License was replaced by open Terms and Conditions (): no license agreement or registration is required, there is no restriction on commercial use, no royalties, and no share-alike or redistribution restriction, so nothing in the VHP terms conflicts with CC BY 4.0. NLM works are U.S. Government works and carry no copyright in the United States.
The one obligation carried over from the VHP terms is acknowledgement:
> **Courtesy of the U.S. National Library of Medicine.**
-The NLM does not endorse this dataset, and nothing here should be read as implying such
-endorsement.
+The NLM does not endorse this dataset, and nothing here should be read as implying such endorsement.
-*This is a good-faith reading of the public terms, not legal advice; the contributor is
-the responsible party for the license declaration.*
+*This is a good-faith reading of the public terms, not legal advice; the contributor is the responsible party for the license declaration.*
-## Intended Usage
+## Processing the Dataset
-- **Speed-of-sound estimation:** exact per-pixel ground-truth sound speed, randomised
- per tissue per simulation so the mapping is not memorisable from anatomy alone.
-- **Aberration correction:** measured RMS arrival-time aberration is
- 138.9 ± 78.4 ns across the dataset.
-- **Reverberation / clutter suppression:** the abdominal wall produces realistic
- diffuse reverberation (decay in the expected −12 to −10 dB/cm range).
-- **Advanced beamforming:** the multistatic full synthetic aperture matrix supports
- retrospective synthesis of any transmit sequence (focused, plane wave, diverging).
-- **Tissue segmentation** from channel data.
+The acquisitions can be processed with the `reconstruct.py` [script](https://github.com/open-h/OpenH-RF/blob/main/datasets/unc-liver/reconstruct.py) as provided in the [OpenH-RF GitHub repository](https://github.com/open-h/OpenH-RF), together with the `pipeline.yaml` definition in this folder and the [zea library](https://github.com/tue-bmd/zea). The script streams the data from the Hugging Face Hub.
-## Dataset Characterization
-
-- **Data Collection Method:** synthetic (Fullwave 2 numerical simulation)
-- **Labeling Method:** synthetic ground truth (simulation inputs)
-- **Acquisition system:** simulated Verasonics **C5-2v curvilinear array**: 128
- elements, 49.57 mm radius of curvature, 0.508 mm arc pitch, 3.7 MHz transmit centre
- frequency, 70% fractional bandwidth, 14.436 MHz sampling. Transmit pulse is a
- two-cycle Gaussian-enveloped sine at 0.1 MPa. No lens or matching layer is modelled.
+Set `ZEA_FILE` and `FRAME` at the top of the script to pick an acquisition. For current release files, use `zea==0.1.6` and any Keras backend (`reconstruct.py` falls back to torch if `KERAS_BACKEND` is unset, but respects whatever you have configured).
## Dataset Format
-All files are in the *zea* file format (current release `zea_version` 0.1.4), one HDF5 file per
-acquisition, single track.
-
-**Pre-processing applied before packaging:** none to the channel data. It is the
-native simulator output at full rate. The simulation ran at 101.1 MHz and was
-decimated by 7 to the stored 14.436 MHz *by the simulator*, before this packaging.
-
-Coordinate frame: `x` is lateral, `y ≡ 0` (the simulations are 2-D), `z` is depth.
-The **array apex is at z = 0** and the centre of curvature at `z = −49.57 mm`, matching
-zea's `polar_pixel_grid` convention. `probe_geometry`, `transmit_origins` and every map
-`coordinates` array share this frame, so the channel data and the maps are exactly
-registered.
-
-Transmit sequence: **full synthetic aperture**: each element fires alone and all 128
-elements receive. Hence `t0_delays` is all-zero, `tx_apodizations` is the identity, and
-`focus_distances` is zero. `initial_times` is **negative** (−79.17 ns): the simulator's
-transmit start time offset means sample 0 corresponds to a two-way time of flight of
-−t0.
-
-Transmit and receive element positions differ slightly. `probe_geometry` holds the
-**receive** element positions and `scan/transmit_origins` the **transmit** element
-positions; the Fullwave simulation discretizes the transmit and receive apertures onto
-separate arcs of its grid that sit about 0.16 mm (≈ 0.4 wavelengths) apart. This is a
-property of the source simulation, not an error. When beamforming, use
-`transmit_origins` for the transmit leg and `probe_geometry` for the receive leg, as the
-shipped reference reconstruction does.
+[zea v0.1.4](https://github.com/tue-bmd/zea)
+
+All files are in the *zea* file format (current release `zea_version` 0.1.4), one HDF5 file per acquisition, single track.
+
+**Pre-processing applied before packaging:** none to the channel data. It is the native simulator output at full rate. The simulation ran at 101.1 MHz and was decimated by 7 to the stored 14.436 MHz *by the simulator*, before this packaging.
+
+Coordinate frame: `x` is lateral, `y ≡ 0` (the simulations are 2-D), `z` is depth. The **array apex is at z = 0** and the centre of curvature at `z = −49.57 mm`, matching zea's `polar_pixel_grid` convention. `probe_geometry`, `transmit_origins` and every map `coordinates` array share this frame, so the channel data and the maps are exactly registered.
+
+Transmit sequence: **full synthetic aperture**: each element fires alone and all 128 elements receive. Hence `t0_delays` is all-zero, `tx_apodizations` is the identity, and `focus_distances` is zero. `initial_times` is **negative** (−79.17 ns): the simulator's transmit start time offset means sample 0 corresponds to a two-way time of flight of −t0.
+
+Transmit and receive element positions differ slightly. `probe_geometry` holds the **receive** element positions and `scan/transmit_origins` the **transmit** element positions; the Fullwave simulation discretizes the transmit and receive apertures onto separate arcs of its grid that sit about 0.16 mm (≈ 0.4 wavelengths) apart. This is a property of the source simulation, not an error. When beamforming, use `transmit_origins` for the transmit leg and `probe_geometry` for the receive leg, as the shipped reference reconstruction does.
### Per-sample feature table
@@ -155,8 +126,7 @@ shipped reference reconstruction does.
| `scan/polar_angles` | (128,) | float32 | rad | Element normal angle, ±0.6507 |
| `probe/probe_geometry` | (128, 3) | float32 | m | Receive element positions on the arc |
-All maps are on the polar reconstruction grid: 640 radial samples spanning 5.0–71.5 mm
-from the array surface, by 128 beams spanning ±0.3 rad.
+All maps are on the polar reconstruction grid: 640 radial samples spanning 5.0–71.5 mm from the array surface, by 128 beams spanning ±0.3 rad.
## Dataset Quantification
@@ -164,21 +134,11 @@ from the array surface, by 128 beams spanning ±0.3 rad.
- **1906 acquisitions**, 1 frame each, 128 transmits × 128 receives per acquisition.
- **Stored HDF5 size:** 202.69 GB (202,692,755,456 bytes).
-- Drawn from **14 distinct phantom volumes** derived from a single Visible Human
- subject: `vishuman_abdominal_cropped` (308), `vishuman_abdwall_153_h` (187),
- `vishuman_abdwall_cropped_7-153s` (148), `vishuman_abdwall_cropped_5left153s` (134),
- `vishuman_abdwall_cropped_7left153s` (133), `vishuman_abdwall_set_04` (123),
- `vishuman_abdwall_cropped_6left153s` (119), `vishuman_abdwall_set_13` (114),
- `vishuman_abdwall_set_05` (113), `vishuman_abdwall_set_12` (109),
- `vishuman_abdwall_set_07` (109), `vishuman_abdwall_set_10` (108),
- `vishuman_abdwall_set_06` (104), `vishuman_abdwall_set_11` (97).
+- Drawn from **14 distinct phantom volumes** derived from a single Visible Human subject: `vishuman_abdominal_cropped` (308), `vishuman_abdwall_153_h` (187), `vishuman_abdwall_cropped_7-153s` (148), `vishuman_abdwall_cropped_5left153s` (134), `vishuman_abdwall_cropped_7left153s` (133), `vishuman_abdwall_set_04` (123), `vishuman_abdwall_cropped_6left153s` (119), `vishuman_abdwall_set_13` (114), `vishuman_abdwall_set_05` (113), `vishuman_abdwall_set_12` (109), `vishuman_abdwall_set_07` (109), `vishuman_abdwall_set_10` (108), `vishuman_abdwall_set_06` (104), `vishuman_abdwall_set_11` (97).
### Splits
-`dataset_split.csv` ships alongside the HDF5 files. Splits are **grouped by phantom
-volume** so that no volume appears in both train and validation. This avoids anatomical
-leakage, which matters because many acquisitions are different 2-D slices of the same
-volume.
+[`assets/dataset_split.csv`](assets/dataset_split.csv) assigns every acquisition to the splits below, one row per HDF5 file (`hdf5_filename`, `volume`, and a `_train` / `_valid` flag pair per split). Splits are **grouped by phantom volume** so that no volume appears in both train and validation. This avoids anatomical leakage, which matters because many acquisitions are different 2-D slices of the same volume.
| Split | Train | Validation |
|---|---|---|
@@ -189,88 +149,37 @@ volume.
| `fold3` | 1314 | 488 |
| `fold4` | 1328 | 465 |
-Note the `fold*` splits are **not** complementary: between 97 and 153 acquisitions are
-in neither the train nor the validation set of a given fold.
+Note the `fold*` splits are **not** complementary: between 97 and 113 acquisitions are in neither the train nor the validation set of a given fold.
## Subject Metadata
-Aggregate only; no PHI. All phantoms derive from **one** Visible Human Project cadaveric
-subject (female), so the dataset represents a single anatomy sampled at many slice
-positions and orientations, with randomised abdominal wall thickness (5–71 mm, mean
-41.0 mm, SD 8.9 mm) and randomised per-tissue acoustic properties.
+Aggregate only; no PHI. All phantoms derive from **one** Visible Human Project cadaveric subject (female), so the dataset represents a single anatomy sampled at many slice positions and orientations, with randomised abdominal wall thickness (5–71 mm, mean 41.0 mm, SD 8.9 mm) and randomised per-tissue acoustic properties.
-Tissue composition varies by volume type; across the phantom volumes reported in the
-source publication, subcutaneous fat and muscle predominate (fat 56.5 ± 8.3%, muscle
-22.2 ± 7.7%, connective 20.7 ± 4.2%, blood 0.6 ± 0.5% for wall-dominated volumes).
+Tissue composition varies by volume type; across the phantom volumes reported in the source publication, subcutaneous fat and muscle predominate (fat 56.5 ± 8.3%, muscle 22.2 ± 7.7%, connective 20.7 ± 4.2%, blood 0.6 ± 0.5% for wall-dominated volumes).
## Data Validation
-`reconstruct.py` builds a `zea.Pipeline`
-(`Cast → Demodulate → Beamform(delay_and_sum) → EnvelopeDetect → Normalize → LogCompress`),
-reconstructs from the raw channel data on the polar grid, scan-converts to a physical
-sector and writes a PNG. The pipeline plus its grid parameters are saved in
-`pipeline.yaml`.
-
-For current release files, use `zea==0.1.6` and any Keras backend (`reconstruct.py` falls back to torch if
-`KERAS_BACKEND` is unset, but respects whatever you have configured).
-
-```bash
-python reconstruct.py .hdf5 --out bmode.png --save-yaml pipeline.yaml
-```
+`reconstruct.py` builds a `zea.Pipeline` (`Cast → Demodulate → Beamform(delay_and_sum) → EnvelopeDetect → Normalize → LogCompress`), reconstructs from the raw channel data on the polar grid, scan-converts to a physical sector and writes a PNG. The pipeline plus its grid parameters are saved in `pipeline.yaml`.
Reference outputs: `bmode_reference.png`.
-**Geometry validation.** The zea reconstruction was checked against the reference
-delay-and-sum image shipped with the source dataset: radial registration lag **0
-samples**, lateral lag **0 beams**, structural correlation 0.92–0.95 (8×8 and 16×16
-smoothed). Residual speckle-level decorrelation is expected: the reference used a
-Hilbert analytic signal with bicubic interpolation, while the zea pipeline demodulates
-to baseband with its own interpolation and apodization.
+**Geometry validation.** The zea reconstruction was checked against the reference delay-and-sum image shipped with the source dataset: radial registration lag **0 samples**, lateral lag **0 beams**, structural correlation 0.92–0.95 (8×8 and 16×16 smoothed). Residual speckle-level decorrelation is expected: the reference used a Hilbert analytic signal with bicubic interpolation, while the zea pipeline demodulates to baseband with its own interpolation and apodization.
## Known Issues
-- **`fs / f0` = 14.436 / 3.7 = 3.90**, marginally below the ×4 heuristic often applied
- to RF. This is the simulator's native rate (101.1 MHz decimated by 7) and still
- satisfies Nyquist for the −6 dB bandwidth of a 70%-fractional-bandwidth 3.7 MHz pulse
- (band edge ≈ 5.0 MHz, Nyquist 7.2 MHz). No aliasing is present.
-- **`segmentation` is derived, not stored.** The simulator's own integer segmentation is
- a *per-volume region index* whose index-to-tissue mapping differs between phantom
- volumes, so those indices are not comparable across acquisitions. It is preserved
- verbatim as `phantom_region_map` for provenance. The shipped `segmentation` is
- recovered per pixel from the exact (density, β, absorption) fingerprint of each tissue
- in the simulator's material table. These three properties are constants, whereas
- sound speed is randomly drawn per tissue per simulation and is therefore excluded from
- the classification. Pixels on tissue boundaries are softened by the simulator's
- Gaussian blur (σ = 1 pixel) and are assigned to the nearest pure tissue.
-- **2-D simulations.** Elevational focusing and out-of-plane scattering are not
- modelled. The source publication argues this is acceptable for subcostal
- transabdominal scanning, where ribs do not obstruct the field.
-- **Single subject.** All anatomy derives from one Visible Human cadaver, so anatomical
- variability is limited to slice position, orientation, wall-thickness scaling and
- randomised acoustic properties. Simulations overlap spatially due to random sampling
- within volumes; the `volume` column allows filtering for overlap.
-- **Postmortem blood redistribution** in the supine source cadaver produces additional
- contrast of connective tissue in the posterior portions of the images and limits
- connective tissue visibility anteriorly.
+- **`fs / f0` = 14.436 / 3.7 = 3.90**, marginally below the ×4 heuristic often applied to RF. This is the simulator's native rate (101.1 MHz decimated by 7) and still satisfies Nyquist for the −6 dB bandwidth of a 70%-fractional-bandwidth 3.7 MHz pulse (band edge ≈ 5.0 MHz, Nyquist 7.2 MHz). No aliasing is present.
+- **`segmentation` is derived, not stored.** The simulator's own integer segmentation is a *per-volume region index* whose index-to-tissue mapping differs between phantom volumes, so those indices are not comparable across acquisitions. It is preserved verbatim as `phantom_region_map` for provenance. The shipped `segmentation` is recovered per pixel from the exact (density, β, absorption) fingerprint of each tissue in the simulator's material table. These three properties are constants, whereas sound speed is randomly drawn per tissue per simulation and is therefore excluded from the classification. Pixels on tissue boundaries are softened by the simulator's Gaussian blur (σ = 1 pixel) and are assigned to the nearest pure tissue.
+- **2-D simulations.** Elevational focusing and out-of-plane scattering are not modelled. The source publication argues this is acceptable for subcostal transabdominal scanning, where ribs do not obstruct the field.
+- **Single subject.** All anatomy derives from one Visible Human cadaver, so anatomical variability is limited to slice position, orientation, wall-thickness scaling and randomised acoustic properties. Simulations overlap spatially due to random sampling within volumes; the `volume` column allows filtering for overlap.
+- **Postmortem blood redistribution** in the supine source cadaver produces additional contrast of connective tissue in the posterior portions of the images and limits connective tissue visibility anteriorly.
## Ethical Considerations
-The data is entirely synthetic. It contains no patient data, no PHI and no identifiable
-information. The underlying anatomy derives from the **Visible Human Project**, a
-publicly released cadaveric imaging dataset collected with documented donor consent by
-the U.S. National Library of Medicine; no living subjects are involved and no IRB
-approval is applicable to the simulation work. The VHP source imagery is provided under
-open NLM Terms and Conditions and is acknowledged as required (see License / Terms of
-Use). No patient consent or de-identification concerns arise because no patient data is
-present at any stage.
+The data is entirely synthetic. It contains no patient data, no PHI and no identifiable information. The underlying anatomy derives from the **Visible Human Project**, a publicly released cadaveric imaging dataset collected with documented donor consent by the U.S. National Library of Medicine; no living subjects are involved and no IRB approval is applicable to the simulation work. The VHP source imagery is provided under open NLM Terms and Conditions and is acknowledged as required (see License / Terms of Use). No patient consent or de-identification concerns arise because no patient data is present at any stage.
## Citation
-> L. Zhuang, O. Ostras, M. Sode, W. Simson, D. Hyun, F. Santibanez, J. Dahl and
-> G. Pinton, "Labeled Numerical Phantom of Abdominal Wall for Wave-Physics-Based
-> Ultrasound Imaging: Applications to Image Reconstruction," *IEEE Transactions on
-> Ultrasonics, Ferroelectrics, and Frequency Control*, vol. 73, no. 1, pp. 24–34,
-> Jan. 2026. doi:10.1109/TUSON.2025.3638314
+> L. Zhuang, O. Ostras, M. Sode, W. Simson, D. Hyun, F. Santibanez, J. Dahl and G. Pinton, "Labeled Numerical Phantom of Abdominal Wall for Wave-Physics-Based Ultrasound Imaging: Applications to Image Reconstruction," *IEEE Transactions on Ultrasonics, Ferroelectrics, and Frequency Control*, vol. 73, no. 1, pp. 24–34, Jan. 2026. doi:10.1109/TUSON.2025.3638314
Related resources:
diff --git a/datasets/unc-liver/assets/dataset_split.csv b/datasets/unc-liver/assets/dataset_split.csv
new file mode 100644
index 0000000..3f93372
--- /dev/null
+++ b/datasets/unc-liver/assets/dataset_split.csv
@@ -0,0 +1,1907 @@
+dataset_source,hdf5_filename,sim,volume,is_nan,half_half_1_train,half_half_1_valid,half_half_2_train,half_half_2_valid,fold1_train,fold1_valid,fold2_train,fold2_valid,fold3_train,fold3_valid,fold4_train,fold4_valid
+fullwave_abdominal_wall,fullwave_abdominal_wall_176_reg.hdf5,176,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_177_reg.hdf5,177,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_178_reg.hdf5,178,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_179_reg.hdf5,179,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_180_reg.hdf5,180,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_181_reg.hdf5,181,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_182_reg.hdf5,182,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_183_reg.hdf5,183,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_184_reg.hdf5,184,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_185_reg.hdf5,185,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_186_reg.hdf5,186,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_188_reg.hdf5,188,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_189_reg.hdf5,189,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_190_reg.hdf5,190,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_192_reg.hdf5,192,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_193_reg.hdf5,193,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_194_reg.hdf5,194,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_196_reg.hdf5,196,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_197_reg.hdf5,197,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_198_reg.hdf5,198,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_202_reg.hdf5,202,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_203_reg.hdf5,203,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_204_reg.hdf5,204,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_206_reg.hdf5,206,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_207_reg.hdf5,207,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_208_reg.hdf5,208,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_209_reg.hdf5,209,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_210_reg.hdf5,210,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_211_reg.hdf5,211,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_212_reg.hdf5,212,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_213_reg.hdf5,213,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_214_reg.hdf5,214,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_216_reg.hdf5,216,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_217_reg.hdf5,217,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_218_reg.hdf5,218,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_219_reg.hdf5,219,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_220_reg.hdf5,220,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_221_reg.hdf5,221,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_223_reg.hdf5,223,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_224_reg.hdf5,224,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_225_reg.hdf5,225,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_226_reg.hdf5,226,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_227_reg.hdf5,227,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_228_reg.hdf5,228,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_229_reg.hdf5,229,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_230_reg.hdf5,230,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_231_reg.hdf5,231,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_232_reg.hdf5,232,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_233_reg.hdf5,233,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_236_reg.hdf5,236,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_237_reg.hdf5,237,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_238_reg.hdf5,238,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_239_reg.hdf5,239,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_241_reg.hdf5,241,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_242_reg.hdf5,242,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_243_reg.hdf5,243,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_244_reg.hdf5,244,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_245_reg.hdf5,245,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_246_reg.hdf5,246,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_248_reg.hdf5,248,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_250_reg.hdf5,250,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_251_reg.hdf5,251,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_252_reg.hdf5,252,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_253_reg.hdf5,253,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_255_reg.hdf5,255,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_256_reg.hdf5,256,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_257_reg.hdf5,257,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_258_reg.hdf5,258,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_259_reg.hdf5,259,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_260_reg.hdf5,260,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_261_reg.hdf5,261,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_262_reg.hdf5,262,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_265_reg.hdf5,265,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_267_reg.hdf5,267,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_268_reg.hdf5,268,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_276_reg.hdf5,276,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_277_reg.hdf5,277,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_281_reg.hdf5,281,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_282_reg.hdf5,282,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_283_reg.hdf5,283,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_284_reg.hdf5,284,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_285_reg.hdf5,285,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_286_reg.hdf5,286,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_287_reg.hdf5,287,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_288_reg.hdf5,288,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_289_reg.hdf5,289,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_290_reg.hdf5,290,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_292_reg.hdf5,292,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_293_reg.hdf5,293,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_295_reg.hdf5,295,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_296_reg.hdf5,296,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_297_reg.hdf5,297,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_298_reg.hdf5,298,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_299_reg.hdf5,299,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_301_reg.hdf5,301,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_303_reg.hdf5,303,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_304_reg.hdf5,304,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_305_reg.hdf5,305,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_306_reg.hdf5,306,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_315_reg.hdf5,315,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_316_reg.hdf5,316,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_317_reg.hdf5,317,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_318_reg.hdf5,318,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_319_reg.hdf5,319,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_320_reg.hdf5,320,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_322_reg.hdf5,322,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_323_reg.hdf5,323,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_324_reg.hdf5,324,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_325_reg.hdf5,325,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_326_reg.hdf5,326,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_327_reg.hdf5,327,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_329_reg.hdf5,329,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_330_reg.hdf5,330,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_331_reg.hdf5,331,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_332_reg.hdf5,332,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_333_reg.hdf5,333,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_335_reg.hdf5,335,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_336_reg.hdf5,336,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_337_reg.hdf5,337,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_338_reg.hdf5,338,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_339_reg.hdf5,339,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_340_reg.hdf5,340,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_342_reg.hdf5,342,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_343_reg.hdf5,343,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_345_reg.hdf5,345,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_346_reg.hdf5,346,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_347_reg.hdf5,347,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_348_reg.hdf5,348,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_349_reg.hdf5,349,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_350_reg.hdf5,350,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_351_reg.hdf5,351,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_352_reg.hdf5,352,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_353_reg.hdf5,353,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_354_reg.hdf5,354,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_355_reg.hdf5,355,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_356_reg.hdf5,356,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_357_reg.hdf5,357,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_358_reg.hdf5,358,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_359_reg.hdf5,359,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_360_reg.hdf5,360,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_361_reg.hdf5,361,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_362_reg.hdf5,362,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_363_reg.hdf5,363,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_364_reg.hdf5,364,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_365_reg.hdf5,365,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_366_reg.hdf5,366,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_371_reg.hdf5,371,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_373_reg.hdf5,373,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_374_reg.hdf5,374,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_379_reg.hdf5,379,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_380_reg.hdf5,380,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_382_reg.hdf5,382,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_383_reg.hdf5,383,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_384_reg.hdf5,384,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_385_reg.hdf5,385,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_386_reg.hdf5,386,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_387_reg.hdf5,387,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_388_reg.hdf5,388,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_389_reg.hdf5,389,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_390_reg.hdf5,390,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_392_reg.hdf5,392,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_393_reg.hdf5,393,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_394_reg.hdf5,394,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_395_reg.hdf5,395,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_396_reg.hdf5,396,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_397_reg.hdf5,397,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_398_reg.hdf5,398,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_399_reg.hdf5,399,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_400_reg.hdf5,400,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_402_reg.hdf5,402,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_403_reg.hdf5,403,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_404_reg.hdf5,404,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_405_reg.hdf5,405,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_406_reg.hdf5,406,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_407_reg.hdf5,407,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_408_reg.hdf5,408,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_409_reg.hdf5,409,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_410_reg.hdf5,410,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_411_reg.hdf5,411,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_412_reg.hdf5,412,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_413_reg.hdf5,413,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_414_reg.hdf5,414,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_415_reg.hdf5,415,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_416_reg.hdf5,416,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_417_reg.hdf5,417,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_418_reg.hdf5,418,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_419_reg.hdf5,419,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_420_reg.hdf5,420,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_422_reg.hdf5,422,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_423_reg.hdf5,423,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_428_reg.hdf5,428,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_429_reg.hdf5,429,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_430_reg.hdf5,430,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_431_reg.hdf5,431,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_432_reg.hdf5,432,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_433_reg.hdf5,433,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_434_reg.hdf5,434,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_435_reg.hdf5,435,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_436_reg.hdf5,436,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_437_reg.hdf5,437,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_438_reg.hdf5,438,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_439_reg.hdf5,439,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_440_reg.hdf5,440,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_441_reg.hdf5,441,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_442_reg.hdf5,442,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_443_reg.hdf5,443,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_444_reg.hdf5,444,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_445_reg.hdf5,445,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_446_reg.hdf5,446,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_447_reg.hdf5,447,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_448_reg.hdf5,448,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_449_reg.hdf5,449,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_451_reg.hdf5,451,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_452_reg.hdf5,452,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_453_reg.hdf5,453,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_454_reg.hdf5,454,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_455_reg.hdf5,455,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_456_reg.hdf5,456,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_459_reg.hdf5,459,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_460_reg.hdf5,460,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_461_reg.hdf5,461,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_462_reg.hdf5,462,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_463_reg.hdf5,463,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_464_reg.hdf5,464,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_466_reg.hdf5,466,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_469_reg.hdf5,469,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_470_reg.hdf5,470,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_471_reg.hdf5,471,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_472_reg.hdf5,472,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_473_reg.hdf5,473,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_474_reg.hdf5,474,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_475_reg.hdf5,475,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_476_reg.hdf5,476,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_477_reg.hdf5,477,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_478_reg.hdf5,478,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_479_reg.hdf5,479,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_480_reg.hdf5,480,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_481_reg.hdf5,481,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_482_reg.hdf5,482,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_483_reg.hdf5,483,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_484_reg.hdf5,484,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_485_reg.hdf5,485,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_486_reg.hdf5,486,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_488_reg.hdf5,488,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_489_reg.hdf5,489,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_490_reg.hdf5,490,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_491_reg.hdf5,491,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_492_reg.hdf5,492,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_493_reg.hdf5,493,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_494_reg.hdf5,494,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_495_reg.hdf5,495,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_497_reg.hdf5,497,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_498_reg.hdf5,498,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_499_reg.hdf5,499,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_500_reg.hdf5,500,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_502_reg.hdf5,502,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_503_reg.hdf5,503,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_505_reg.hdf5,505,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_506_reg.hdf5,506,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_507_reg.hdf5,507,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_508_reg.hdf5,508,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_509_reg.hdf5,509,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_510_reg.hdf5,510,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_511_reg.hdf5,511,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_513_reg.hdf5,513,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_514_reg.hdf5,514,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_515_reg.hdf5,515,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_516_reg.hdf5,516,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_519_reg.hdf5,519,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_521_reg.hdf5,521,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_526_reg.hdf5,526,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_529_reg.hdf5,529,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_530_reg.hdf5,530,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_531_reg.hdf5,531,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_532_reg.hdf5,532,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_533_reg.hdf5,533,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_534_reg.hdf5,534,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_535_reg.hdf5,535,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_536_reg.hdf5,536,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_537_reg.hdf5,537,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_538_reg.hdf5,538,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_539_reg.hdf5,539,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_540_reg.hdf5,540,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_541_reg.hdf5,541,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_542_reg.hdf5,542,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_543_reg.hdf5,543,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_544_reg.hdf5,544,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_545_reg.hdf5,545,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_546_reg.hdf5,546,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_547_reg.hdf5,547,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_548_reg.hdf5,548,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_550_reg.hdf5,550,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_551_reg.hdf5,551,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_552_reg.hdf5,552,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_553_reg.hdf5,553,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_554_reg.hdf5,554,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_556_reg.hdf5,556,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_558_reg.hdf5,558,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_559_reg.hdf5,559,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_560_reg.hdf5,560,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_561_reg.hdf5,561,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_564_reg.hdf5,564,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_565_reg.hdf5,565,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_566_reg.hdf5,566,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_567_reg.hdf5,567,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_568_reg.hdf5,568,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_569_reg.hdf5,569,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_570_reg.hdf5,570,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_571_reg.hdf5,571,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_572_reg.hdf5,572,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_573_reg.hdf5,573,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_574_reg.hdf5,574,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_575_reg.hdf5,575,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_576_reg.hdf5,576,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_577_reg.hdf5,577,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_578_reg.hdf5,578,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_579_reg.hdf5,579,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_580_reg.hdf5,580,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_581_reg.hdf5,581,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_582_reg.hdf5,582,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_583_reg.hdf5,583,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_586_reg.hdf5,586,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_589_reg.hdf5,589,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_591_reg.hdf5,591,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_593_reg.hdf5,593,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_594_reg.hdf5,594,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_595_reg.hdf5,595,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_596_reg.hdf5,596,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_597_reg.hdf5,597,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_598_reg.hdf5,598,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_599_reg.hdf5,599,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_600_reg.hdf5,600,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_602_reg.hdf5,602,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_603_reg.hdf5,603,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_604_reg.hdf5,604,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_605_reg.hdf5,605,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_606_reg.hdf5,606,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_607_reg.hdf5,607,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_608_reg.hdf5,608,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_610_reg.hdf5,610,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_611_reg.hdf5,611,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_613_reg.hdf5,613,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_615_reg.hdf5,615,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_616_reg.hdf5,616,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_618_reg.hdf5,618,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_619_reg.hdf5,619,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_620_reg.hdf5,620,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_621_reg.hdf5,621,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_622_reg.hdf5,622,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_623_reg.hdf5,623,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_624_reg.hdf5,624,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_625_reg.hdf5,625,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_626_reg.hdf5,626,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_627_reg.hdf5,627,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_628_reg.hdf5,628,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_629_reg.hdf5,629,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_630_reg.hdf5,630,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_632_reg.hdf5,632,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_633_reg.hdf5,633,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_634_reg.hdf5,634,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_635_reg.hdf5,635,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_637_reg.hdf5,637,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_638_reg.hdf5,638,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_639_reg.hdf5,639,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_640_reg.hdf5,640,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_641_reg.hdf5,641,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_642_reg.hdf5,642,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_644_reg.hdf5,644,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_645_reg.hdf5,645,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_646_reg.hdf5,646,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_647_reg.hdf5,647,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_648_reg.hdf5,648,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_649_reg.hdf5,649,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_652_reg.hdf5,652,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_653_reg.hdf5,653,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_654_reg.hdf5,654,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_655_reg.hdf5,655,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_656_reg.hdf5,656,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_657_reg.hdf5,657,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_658_reg.hdf5,658,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_659_reg.hdf5,659,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_660_reg.hdf5,660,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_661_reg.hdf5,661,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_662_reg.hdf5,662,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_663_reg.hdf5,663,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_664_reg.hdf5,664,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_665_reg.hdf5,665,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_666_reg.hdf5,666,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_667_reg.hdf5,667,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_668_reg.hdf5,668,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_670_reg.hdf5,670,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_672_reg.hdf5,672,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_673_reg.hdf5,673,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_674_reg.hdf5,674,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_676_reg.hdf5,676,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_677_reg.hdf5,677,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_678_reg.hdf5,678,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_679_reg.hdf5,679,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_681_reg.hdf5,681,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_682_reg.hdf5,682,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_685_reg.hdf5,685,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_686_reg.hdf5,686,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_687_reg.hdf5,687,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_688_reg.hdf5,688,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_689_reg.hdf5,689,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_690_reg.hdf5,690,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_691_reg.hdf5,691,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_692_reg.hdf5,692,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_693_reg.hdf5,693,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_694_reg.hdf5,694,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_695_reg.hdf5,695,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_696_reg.hdf5,696,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_697_reg.hdf5,697,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_698_reg.hdf5,698,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_699_reg.hdf5,699,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_700_reg.hdf5,700,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_701_reg.hdf5,701,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_703_reg.hdf5,703,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_704_reg.hdf5,704,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_705_reg.hdf5,705,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_706_reg.hdf5,706,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_707_reg.hdf5,707,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_708_reg.hdf5,708,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_709_reg.hdf5,709,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_710_reg.hdf5,710,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_711_reg.hdf5,711,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_713_reg.hdf5,713,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_714_reg.hdf5,714,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_715_reg.hdf5,715,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_717_reg.hdf5,717,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_720_reg.hdf5,720,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_721_reg.hdf5,721,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_722_reg.hdf5,722,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_724_reg.hdf5,724,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_725_reg.hdf5,725,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_726_reg.hdf5,726,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_727_reg.hdf5,727,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_728_reg.hdf5,728,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_729_reg.hdf5,729,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_730_reg.hdf5,730,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_731_reg.hdf5,731,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_732_reg.hdf5,732,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_734_reg.hdf5,734,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_735_reg.hdf5,735,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_736_reg.hdf5,736,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_738_reg.hdf5,738,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_739_reg.hdf5,739,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_740_reg.hdf5,740,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_741_reg.hdf5,741,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_742_reg.hdf5,742,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_744_reg.hdf5,744,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_745_reg.hdf5,745,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_746_reg.hdf5,746,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_747_reg.hdf5,747,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_748_reg.hdf5,748,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_749_reg.hdf5,749,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_750_reg.hdf5,750,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_751_reg.hdf5,751,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_753_reg.hdf5,753,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_754_reg.hdf5,754,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_755_reg.hdf5,755,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_756_reg.hdf5,756,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_757_reg.hdf5,757,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_758_reg.hdf5,758,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_759_reg.hdf5,759,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_760_reg.hdf5,760,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_761_reg.hdf5,761,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_763_reg.hdf5,763,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_764_reg.hdf5,764,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_765_reg.hdf5,765,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_767_reg.hdf5,767,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_770_reg.hdf5,770,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_771_reg.hdf5,771,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_772_reg.hdf5,772,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_774_reg.hdf5,774,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_775_reg.hdf5,775,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_776_reg.hdf5,776,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_777_reg.hdf5,777,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_778_reg.hdf5,778,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_779_reg.hdf5,779,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_780_reg.hdf5,780,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_781_reg.hdf5,781,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_782_reg.hdf5,782,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_784_reg.hdf5,784,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_785_reg.hdf5,785,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_786_reg.hdf5,786,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_788_reg.hdf5,788,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_789_reg.hdf5,789,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_790_reg.hdf5,790,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_792_reg.hdf5,792,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_794_reg.hdf5,794,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_795_reg.hdf5,795,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_796_reg.hdf5,796,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_797_reg.hdf5,797,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_798_reg.hdf5,798,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_799_reg.hdf5,799,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_800_reg.hdf5,800,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_801_reg.hdf5,801,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_802_reg.hdf5,802,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_803_reg.hdf5,803,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_804_reg.hdf5,804,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_806_reg.hdf5,806,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_807_reg.hdf5,807,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_808_reg.hdf5,808,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_809_reg.hdf5,809,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_811_reg.hdf5,811,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_812_reg.hdf5,812,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_813_reg.hdf5,813,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_814_reg.hdf5,814,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_815_reg.hdf5,815,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_816_reg.hdf5,816,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_817_reg.hdf5,817,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_818_reg.hdf5,818,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_819_reg.hdf5,819,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_820_reg.hdf5,820,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_825_reg.hdf5,825,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_826_reg.hdf5,826,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_827_reg.hdf5,827,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_828_reg.hdf5,828,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_829_reg.hdf5,829,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_830_reg.hdf5,830,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_831_reg.hdf5,831,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_832_reg.hdf5,832,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_833_reg.hdf5,833,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_834_reg.hdf5,834,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_835_reg.hdf5,835,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_836_reg.hdf5,836,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_837_reg.hdf5,837,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_838_reg.hdf5,838,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_839_reg.hdf5,839,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_840_reg.hdf5,840,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_841_reg.hdf5,841,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_842_reg.hdf5,842,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_843_reg.hdf5,843,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_847_reg.hdf5,847,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_850_reg.hdf5,850,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_851_reg.hdf5,851,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_852_reg.hdf5,852,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_853_reg.hdf5,853,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_854_reg.hdf5,854,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_855_reg.hdf5,855,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_856_reg.hdf5,856,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_857_reg.hdf5,857,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_858_reg.hdf5,858,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_859_reg.hdf5,859,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_860_reg.hdf5,860,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_861_reg.hdf5,861,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_862_reg.hdf5,862,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_864_reg.hdf5,864,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_865_reg.hdf5,865,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_866_reg.hdf5,866,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_868_reg.hdf5,868,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_869_reg.hdf5,869,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_870_reg.hdf5,870,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_872_reg.hdf5,872,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_873_reg.hdf5,873,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_874_reg.hdf5,874,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_875_reg.hdf5,875,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_876_reg.hdf5,876,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_877_reg.hdf5,877,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_878_reg.hdf5,878,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_879_reg.hdf5,879,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_880_reg.hdf5,880,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_881_reg.hdf5,881,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_882_reg.hdf5,882,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_884_reg.hdf5,884,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_885_reg.hdf5,885,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_886_reg.hdf5,886,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_887_reg.hdf5,887,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_889_reg.hdf5,889,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_890_reg.hdf5,890,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_891_reg.hdf5,891,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_892_reg.hdf5,892,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_893_reg.hdf5,893,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_894_reg.hdf5,894,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_895_reg.hdf5,895,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_896_reg.hdf5,896,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_897_reg.hdf5,897,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_898_reg.hdf5,898,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_899_reg.hdf5,899,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_900_reg.hdf5,900,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_901_reg.hdf5,901,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_902_reg.hdf5,902,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_903_reg.hdf5,903,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_904_reg.hdf5,904,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_905_reg.hdf5,905,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_906_reg.hdf5,906,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_907_reg.hdf5,907,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_908_reg.hdf5,908,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_909_reg.hdf5,909,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_911_reg.hdf5,911,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_912_reg.hdf5,912,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_913_reg.hdf5,913,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_915_reg.hdf5,915,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_916_reg.hdf5,916,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_917_reg.hdf5,917,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_919_reg.hdf5,919,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_920_reg.hdf5,920,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_921_reg.hdf5,921,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_922_reg.hdf5,922,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_924_reg.hdf5,924,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_925_reg.hdf5,925,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_926_reg.hdf5,926,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_928_reg.hdf5,928,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_929_reg.hdf5,929,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_930_reg.hdf5,930,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_931_reg.hdf5,931,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_932_reg.hdf5,932,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_933_reg.hdf5,933,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_934_reg.hdf5,934,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_935_reg.hdf5,935,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_936_reg.hdf5,936,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_937_reg.hdf5,937,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_939_reg.hdf5,939,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_940_reg.hdf5,940,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_941_reg.hdf5,941,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_942_reg.hdf5,942,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_943_reg.hdf5,943,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_944_reg.hdf5,944,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_946_reg.hdf5,946,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_947_reg.hdf5,947,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_948_reg.hdf5,948,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_949_reg.hdf5,949,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_952_reg.hdf5,952,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_954_reg.hdf5,954,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_955_reg.hdf5,955,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_957_reg.hdf5,957,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_958_reg.hdf5,958,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_959_reg.hdf5,959,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_961_reg.hdf5,961,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_962_reg.hdf5,962,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_964_reg.hdf5,964,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_965_reg.hdf5,965,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_966_reg.hdf5,966,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_967_reg.hdf5,967,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_968_reg.hdf5,968,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_969_reg.hdf5,969,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_970_reg.hdf5,970,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_972_reg.hdf5,972,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_973_reg.hdf5,973,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_974_reg.hdf5,974,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_975_reg.hdf5,975,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_976_reg.hdf5,976,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_977_reg.hdf5,977,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_978_reg.hdf5,978,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_979_reg.hdf5,979,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_980_reg.hdf5,980,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_981_reg.hdf5,981,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_982_reg.hdf5,982,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_983_reg.hdf5,983,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_984_reg.hdf5,984,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_985_reg.hdf5,985,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_986_reg.hdf5,986,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_987_reg.hdf5,987,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_988_reg.hdf5,988,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_989_reg.hdf5,989,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_990_reg.hdf5,990,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_991_reg.hdf5,991,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_992_reg.hdf5,992,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_994_reg.hdf5,994,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_995_reg.hdf5,995,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_996_reg.hdf5,996,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_997_reg.hdf5,997,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_998_reg.hdf5,998,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_999_reg.hdf5,999,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1001_reg.hdf5,1001,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1002_reg.hdf5,1002,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1003_reg.hdf5,1003,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1005_reg.hdf5,1005,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1006_reg.hdf5,1006,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1007_reg.hdf5,1007,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1009_reg.hdf5,1009,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1010_reg.hdf5,1010,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1011_reg.hdf5,1011,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1012_reg.hdf5,1012,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1014_reg.hdf5,1014,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1015_reg.hdf5,1015,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1016_reg.hdf5,1016,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1017_reg.hdf5,1017,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1018_reg.hdf5,1018,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1019_reg.hdf5,1019,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1020_reg.hdf5,1020,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1021_reg.hdf5,1021,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1022_reg.hdf5,1022,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1023_reg.hdf5,1023,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1025_reg.hdf5,1025,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1026_reg.hdf5,1026,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1027_reg.hdf5,1027,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1028_reg.hdf5,1028,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1030_reg.hdf5,1030,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1033_reg.hdf5,1033,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1034_reg.hdf5,1034,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1035_reg.hdf5,1035,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1036_reg.hdf5,1036,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1037_reg.hdf5,1037,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1038_reg.hdf5,1038,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1039_reg.hdf5,1039,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1041_reg.hdf5,1041,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1043_reg.hdf5,1043,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1044_reg.hdf5,1044,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1045_reg.hdf5,1045,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1046_reg.hdf5,1046,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1047_reg.hdf5,1047,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1048_reg.hdf5,1048,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1049_reg.hdf5,1049,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1051_reg.hdf5,1051,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1056_reg.hdf5,1056,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1058_reg.hdf5,1058,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1060_reg.hdf5,1060,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1061_reg.hdf5,1061,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1062_reg.hdf5,1062,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1063_reg.hdf5,1063,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1066_reg.hdf5,1066,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1068_reg.hdf5,1068,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1070_reg.hdf5,1070,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1071_reg.hdf5,1071,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1072_reg.hdf5,1072,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1073_reg.hdf5,1073,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1074_reg.hdf5,1074,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1076_reg.hdf5,1076,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1077_reg.hdf5,1077,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1078_reg.hdf5,1078,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1079_reg.hdf5,1079,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1080_reg.hdf5,1080,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1081_reg.hdf5,1081,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1082_reg.hdf5,1082,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1083_reg.hdf5,1083,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1084_reg.hdf5,1084,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1085_reg.hdf5,1085,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1086_reg.hdf5,1086,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1087_reg.hdf5,1087,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1088_reg.hdf5,1088,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1092_reg.hdf5,1092,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1094_reg.hdf5,1094,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1095_reg.hdf5,1095,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1096_reg.hdf5,1096,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1098_reg.hdf5,1098,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1099_reg.hdf5,1099,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1100_reg.hdf5,1100,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1101_reg.hdf5,1101,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1102_reg.hdf5,1102,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1103_reg.hdf5,1103,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1105_reg.hdf5,1105,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1106_reg.hdf5,1106,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1107_reg.hdf5,1107,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1108_reg.hdf5,1108,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1109_reg.hdf5,1109,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1110_reg.hdf5,1110,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1111_reg.hdf5,1111,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1113_reg.hdf5,1113,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1114_reg.hdf5,1114,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1115_reg.hdf5,1115,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1116_reg.hdf5,1116,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1117_reg.hdf5,1117,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1118_reg.hdf5,1118,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1119_reg.hdf5,1119,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1120_reg.hdf5,1120,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1121_reg.hdf5,1121,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1122_reg.hdf5,1122,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1123_reg.hdf5,1123,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1124_reg.hdf5,1124,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1125_reg.hdf5,1125,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1126_reg.hdf5,1126,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1127_reg.hdf5,1127,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1128_reg.hdf5,1128,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1129_reg.hdf5,1129,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1130_reg.hdf5,1130,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1131_reg.hdf5,1131,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1132_reg.hdf5,1132,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1133_reg.hdf5,1133,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1134_reg.hdf5,1134,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1135_reg.hdf5,1135,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1136_reg.hdf5,1136,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1137_reg.hdf5,1137,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1138_reg.hdf5,1138,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1140_reg.hdf5,1140,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1141_reg.hdf5,1141,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1142_reg.hdf5,1142,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1143_reg.hdf5,1143,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1145_reg.hdf5,1145,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1146_reg.hdf5,1146,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1147_reg.hdf5,1147,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1148_reg.hdf5,1148,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1149_reg.hdf5,1149,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1151_reg.hdf5,1151,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1152_reg.hdf5,1152,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1153_reg.hdf5,1153,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1154_reg.hdf5,1154,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1155_reg.hdf5,1155,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1156_reg.hdf5,1156,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1157_reg.hdf5,1157,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1158_reg.hdf5,1158,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1159_reg.hdf5,1159,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1160_reg.hdf5,1160,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1161_reg.hdf5,1161,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1162_reg.hdf5,1162,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1163_reg.hdf5,1163,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1165_reg.hdf5,1165,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1166_reg.hdf5,1166,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1167_reg.hdf5,1167,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1169_reg.hdf5,1169,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1170_reg.hdf5,1170,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1171_reg.hdf5,1171,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1172_reg.hdf5,1172,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1174_reg.hdf5,1174,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1175_reg.hdf5,1175,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1176_reg.hdf5,1176,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1178_reg.hdf5,1178,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1179_reg.hdf5,1179,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1180_reg.hdf5,1180,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1181_reg.hdf5,1181,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1182_reg.hdf5,1182,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1183_reg.hdf5,1183,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1184_reg.hdf5,1184,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1185_reg.hdf5,1185,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1186_reg.hdf5,1186,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1187_reg.hdf5,1187,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1189_reg.hdf5,1189,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1190_reg.hdf5,1190,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1191_reg.hdf5,1191,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1192_reg.hdf5,1192,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1197_reg.hdf5,1197,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1198_reg.hdf5,1198,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1199_reg.hdf5,1199,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1201_reg.hdf5,1201,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1205_reg.hdf5,1205,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1207_reg.hdf5,1207,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1209_reg.hdf5,1209,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1210_reg.hdf5,1210,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1211_reg.hdf5,1211,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1212_reg.hdf5,1212,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1215_reg.hdf5,1215,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1217_reg.hdf5,1217,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1219_reg.hdf5,1219,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1220_reg.hdf5,1220,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1221_reg.hdf5,1221,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1222_reg.hdf5,1222,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1223_reg.hdf5,1223,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1225_reg.hdf5,1225,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1226_reg.hdf5,1226,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1227_reg.hdf5,1227,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1228_reg.hdf5,1228,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1229_reg.hdf5,1229,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1230_reg.hdf5,1230,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1231_reg.hdf5,1231,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1232_reg.hdf5,1232,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1233_reg.hdf5,1233,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1234_reg.hdf5,1234,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1235_reg.hdf5,1235,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1236_reg.hdf5,1236,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1237_reg.hdf5,1237,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1241_reg.hdf5,1241,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1243_reg.hdf5,1243,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1244_reg.hdf5,1244,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1245_reg.hdf5,1245,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1247_reg.hdf5,1247,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1248_reg.hdf5,1248,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1249_reg.hdf5,1249,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1250_reg.hdf5,1250,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1254_reg.hdf5,1254,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1255_reg.hdf5,1255,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1256_reg.hdf5,1256,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1257_reg.hdf5,1257,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1258_reg.hdf5,1258,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1259_reg.hdf5,1259,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1260_reg.hdf5,1260,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1261_reg.hdf5,1261,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1262_reg.hdf5,1262,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1263_reg.hdf5,1263,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1264_reg.hdf5,1264,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1265_reg.hdf5,1265,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1266_reg.hdf5,1266,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1268_reg.hdf5,1268,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1269_reg.hdf5,1269,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1270_reg.hdf5,1270,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1271_reg.hdf5,1271,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1272_reg.hdf5,1272,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1273_reg.hdf5,1273,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1274_reg.hdf5,1274,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1276_reg.hdf5,1276,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1277_reg.hdf5,1277,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1279_reg.hdf5,1279,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1280_reg.hdf5,1280,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1282_reg.hdf5,1282,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1283_reg.hdf5,1283,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1284_reg.hdf5,1284,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1285_reg.hdf5,1285,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1286_reg.hdf5,1286,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1287_reg.hdf5,1287,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1288_reg.hdf5,1288,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1290_reg.hdf5,1290,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1292_reg.hdf5,1292,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1293_reg.hdf5,1293,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1302_reg.hdf5,1302,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1303_reg.hdf5,1303,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1304_reg.hdf5,1304,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1305_reg.hdf5,1305,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1306_reg.hdf5,1306,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1307_reg.hdf5,1307,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1308_reg.hdf5,1308,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1309_reg.hdf5,1309,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1310_reg.hdf5,1310,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1311_reg.hdf5,1311,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1312_reg.hdf5,1312,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1313_reg.hdf5,1313,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1314_reg.hdf5,1314,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1315_reg.hdf5,1315,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1317_reg.hdf5,1317,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1318_reg.hdf5,1318,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1319_reg.hdf5,1319,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1320_reg.hdf5,1320,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1321_reg.hdf5,1321,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1322_reg.hdf5,1322,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1323_reg.hdf5,1323,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1324_reg.hdf5,1324,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1325_reg.hdf5,1325,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1326_reg.hdf5,1326,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1327_reg.hdf5,1327,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1328_reg.hdf5,1328,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1329_reg.hdf5,1329,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1330_reg.hdf5,1330,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1331_reg.hdf5,1331,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1332_reg.hdf5,1332,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1333_reg.hdf5,1333,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1334_reg.hdf5,1334,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1335_reg.hdf5,1335,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1336_reg.hdf5,1336,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1337_reg.hdf5,1337,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1338_reg.hdf5,1338,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1339_reg.hdf5,1339,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1340_reg.hdf5,1340,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1341_reg.hdf5,1341,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1342_reg.hdf5,1342,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1343_reg.hdf5,1343,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1344_reg.hdf5,1344,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1345_reg.hdf5,1345,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1346_reg.hdf5,1346,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1347_reg.hdf5,1347,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1348_reg.hdf5,1348,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1349_reg.hdf5,1349,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1351_reg.hdf5,1351,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1352_reg.hdf5,1352,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1353_reg.hdf5,1353,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1354_reg.hdf5,1354,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1355_reg.hdf5,1355,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1356_reg.hdf5,1356,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1357_reg.hdf5,1357,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1358_reg.hdf5,1358,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1359_reg.hdf5,1359,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1360_reg.hdf5,1360,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1361_reg.hdf5,1361,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1362_reg.hdf5,1362,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1363_reg.hdf5,1363,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1364_reg.hdf5,1364,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1365_reg.hdf5,1365,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1366_reg.hdf5,1366,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1367_reg.hdf5,1367,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1368_reg.hdf5,1368,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1369_reg.hdf5,1369,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1370_reg.hdf5,1370,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1371_reg.hdf5,1371,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1372_reg.hdf5,1372,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1373_reg.hdf5,1373,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1374_reg.hdf5,1374,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1375_reg.hdf5,1375,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1376_reg.hdf5,1376,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1377_reg.hdf5,1377,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1378_reg.hdf5,1378,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1379_reg.hdf5,1379,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1380_reg.hdf5,1380,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1381_reg.hdf5,1381,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1382_reg.hdf5,1382,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1383_reg.hdf5,1383,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1384_reg.hdf5,1384,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1385_reg.hdf5,1385,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1386_reg.hdf5,1386,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1387_reg.hdf5,1387,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1388_reg.hdf5,1388,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1389_reg.hdf5,1389,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1391_reg.hdf5,1391,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1393_reg.hdf5,1393,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1394_reg.hdf5,1394,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1396_reg.hdf5,1396,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1397_reg.hdf5,1397,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1398_reg.hdf5,1398,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1399_reg.hdf5,1399,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1401_reg.hdf5,1401,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1402_reg.hdf5,1402,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1403_reg.hdf5,1403,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1404_reg.hdf5,1404,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1405_reg.hdf5,1405,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1406_reg.hdf5,1406,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1407_reg.hdf5,1407,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1408_reg.hdf5,1408,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1409_reg.hdf5,1409,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1410_reg.hdf5,1410,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1411_reg.hdf5,1411,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1413_reg.hdf5,1413,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1414_reg.hdf5,1414,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1415_reg.hdf5,1415,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1416_reg.hdf5,1416,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1417_reg.hdf5,1417,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1418_reg.hdf5,1418,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1419_reg.hdf5,1419,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1420_reg.hdf5,1420,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1421_reg.hdf5,1421,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1422_reg.hdf5,1422,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1423_reg.hdf5,1423,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1425_reg.hdf5,1425,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1427_reg.hdf5,1427,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1428_reg.hdf5,1428,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1429_reg.hdf5,1429,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1432_reg.hdf5,1432,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1434_reg.hdf5,1434,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1435_reg.hdf5,1435,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1436_reg.hdf5,1436,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1437_reg.hdf5,1437,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1438_reg.hdf5,1438,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1439_reg.hdf5,1439,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1440_reg.hdf5,1440,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1441_reg.hdf5,1441,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1442_reg.hdf5,1442,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1443_reg.hdf5,1443,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1445_reg.hdf5,1445,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1447_reg.hdf5,1447,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall,fullwave_abdominal_wall_1448_reg.hdf5,1448,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall,fullwave_abdominal_wall_1449_reg.hdf5,1449,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_1_reg.hdf5,1,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_2_reg.hdf5,2,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_3_reg.hdf5,3,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_4_reg.hdf5,4,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_5_reg.hdf5,5,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_6_reg.hdf5,6,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_7_reg.hdf5,7,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_8_reg.hdf5,8,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_9_reg.hdf5,9,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_11_reg.hdf5,11,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_12_reg.hdf5,12,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_13_reg.hdf5,13,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_15_reg.hdf5,15,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_16_reg.hdf5,16,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_17_reg.hdf5,17,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_18_reg.hdf5,18,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_19_reg.hdf5,19,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_21_reg.hdf5,21,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_22_reg.hdf5,22,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_23_reg.hdf5,23,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_24_reg.hdf5,24,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_25_reg.hdf5,25,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_26_reg.hdf5,26,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_27_reg.hdf5,27,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_28_reg.hdf5,28,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_29_reg.hdf5,29,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_31_reg.hdf5,31,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_32_reg.hdf5,32,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_33_reg.hdf5,33,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_34_reg.hdf5,34,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_35_reg.hdf5,35,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_36_reg.hdf5,36,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_37_reg.hdf5,37,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_38_reg.hdf5,38,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_39_reg.hdf5,39,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_40_reg.hdf5,40,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_41_reg.hdf5,41,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_42_reg.hdf5,42,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_43_reg.hdf5,43,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_45_reg.hdf5,45,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_46_reg.hdf5,46,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_47_reg.hdf5,47,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_48_reg.hdf5,48,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_49_reg.hdf5,49,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_50_reg.hdf5,50,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_51_reg.hdf5,51,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_52_reg.hdf5,52,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_53_reg.hdf5,53,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_55_reg.hdf5,55,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_56_reg.hdf5,56,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_57_reg.hdf5,57,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_58_reg.hdf5,58,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_59_reg.hdf5,59,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_60_reg.hdf5,60,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_61_reg.hdf5,61,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_62_reg.hdf5,62,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_63_reg.hdf5,63,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_64_reg.hdf5,64,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_65_reg.hdf5,65,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_66_reg.hdf5,66,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_67_reg.hdf5,67,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_68_reg.hdf5,68,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_69_reg.hdf5,69,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_70_reg.hdf5,70,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_71_reg.hdf5,71,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_73_reg.hdf5,73,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_74_reg.hdf5,74,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_75_reg.hdf5,75,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_76_reg.hdf5,76,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_77_reg.hdf5,77,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_78_reg.hdf5,78,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_79_reg.hdf5,79,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_80_reg.hdf5,80,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_82_reg.hdf5,82,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_83_reg.hdf5,83,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_85_reg.hdf5,85,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_86_reg.hdf5,86,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_87_reg.hdf5,87,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_88_reg.hdf5,88,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_89_reg.hdf5,89,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_90_reg.hdf5,90,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_91_reg.hdf5,91,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_92_reg.hdf5,92,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_93_reg.hdf5,93,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_94_reg.hdf5,94,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_95_reg.hdf5,95,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_97_reg.hdf5,97,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_98_reg.hdf5,98,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_99_reg.hdf5,99,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_101_reg.hdf5,101,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_103_reg.hdf5,103,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_105_reg.hdf5,105,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_107_reg.hdf5,107,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_108_reg.hdf5,108,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_109_reg.hdf5,109,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_110_reg.hdf5,110,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_111_reg.hdf5,111,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_112_reg.hdf5,112,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_113_reg.hdf5,113,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_114_reg.hdf5,114,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_115_reg.hdf5,115,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_117_reg.hdf5,117,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_118_reg.hdf5,118,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_119_reg.hdf5,119,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_120_reg.hdf5,120,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_121_reg.hdf5,121,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_122_reg.hdf5,122,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_123_reg.hdf5,123,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_124_reg.hdf5,124,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_126_reg.hdf5,126,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_127_reg.hdf5,127,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_128_reg.hdf5,128,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_129_reg.hdf5,129,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_130_reg.hdf5,130,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_131_reg.hdf5,131,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_133_reg.hdf5,133,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_134_reg.hdf5,134,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_135_reg.hdf5,135,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_136_reg.hdf5,136,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_137_reg.hdf5,137,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_138_reg.hdf5,138,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_139_reg.hdf5,139,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_140_reg.hdf5,140,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_144_reg.hdf5,144,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_145_reg.hdf5,145,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_146_reg.hdf5,146,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_149_reg.hdf5,149,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_150_reg.hdf5,150,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_151_reg.hdf5,151,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_152_reg.hdf5,152,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_153_reg.hdf5,153,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_154_reg.hdf5,154,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_155_reg.hdf5,155,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_156_reg.hdf5,156,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_158_reg.hdf5,158,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_159_reg.hdf5,159,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_160_reg.hdf5,160,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_161_reg.hdf5,161,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_162_reg.hdf5,162,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_164_reg.hdf5,164,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_165_reg.hdf5,165,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_167_reg.hdf5,167,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_168_reg.hdf5,168,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_169_reg.hdf5,169,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_170_reg.hdf5,170,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_172_reg.hdf5,172,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_173_reg.hdf5,173,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_174_reg.hdf5,174,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_175_reg.hdf5,175,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_176_reg.hdf5,176,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_177_reg.hdf5,177,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_178_reg.hdf5,178,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_179_reg.hdf5,179,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_180_reg.hdf5,180,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_181_reg.hdf5,181,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_182_reg.hdf5,182,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_184_reg.hdf5,184,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_185_reg.hdf5,185,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_186_reg.hdf5,186,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_187_reg.hdf5,187,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_188_reg.hdf5,188,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_189_reg.hdf5,189,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_190_reg.hdf5,190,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_191_reg.hdf5,191,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_192_reg.hdf5,192,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_193_reg.hdf5,193,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_194_reg.hdf5,194,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_195_reg.hdf5,195,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_196_reg.hdf5,196,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_197_reg.hdf5,197,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_198_reg.hdf5,198,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_199_reg.hdf5,199,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_200_reg.hdf5,200,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_201_reg.hdf5,201,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_202_reg.hdf5,202,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_203_reg.hdf5,203,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_204_reg.hdf5,204,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_205_reg.hdf5,205,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_206_reg.hdf5,206,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_207_reg.hdf5,207,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_208_reg.hdf5,208,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_209_reg.hdf5,209,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_211_reg.hdf5,211,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_212_reg.hdf5,212,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_213_reg.hdf5,213,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_214_reg.hdf5,214,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_215_reg.hdf5,215,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_216_reg.hdf5,216,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_217_reg.hdf5,217,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_219_reg.hdf5,219,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_220_reg.hdf5,220,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_221_reg.hdf5,221,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_222_reg.hdf5,222,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_223_reg.hdf5,223,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_224_reg.hdf5,224,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_225_reg.hdf5,225,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_226_reg.hdf5,226,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_228_reg.hdf5,228,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_229_reg.hdf5,229,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_230_reg.hdf5,230,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_231_reg.hdf5,231,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_232_reg.hdf5,232,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_233_reg.hdf5,233,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_234_reg.hdf5,234,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_235_reg.hdf5,235,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_236_reg.hdf5,236,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_237_reg.hdf5,237,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_238_reg.hdf5,238,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_239_reg.hdf5,239,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_240_reg.hdf5,240,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_241_reg.hdf5,241,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_242_reg.hdf5,242,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_243_reg.hdf5,243,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_244_reg.hdf5,244,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_245_reg.hdf5,245,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_246_reg.hdf5,246,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_247_reg.hdf5,247,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_248_reg.hdf5,248,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_249_reg.hdf5,249,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_250_reg.hdf5,250,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_252_reg.hdf5,252,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_253_reg.hdf5,253,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_254_reg.hdf5,254,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_255_reg.hdf5,255,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_256_reg.hdf5,256,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_257_reg.hdf5,257,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_258_reg.hdf5,258,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_259_reg.hdf5,259,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_260_reg.hdf5,260,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_261_reg.hdf5,261,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_262_reg.hdf5,262,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_263_reg.hdf5,263,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_264_reg.hdf5,264,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_266_reg.hdf5,266,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_267_reg.hdf5,267,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_268_reg.hdf5,268,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_269_reg.hdf5,269,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_271_reg.hdf5,271,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_272_reg.hdf5,272,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_273_reg.hdf5,273,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_274_reg.hdf5,274,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_275_reg.hdf5,275,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_277_reg.hdf5,277,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_278_reg.hdf5,278,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_279_reg.hdf5,279,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_280_reg.hdf5,280,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_282_reg.hdf5,282,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_283_reg.hdf5,283,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_284_reg.hdf5,284,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_285_reg.hdf5,285,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_286_reg.hdf5,286,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_287_reg.hdf5,287,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_288_reg.hdf5,288,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_290_reg.hdf5,290,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_291_reg.hdf5,291,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_292_reg.hdf5,292,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_293_reg.hdf5,293,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_294_reg.hdf5,294,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_295_reg.hdf5,295,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_296_reg.hdf5,296,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_297_reg.hdf5,297,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_298_reg.hdf5,298,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_299_reg.hdf5,299,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_301_reg.hdf5,301,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_302_reg.hdf5,302,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_303_reg.hdf5,303,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_304_reg.hdf5,304,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_305_reg.hdf5,305,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_306_reg.hdf5,306,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_307_reg.hdf5,307,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_308_reg.hdf5,308,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_309_reg.hdf5,309,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_310_reg.hdf5,310,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_311_reg.hdf5,311,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_312_reg.hdf5,312,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_313_reg.hdf5,313,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_314_reg.hdf5,314,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_315_reg.hdf5,315,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_316_reg.hdf5,316,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_317_reg.hdf5,317,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_318_reg.hdf5,318,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_319_reg.hdf5,319,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_320_reg.hdf5,320,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_321_reg.hdf5,321,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_322_reg.hdf5,322,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_323_reg.hdf5,323,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_324_reg.hdf5,324,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_325_reg.hdf5,325,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_326_reg.hdf5,326,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_327_reg.hdf5,327,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_328_reg.hdf5,328,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_330_reg.hdf5,330,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_331_reg.hdf5,331,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_332_reg.hdf5,332,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_333_reg.hdf5,333,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_334_reg.hdf5,334,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_335_reg.hdf5,335,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_336_reg.hdf5,336,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_337_reg.hdf5,337,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_338_reg.hdf5,338,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_339_reg.hdf5,339,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_340_reg.hdf5,340,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_341_reg.hdf5,341,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_342_reg.hdf5,342,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_343_reg.hdf5,343,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_344_reg.hdf5,344,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_345_reg.hdf5,345,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_346_reg.hdf5,346,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_347_reg.hdf5,347,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_348_reg.hdf5,348,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_349_reg.hdf5,349,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_350_reg.hdf5,350,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_351_reg.hdf5,351,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_352_reg.hdf5,352,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_354_reg.hdf5,354,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_355_reg.hdf5,355,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_357_reg.hdf5,357,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_358_reg.hdf5,358,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_359_reg.hdf5,359,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_361_reg.hdf5,361,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_362_reg.hdf5,362,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_363_reg.hdf5,363,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_364_reg.hdf5,364,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_365_reg.hdf5,365,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_366_reg.hdf5,366,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_367_reg.hdf5,367,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_368_reg.hdf5,368,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_369_reg.hdf5,369,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_370_reg.hdf5,370,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_371_reg.hdf5,371,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_372_reg.hdf5,372,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_373_reg.hdf5,373,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_375_reg.hdf5,375,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_377_reg.hdf5,377,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_378_reg.hdf5,378,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_379_reg.hdf5,379,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_380_reg.hdf5,380,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_381_reg.hdf5,381,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_382_reg.hdf5,382,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_383_reg.hdf5,383,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_384_reg.hdf5,384,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_385_reg.hdf5,385,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_386_reg.hdf5,386,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_387_reg.hdf5,387,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_388_reg.hdf5,388,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_389_reg.hdf5,389,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_390_reg.hdf5,390,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_391_reg.hdf5,391,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_392_reg.hdf5,392,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_393_reg.hdf5,393,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_394_reg.hdf5,394,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_395_reg.hdf5,395,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_396_reg.hdf5,396,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_397_reg.hdf5,397,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_398_reg.hdf5,398,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_400_reg.hdf5,400,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_401_reg.hdf5,401,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_402_reg.hdf5,402,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_403_reg.hdf5,403,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_404_reg.hdf5,404,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_405_reg.hdf5,405,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_406_reg.hdf5,406,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_407_reg.hdf5,407,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_408_reg.hdf5,408,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_409_reg.hdf5,409,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_410_reg.hdf5,410,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_411_reg.hdf5,411,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_412_reg.hdf5,412,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_414_reg.hdf5,414,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_415_reg.hdf5,415,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_416_reg.hdf5,416,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_418_reg.hdf5,418,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_419_reg.hdf5,419,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_420_reg.hdf5,420,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_421_reg.hdf5,421,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_423_reg.hdf5,423,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_424_reg.hdf5,424,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_425_reg.hdf5,425,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_426_reg.hdf5,426,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_430_reg.hdf5,430,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_431_reg.hdf5,431,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_432_reg.hdf5,432,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_433_reg.hdf5,433,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_434_reg.hdf5,434,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_435_reg.hdf5,435,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_436_reg.hdf5,436,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_438_reg.hdf5,438,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_439_reg.hdf5,439,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_440_reg.hdf5,440,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_441_reg.hdf5,441,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_442_reg.hdf5,442,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_443_reg.hdf5,443,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_444_reg.hdf5,444,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_445_reg.hdf5,445,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_446_reg.hdf5,446,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_447_reg.hdf5,447,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_448_reg.hdf5,448,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_449_reg.hdf5,449,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_450_reg.hdf5,450,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_453_reg.hdf5,453,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_454_reg.hdf5,454,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_455_reg.hdf5,455,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_456_reg.hdf5,456,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_457_reg.hdf5,457,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_458_reg.hdf5,458,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_459_reg.hdf5,459,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_460_reg.hdf5,460,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_461_reg.hdf5,461,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_462_reg.hdf5,462,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_463_reg.hdf5,463,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_465_reg.hdf5,465,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_467_reg.hdf5,467,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_468_reg.hdf5,468,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_469_reg.hdf5,469,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_470_reg.hdf5,470,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_471_reg.hdf5,471,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_472_reg.hdf5,472,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_473_reg.hdf5,473,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_474_reg.hdf5,474,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_475_reg.hdf5,475,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_476_reg.hdf5,476,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_478_reg.hdf5,478,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_479_reg.hdf5,479,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_480_reg.hdf5,480,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_482_reg.hdf5,482,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_483_reg.hdf5,483,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_484_reg.hdf5,484,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_486_reg.hdf5,486,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_487_reg.hdf5,487,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_488_reg.hdf5,488,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_489_reg.hdf5,489,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_490_reg.hdf5,490,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_491_reg.hdf5,491,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_492_reg.hdf5,492,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_493_reg.hdf5,493,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_494_reg.hdf5,494,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_495_reg.hdf5,495,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_496_reg.hdf5,496,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_497_reg.hdf5,497,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_498_reg.hdf5,498,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_499_reg.hdf5,499,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall_20240716_1_500,fullwave_abdominal_wall_20240716_1_500_500_reg.hdf5,500,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_501_reg.hdf5,501,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_502_reg.hdf5,502,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_503_reg.hdf5,503,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_504_reg.hdf5,504,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_505_reg.hdf5,505,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_506_reg.hdf5,506,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_507_reg.hdf5,507,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_508_reg.hdf5,508,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_509_reg.hdf5,509,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_511_reg.hdf5,511,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_512_reg.hdf5,512,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_513_reg.hdf5,513,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_515_reg.hdf5,515,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_516_reg.hdf5,516,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_517_reg.hdf5,517,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_518_reg.hdf5,518,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_519_reg.hdf5,519,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_521_reg.hdf5,521,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_522_reg.hdf5,522,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_523_reg.hdf5,523,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_524_reg.hdf5,524,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_525_reg.hdf5,525,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_526_reg.hdf5,526,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_527_reg.hdf5,527,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_528_reg.hdf5,528,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_529_reg.hdf5,529,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_531_reg.hdf5,531,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_532_reg.hdf5,532,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_533_reg.hdf5,533,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_534_reg.hdf5,534,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_535_reg.hdf5,535,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_537_reg.hdf5,537,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_538_reg.hdf5,538,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_539_reg.hdf5,539,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_540_reg.hdf5,540,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_541_reg.hdf5,541,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_542_reg.hdf5,542,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_543_reg.hdf5,543,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_544_reg.hdf5,544,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_545_reg.hdf5,545,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_546_reg.hdf5,546,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_547_reg.hdf5,547,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_548_reg.hdf5,548,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_549_reg.hdf5,549,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_550_reg.hdf5,550,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_551_reg.hdf5,551,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_552_reg.hdf5,552,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_553_reg.hdf5,553,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_554_reg.hdf5,554,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_555_reg.hdf5,555,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_556_reg.hdf5,556,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_557_reg.hdf5,557,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_558_reg.hdf5,558,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_559_reg.hdf5,559,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_560_reg.hdf5,560,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_561_reg.hdf5,561,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_562_reg.hdf5,562,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_563_reg.hdf5,563,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_564_reg.hdf5,564,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_565_reg.hdf5,565,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_566_reg.hdf5,566,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_567_reg.hdf5,567,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_568_reg.hdf5,568,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_569_reg.hdf5,569,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_570_reg.hdf5,570,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_571_reg.hdf5,571,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_573_reg.hdf5,573,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_574_reg.hdf5,574,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_575_reg.hdf5,575,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_576_reg.hdf5,576,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_577_reg.hdf5,577,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_578_reg.hdf5,578,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_579_reg.hdf5,579,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_580_reg.hdf5,580,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_582_reg.hdf5,582,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_583_reg.hdf5,583,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_584_reg.hdf5,584,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_585_reg.hdf5,585,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_586_reg.hdf5,586,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_587_reg.hdf5,587,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_588_reg.hdf5,588,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_589_reg.hdf5,589,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_590_reg.hdf5,590,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_591_reg.hdf5,591,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_592_reg.hdf5,592,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_593_reg.hdf5,593,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_594_reg.hdf5,594,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_595_reg.hdf5,595,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_596_reg.hdf5,596,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_597_reg.hdf5,597,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_598_reg.hdf5,598,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_599_reg.hdf5,599,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_600_reg.hdf5,600,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_601_reg.hdf5,601,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_602_reg.hdf5,602,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_603_reg.hdf5,603,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_604_reg.hdf5,604,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_605_reg.hdf5,605,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_606_reg.hdf5,606,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_607_reg.hdf5,607,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_608_reg.hdf5,608,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_609_reg.hdf5,609,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_610_reg.hdf5,610,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_611_reg.hdf5,611,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_612_reg.hdf5,612,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_613_reg.hdf5,613,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_614_reg.hdf5,614,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_615_reg.hdf5,615,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_616_reg.hdf5,616,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_617_reg.hdf5,617,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_618_reg.hdf5,618,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_619_reg.hdf5,619,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_620_reg.hdf5,620,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_621_reg.hdf5,621,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_623_reg.hdf5,623,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_624_reg.hdf5,624,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_625_reg.hdf5,625,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_626_reg.hdf5,626,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_627_reg.hdf5,627,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_628_reg.hdf5,628,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_629_reg.hdf5,629,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_630_reg.hdf5,630,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_631_reg.hdf5,631,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_633_reg.hdf5,633,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_634_reg.hdf5,634,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_635_reg.hdf5,635,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_636_reg.hdf5,636,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_637_reg.hdf5,637,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_638_reg.hdf5,638,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_639_reg.hdf5,639,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_640_reg.hdf5,640,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_644_reg.hdf5,644,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_645_reg.hdf5,645,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_646_reg.hdf5,646,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_649_reg.hdf5,649,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_650_reg.hdf5,650,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_651_reg.hdf5,651,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_652_reg.hdf5,652,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_655_reg.hdf5,655,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_656_reg.hdf5,656,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_658_reg.hdf5,658,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_659_reg.hdf5,659,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_660_reg.hdf5,660,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_661_reg.hdf5,661,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_662_reg.hdf5,662,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_664_reg.hdf5,664,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_665_reg.hdf5,665,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_667_reg.hdf5,667,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_668_reg.hdf5,668,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_669_reg.hdf5,669,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_670_reg.hdf5,670,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_671_reg.hdf5,671,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_672_reg.hdf5,672,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_673_reg.hdf5,673,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_675_reg.hdf5,675,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_676_reg.hdf5,676,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_677_reg.hdf5,677,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_678_reg.hdf5,678,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_679_reg.hdf5,679,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_680_reg.hdf5,680,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_681_reg.hdf5,681,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_682_reg.hdf5,682,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_683_reg.hdf5,683,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_684_reg.hdf5,684,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_685_reg.hdf5,685,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_686_reg.hdf5,686,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_687_reg.hdf5,687,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_689_reg.hdf5,689,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_690_reg.hdf5,690,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_691_reg.hdf5,691,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_692_reg.hdf5,692,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_693_reg.hdf5,693,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_694_reg.hdf5,694,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_696_reg.hdf5,696,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_697_reg.hdf5,697,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_698_reg.hdf5,698,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_699_reg.hdf5,699,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_700_reg.hdf5,700,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_701_reg.hdf5,701,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_702_reg.hdf5,702,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_703_reg.hdf5,703,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_704_reg.hdf5,704,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_705_reg.hdf5,705,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_706_reg.hdf5,706,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_707_reg.hdf5,707,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_708_reg.hdf5,708,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_709_reg.hdf5,709,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_710_reg.hdf5,710,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_711_reg.hdf5,711,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_712_reg.hdf5,712,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_714_reg.hdf5,714,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_715_reg.hdf5,715,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_716_reg.hdf5,716,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_717_reg.hdf5,717,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_718_reg.hdf5,718,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_719_reg.hdf5,719,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_720_reg.hdf5,720,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_721_reg.hdf5,721,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_722_reg.hdf5,722,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_723_reg.hdf5,723,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_724_reg.hdf5,724,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_726_reg.hdf5,726,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_727_reg.hdf5,727,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_728_reg.hdf5,728,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_729_reg.hdf5,729,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_730_reg.hdf5,730,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_731_reg.hdf5,731,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_732_reg.hdf5,732,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_733_reg.hdf5,733,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_734_reg.hdf5,734,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_735_reg.hdf5,735,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_736_reg.hdf5,736,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_738_reg.hdf5,738,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_739_reg.hdf5,739,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_740_reg.hdf5,740,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_741_reg.hdf5,741,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_742_reg.hdf5,742,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_744_reg.hdf5,744,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_745_reg.hdf5,745,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_746_reg.hdf5,746,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_747_reg.hdf5,747,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_748_reg.hdf5,748,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_749_reg.hdf5,749,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_750_reg.hdf5,750,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_751_reg.hdf5,751,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_752_reg.hdf5,752,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_754_reg.hdf5,754,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_755_reg.hdf5,755,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_756_reg.hdf5,756,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_757_reg.hdf5,757,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_760_reg.hdf5,760,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_761_reg.hdf5,761,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_762_reg.hdf5,762,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_764_reg.hdf5,764,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_765_reg.hdf5,765,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_766_reg.hdf5,766,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_767_reg.hdf5,767,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_768_reg.hdf5,768,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_770_reg.hdf5,770,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_771_reg.hdf5,771,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_772_reg.hdf5,772,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_773_reg.hdf5,773,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_774_reg.hdf5,774,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_776_reg.hdf5,776,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_777_reg.hdf5,777,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_778_reg.hdf5,778,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_779_reg.hdf5,779,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_780_reg.hdf5,780,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_781_reg.hdf5,781,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_782_reg.hdf5,782,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_783_reg.hdf5,783,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_784_reg.hdf5,784,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_786_reg.hdf5,786,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_787_reg.hdf5,787,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_788_reg.hdf5,788,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_789_reg.hdf5,789,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_790_reg.hdf5,790,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_791_reg.hdf5,791,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_792_reg.hdf5,792,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_793_reg.hdf5,793,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_795_reg.hdf5,795,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_796_reg.hdf5,796,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_797_reg.hdf5,797,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_798_reg.hdf5,798,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_799_reg.hdf5,799,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_800_reg.hdf5,800,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_801_reg.hdf5,801,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_802_reg.hdf5,802,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_803_reg.hdf5,803,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_804_reg.hdf5,804,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_805_reg.hdf5,805,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_806_reg.hdf5,806,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_807_reg.hdf5,807,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_809_reg.hdf5,809,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_810_reg.hdf5,810,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_811_reg.hdf5,811,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_812_reg.hdf5,812,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_814_reg.hdf5,814,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_815_reg.hdf5,815,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_816_reg.hdf5,816,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_817_reg.hdf5,817,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_818_reg.hdf5,818,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_819_reg.hdf5,819,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_820_reg.hdf5,820,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_821_reg.hdf5,821,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_822_reg.hdf5,822,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_823_reg.hdf5,823,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_824_reg.hdf5,824,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_825_reg.hdf5,825,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_826_reg.hdf5,826,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_827_reg.hdf5,827,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_828_reg.hdf5,828,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_829_reg.hdf5,829,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_830_reg.hdf5,830,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_831_reg.hdf5,831,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_832_reg.hdf5,832,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_833_reg.hdf5,833,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_834_reg.hdf5,834,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_835_reg.hdf5,835,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_836_reg.hdf5,836,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_838_reg.hdf5,838,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_839_reg.hdf5,839,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_840_reg.hdf5,840,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_841_reg.hdf5,841,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_842_reg.hdf5,842,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_843_reg.hdf5,843,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_844_reg.hdf5,844,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_846_reg.hdf5,846,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_847_reg.hdf5,847,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_848_reg.hdf5,848,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_849_reg.hdf5,849,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_851_reg.hdf5,851,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_852_reg.hdf5,852,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_853_reg.hdf5,853,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_854_reg.hdf5,854,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_857_reg.hdf5,857,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_858_reg.hdf5,858,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_859_reg.hdf5,859,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_860_reg.hdf5,860,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_863_reg.hdf5,863,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_864_reg.hdf5,864,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_865_reg.hdf5,865,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_866_reg.hdf5,866,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_867_reg.hdf5,867,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_868_reg.hdf5,868,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_869_reg.hdf5,869,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_870_reg.hdf5,870,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_872_reg.hdf5,872,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_873_reg.hdf5,873,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_875_reg.hdf5,875,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_876_reg.hdf5,876,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_877_reg.hdf5,877,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_879_reg.hdf5,879,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_880_reg.hdf5,880,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_881_reg.hdf5,881,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_882_reg.hdf5,882,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_883_reg.hdf5,883,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_884_reg.hdf5,884,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_885_reg.hdf5,885,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_886_reg.hdf5,886,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_887_reg.hdf5,887,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_888_reg.hdf5,888,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_889_reg.hdf5,889,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_890_reg.hdf5,890,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_891_reg.hdf5,891,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_892_reg.hdf5,892,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_893_reg.hdf5,893,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_894_reg.hdf5,894,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_895_reg.hdf5,895,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_896_reg.hdf5,896,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_899_reg.hdf5,899,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_900_reg.hdf5,900,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_903_reg.hdf5,903,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_904_reg.hdf5,904,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_905_reg.hdf5,905,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_907_reg.hdf5,907,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_908_reg.hdf5,908,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_909_reg.hdf5,909,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_910_reg.hdf5,910,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_911_reg.hdf5,911,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_912_reg.hdf5,912,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_914_reg.hdf5,914,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_915_reg.hdf5,915,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_916_reg.hdf5,916,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_918_reg.hdf5,918,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_919_reg.hdf5,919,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_920_reg.hdf5,920,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_921_reg.hdf5,921,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_922_reg.hdf5,922,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_923_reg.hdf5,923,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_924_reg.hdf5,924,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_925_reg.hdf5,925,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_926_reg.hdf5,926,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_928_reg.hdf5,928,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_929_reg.hdf5,929,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_930_reg.hdf5,930,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_931_reg.hdf5,931,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_934_reg.hdf5,934,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_935_reg.hdf5,935,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_936_reg.hdf5,936,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_937_reg.hdf5,937,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_938_reg.hdf5,938,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_940_reg.hdf5,940,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_941_reg.hdf5,941,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_942_reg.hdf5,942,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_943_reg.hdf5,943,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_944_reg.hdf5,944,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_945_reg.hdf5,945,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_946_reg.hdf5,946,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_947_reg.hdf5,947,vishuman_abdwall_cropped_7left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_948_reg.hdf5,948,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_949_reg.hdf5,949,vishuman_abdwall_set_12,False,False,True,True,False,False,True,False,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_950_reg.hdf5,950,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_951_reg.hdf5,951,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_952_reg.hdf5,952,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_953_reg.hdf5,953,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_954_reg.hdf5,954,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_957_reg.hdf5,957,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_958_reg.hdf5,958,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_959_reg.hdf5,959,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_960_reg.hdf5,960,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_961_reg.hdf5,961,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_962_reg.hdf5,962,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_963_reg.hdf5,963,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_964_reg.hdf5,964,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_965_reg.hdf5,965,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_966_reg.hdf5,966,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_967_reg.hdf5,967,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_968_reg.hdf5,968,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_969_reg.hdf5,969,vishuman_abdwall_set_07,False,True,False,False,True,True,False,True,False,True,False,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_970_reg.hdf5,970,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_972_reg.hdf5,972,vishuman_abdominal_cropped,False,True,False,True,False,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_973_reg.hdf5,973,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_974_reg.hdf5,974,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_975_reg.hdf5,975,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_976_reg.hdf5,976,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_977_reg.hdf5,977,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_978_reg.hdf5,978,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_979_reg.hdf5,979,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_980_reg.hdf5,980,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_981_reg.hdf5,981,vishuman_abdwall_set_10,False,False,True,True,False,True,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_982_reg.hdf5,982,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_983_reg.hdf5,983,vishuman_abdwall_cropped_7-153s,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_984_reg.hdf5,984,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_985_reg.hdf5,985,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_986_reg.hdf5,986,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_987_reg.hdf5,987,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_989_reg.hdf5,989,vishuman_abdwall_set_04,False,True,False,False,True,True,False,True,False,False,True,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_990_reg.hdf5,990,vishuman_abdwall_set_05,False,True,False,False,True,True,False,True,False,False,True,False,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_991_reg.hdf5,991,vishuman_abdwall_cropped_5left153s,False,True,False,False,True,True,False,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_993_reg.hdf5,993,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_994_reg.hdf5,994,vishuman_abdwall_cropped_6left153s,False,True,False,False,True,True,False,True,False,False,True,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_995_reg.hdf5,995,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_996_reg.hdf5,996,vishuman_abdwall_set_11,False,False,True,True,False,False,False,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_998_reg.hdf5,998,vishuman_abdwall_set_06,False,True,False,False,True,True,False,True,False,False,False,False,True
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_999_reg.hdf5,999,vishuman_abdwall_153_h,False,False,True,True,False,False,True,False,True,True,False,True,False
+fullwave_abdominal_wall_20240728_501_1000,fullwave_abdominal_wall_20240728_501_1000_1000_reg.hdf5,1000,vishuman_abdwall_set_13,False,False,True,True,False,False,True,True,False,True,False,True,False
diff --git a/datasets/unc-liver/assets/main.png b/datasets/unc-liver/assets/main.png
new file mode 100644
index 0000000..df6eb1a
Binary files /dev/null and b/datasets/unc-liver/assets/main.png differ
diff --git a/datasets/unc-liver/reconstruct.py b/datasets/unc-liver/reconstruct.py
index 2488ab4..fe00012 100644
--- a/datasets/unc-liver/reconstruct.py
+++ b/datasets/unc-liver/reconstruct.py
@@ -18,8 +18,6 @@
python reconstruct.py
"""
-from __future__ import annotations
-
import os
os.environ.setdefault("KERAS_BACKEND", "jax")
@@ -51,7 +49,7 @@
# local path to run against your own copy.
ZEA_FILE = "hf://nvidia/OpenH-RF/unc-liver/data/fullwave_abdominal_wall_1283_reg.hdf5"
FRAME = 0
-OUT = Path("bmode.png")
+OUT = HERE / "assets" / "bmode.png"
SOS_MAP = False # Also plot the ground-truth sos_map next to the B-mode (2 subplots)
@@ -141,7 +139,13 @@ def main() -> None:
fig, (ax_bmode, ax_sos) = plt.subplots(1, 2, figsize=(12, 7))
- im_bmode = ax_bmode.imshow(bmode, cmap="gray", vmin=-60, vmax=0, extent=extent)
+ im_bmode = ax_bmode.imshow(
+ bmode,
+ cmap="gray",
+ vmin=params.dynamic_range[0],
+ vmax=params.dynamic_range[1],
+ extent=extent,
+ )
ax_bmode.set_aspect("equal")
ax_bmode.set_title(f"B-mode (DAS), frame {FRAME}")
ax_bmode.set_xlabel("Lateral position [mm]")
@@ -158,7 +162,13 @@ def main() -> None:
fig.colorbar(im_sos, cax=cax_sos, label="m/s")
else:
fig, ax = plt.subplots(figsize=(6.5, 7))
- im = ax.imshow(bmode, cmap="gray", vmin=-60, vmax=0, extent=extent)
+ im = ax.imshow(
+ bmode,
+ cmap="gray",
+ vmin=params.dynamic_range[0],
+ vmax=params.dynamic_range[1],
+ extent=extent,
+ )
ax.set_aspect("equal")
ax.set_title(f"Fullwave abdominal wall B-mode (DAS), frame {FRAME}")
ax.set_xlabel("Lateral position [mm]")
@@ -167,6 +177,7 @@ def main() -> None:
fig.colorbar(im, cax=cax, label="dB")
fig.tight_layout()
+ Path(OUT).parent.mkdir(parents=True, exist_ok=True)
fig.savefig(OUT, dpi=150, bbox_inches="tight")
print(f"Saved reconstruction to {OUT}")
diff --git a/datasets/unc-openpros/README.md b/datasets/unc-openpros/README.md
index 9020a8c..ab6bc7b 100644
--- a/datasets/unc-openpros/README.md
+++ b/datasets/unc-openpros/README.md
@@ -1,15 +1,57 @@
+---
+name: unc-openpros
+pretty_name: "OpenPros Limited-View Prostate USCT"
+license: cc-by-4.0
+task_categories:
+ - image-to-image
+tags:
+ - ultrasound
+ - rf
+ - openh-rf
+ - prostate
+ - usct
+ - speed-of-sound
+ - full-waveform-inversion
+ - simulation
+language:
+ - en
+size_categories:
+ - 100K
+
+
+
+*Speed of sound predicted from the limited-view waveform data of the first acquisition in [`data/3_01_P_prostate_00.hdf5`](https://huggingface.co/datasets/nvidia/OpenH-RF/blob/main/unc-openpros/data/3_01_P_prostate_00.hdf5) with the pretrained OpenPros InversionNet.*
+
## Dataset Description
[OpenPros](https://open-pros.github.io/) is a large-scale benchmark for limited-view prostate ultrasound computed tomography (USCT). Each example pairs simulated full-waveform RF data from transabdominal and transrectal acquisition paths with an anatomically realistic two-dimensional speed-of-sound (SOS) map. The source OpenPros phantoms are derived from expert-annotated clinical MRI/CT anatomy and experimental measurements of ex vivo prostate specimens; the RF measurements in this package are simulated rather than acquired in vivo. The intended research task is quantitative SOS reconstruction from limited-angle ultrasound data.
## Dataset Contributor(s)
-OpenPros was created by Hanchen Wang, Yixuan Wu, Yinan Feng, Peng Jin, Luoyuan Zhang, Shihang Feng, James Wiskin, Baris Turkbey, Peter A. Pinto, Bradford J. Wood, Songting Luo, Yinpeng Chen, Emad Boctor, and Youzuo Lin. The affiliations include the University of North Carolina at Chapel Hill, Johns Hopkins University, the National Institutes of Health, the Pennsylvania State University, QT Imaging, Iowa State University, and Google DeepMind.
-- **Corresponding author:** Youzuo Lin (`yzlin@unc.edu`)
-- **Source repository:**
-- **Dataset website:**
+OpenPros was created by:
+
+- Hanchen Wang
+- Yixuan Wu
+- Yinan Feng
+- Peng Jin
+- Luoyuan Zhang
+- Shihang Feng
+- James Wiskin
+- Baris Turkbey
+- Peter A. Pinto
+- Bradford J. Wood
+- Songting Luo
+- Yinpeng Chen
+- Emad Boctor
+- Youzuo Lin (corresponding author)
+
+The affiliations include the University of North Carolina at Chapel Hill, Johns Hopkins University, the National Institutes of Health, the Pennsylvania State University, QT Imaging, Iowa State University, and Google DeepMind. Source repository: ; dataset website: .
## Dataset Creation Date
@@ -17,7 +59,9 @@ OpenPros was created by Hanchen Wang, Yixuan Wu, Yinan Feng, Peng Jin, Luoyuan Z
## License / Terms of Use
-[Creative Commons Attribution 4.0 International license (CC-BY 4.0)](https://creativecommons.org/licenses/by/4.0/)
+[Creative Commons Attribution 4.0 International (CC BY 4.0)](https://creativecommons.org/licenses/by/4.0/legalcode.en). Retain attribution and identify modifications when reusing the data.
+
+The original license was [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0)](https://creativecommons.org/licenses/by-nc-sa/4.0/). The conversion of the license is under agreement of all the contributors.
## Intended Usage
@@ -37,9 +81,19 @@ OpenPros was created by Hanchen Wang, Yixuan Wu, Yinan Feng, Peng Jin, Luoyuan Z
- **Sampling:** 10 MHz (`dt = 1e-7 s`), 1,000 samples, or 100 microseconds per waveform.
- **Image grid:** 401 axial by 161 lateral samples at 0.375 mm spacing, covering approximately 150 mm by 60 mm.
+## Processing the Dataset
+
+The acquisitions can be processed with the `reconstruct.py` [script](https://github.com/open-h/OpenH-RF/blob/main/datasets/unc-openpros/reconstruct.py) as provided in the [OpenH-RF GitHub repository](https://github.com/open-h/OpenH-RF), together with the `pipeline.yaml` definition in this folder and the [zea library](https://github.com/tue-bmd/zea). The script streams the data from the Hugging Face Hub.
+
+The reconstruction script checks the input shapes and writes two files: `pred_sos.png`, a side-by-side comparison of the predicted and ground-truth SOS maps, and [`assets/main.png`](assets/main.png), a clean, unlabeled hero image of just the prediction.
+
+The custom pipeline operations live in `custom_ops.py` (layout and preprocessing) and `network_ops.py` (runs the pretrained InversionNet from `zea.models.inversionnet`, weights downloaded from the Hugging Face Hub) next to the script.
+
## Dataset Format
-The package uses the `zea` HDF5 format. Run [`convert.py`](convert.py) to create `openpros_sample.hdf5` from the original OpenPros NumPy arrays. The converter does not demodulate, decimate, filter, or normalize the RF values. It adds a singleton channel dimension and changes the original four 10-transmit blocks into a physical `20 transmits × 322 receivers` representation:
+[zea v0.1.5](https://github.com/tue-bmd/zea)
+
+The package uses the `zea` HDF5 format. The RF values are carried over from the original OpenPros NumPy arrays without demodulation, decimation, filtering, or normalization. The conversion adds a singleton channel dimension and changes the original four 10-transmit blocks into a physical `20 transmits × 322 receivers` representation:
| HDF5 region | Source side | Receiver side | Original transmit channels |
|---|---|---|---|
@@ -54,25 +108,21 @@ The file also stores source positions, probe geometry, scan parameters, subject
**Current OpenH-RF release:** 248 HDF5 files; 6.03 TB (6,031,699,279,872 bytes) stored; root `zea_version` **0.1.5**. Sizes include all HDF5 contents and use decimal units (MB = 10^6 bytes, GB = 10^9 bytes, TB = 10^12 bytes), not decoded-array memory or original-source download sizes.
-The original OpenPros source documentation reports 280,000 paired samples (approximately 6.8 TB) with an official split of 224,000 training, 28,000 validation, and 28,000 test samples. It is derived from four patient-level clinical anatomies and 62 ex vivo prostate specimens. Each source NumPy file used here contains 1,140 examples.
-
-By default, `flag_single_sample = True` in `convert.py`, so the original converter example `openpros_sample.hdf5` contains only the first example (not the full HF release) and is approximately 20.5 MiB. Set the flag to `False` to convert all 1,140 examples in the selected source pair.
+The original OpenPros source documentation reports 280,000 paired samples (approximately 6.8 TB) with an official split of 224,000 training, 28,000 validation, and 28,000 test samples. It is derived from four patient-level clinical anatomies and 62 ex vivo prostate specimens. Each published HDF5 file here holds 1,140 acquisitions.
-| Field | Shape in default sample | dtype | Units | Description |
+| Field | Shape per file | dtype | Units | Description |
|---|---|---|---|---|
-| `raw_data` | `(1, 20, 1000, 322, 1)` | float32 | — | Simulated full-waveform pressure/RF data |
-| `sos_map.values` | `(1, 401, 161, 1)` | float32 | m/s | Ground-truth speed-of-sound map |
+| `raw_data` | `(1140, 20, 1000, 322, 1)` | float32 | — | Simulated full-waveform pressure/RF data |
+| `sos_map.values` | `(1140, 401, 161, 1)` | float32 | m/s | Ground-truth speed-of-sound map |
| `sos_map.coordinates` | `(401, 161, 3)` | float32 | m | Cartesian `(x, y, z)` grid coordinates |
-The leading dimension becomes `1140` when the complete selected source pair is converted.
-
## Subject Metadata
The converted release identifies its content as a simulation and stores composite subject IDs such as `1_prostate_00`, combining patient-level anatomy `3_01` with prostate-level index `prostate_00`. The release uses four patient-level anatomy IDs (`3_01` through `3_04`) and 62 prostate indices shared across acquisition positions.
## Data Validation
-[`reconstruct.py`](reconstruct.py) defines a `zea.Pipeline` that reproduces the OpenPros InversionNet preprocessing and postprocessing:
+`reconstruct.py` loads [`pipeline.yaml`](pipeline.yaml) (also published on the Hub at [`hf://nvidia/OpenH-RF/unc-openpros/pipeline.yaml`](https://huggingface.co/datasets/nvidia/OpenH-RF/blob/main/unc-openpros/pipeline.yaml)), a `zea.Pipeline` that reproduces the OpenPros InversionNet preprocessing and postprocessing:
1. Restore the original acquisition-block order: body/body, body/rectum, rectum/rectum, and rectum/body.
2. Apply the sign-preserving logarithmic transform `sign(x) * log1p(abs(1e5 * x))`.
@@ -80,20 +130,23 @@ The converted release identifies its content as a simulation and stores composit
4. Run the pretrained InversionNet model.
5. Denormalize its output from `[-1, 1]` to the physical SOS range `1300–3600 m/s`.
-Run the end-to-end example with:
-
-```bash
-python convert.py
-python reconstruct.py
-```
-
-The reconstruction script checks the input shapes and writes `pred_sos.png`, a side-by-side comparison of the predicted and ground-truth SOS maps. Use `--write_config` to serialize the pipeline to `pipeline.yaml`, `--load_config` to restore it, and `--use_zea_vis_style` to apply the ZEA plotting style.
-
## Known Issues
- `focus_distances`, `t0_delays`, `tx_apodizations`, and related transmit fields are compatibility placeholders because the simulation uses external point sources rather than a conventional focused array transmission.
-
## Ethical Considerations
The packaged RF data and SOS labels are simulated and contain no directly identifying patient information.
+
+## Citation
+
+```bibtex
+@inproceedings{wang2026openpros,
+ title={Openpros: A large-scale dataset for limited view prostate ultrasound computed tomography},
+ author={Wang, Hanchen and Wu, Yixuan and Feng, Yinan and Jin, Peng and Zhang, Luoyuan and Feng, Shihang and Wiskin, James and Turkbey, Baris and Pinto, Peter and Wood, Bradford and others},
+ booktitle={International Conference on Learning Representations},
+ volume={2026},
+ pages={113741--113759},
+ year={2026}
+}
+```
\ No newline at end of file
diff --git a/datasets/unc-openpros/assets/comparison.png b/datasets/unc-openpros/assets/comparison.png
new file mode 100644
index 0000000..27ebeb7
Binary files /dev/null and b/datasets/unc-openpros/assets/comparison.png differ
diff --git a/datasets/unc-openpros/assets/main.png b/datasets/unc-openpros/assets/main.png
new file mode 100644
index 0000000..58fa31c
Binary files /dev/null and b/datasets/unc-openpros/assets/main.png differ
diff --git a/datasets/unc-openpros/custom_ops.py b/datasets/unc-openpros/custom_ops.py
index bd9d660..4023872 100644
--- a/datasets/unc-openpros/custom_ops.py
+++ b/datasets/unc-openpros/custom_ops.py
@@ -10,7 +10,7 @@
# only once this module is imported. See https://github.com/open-h/OpenH-RF
@ops_registry("openpros.custom_ops.MyRearrange")
class MyRearrange(Operation):
- """Invert the ``data`` to ``raw_data`` conversion in ``convert.py``."""
+ """Restore the original OpenPros ``data`` layout from the stored ``raw_data``."""
def __init__(self, **kwargs):
super().__init__(**kwargs)
diff --git a/datasets/unc-openpros/reconstruct.py b/datasets/unc-openpros/reconstruct.py
index 2039b3e..0c1d857 100644
--- a/datasets/unc-openpros/reconstruct.py
+++ b/datasets/unc-openpros/reconstruct.py
@@ -8,9 +8,11 @@
The waveform data are converted back to the tensor layout used by the OpenPros
models and given the same signed-log and min-max preprocessing as the official
-OpenPros implementation. The network's normalized prediction is mapped back to
-the physical speed-of-sound range (1300--3600 m/s) and plotted next to the
-ground-truth map.
+OpenPros implementation, as defined in ``pipeline.yaml`` (loaded straight from
+the Hub). The network's normalized prediction is mapped back to the physical
+speed-of-sound range (1300--3600 m/s), then saved two ways: a side-by-side
+comparison against the ground truth (``pred_sos.png``) and a clean, unlabeled
+hero image of just the prediction (``assets/main.png``).
Requires zea>=0.1.6 (https://github.com/tue-bmd/zea), the library that does the
ultrasound processing here, together with one of its Keras backends (JAX,
@@ -28,35 +30,38 @@
from pathlib import Path
+import custom_ops # noqa: F401 - registers MyRearrange/LogTransform with zea's ops_registry
import keras
import matplotlib.pyplot as plt
+import network_ops # noqa: F401 - registers InversionNetInference with zea's ops_registry
import zea
-from custom_ops import LogTransform, MyRearrange
from mpl_toolkits.axes_grid1 import make_axes_locatable
-from network_ops import InversionNetInference
from zea import Config, File, Pipeline
-from zea.ops import Normalize
HERE = Path(__file__).parent
-INPUT = "hf://nvidia/OpenH-RF/unc-openpros/data/3_04_P_prostate_51.hdf5"
-CONFIG = HERE / "pipeline.yaml"
-OUTPUT = HERE / "pred_sos.png"
+OUT = HERE / "assets" / "comparison.png"
+MAIN_OUTPUT = HERE / "assets" / "main.png"
# --- Inputs -----------------------------------------------------------------
# Defaults stream straight from the published corpus. Swap any of these for a
# local path to run against your own copy.
-WRITE_CONFIG = False # Write the pipeline and parameters to a YAML config file
-LOAD_CONFIG = False # Load the pipeline and parameters from a YAML config file
+ZEA_FILE = "hf://nvidia/OpenH-RF/unc-openpros/data/3_01_P_prostate_00.hdf5"
+CONFIG = "hf://nvidia/OpenH-RF/unc-openpros/pipeline.yaml"
# The file holds 1140 acquisitions; the figure shows the first.
SAMPLES = 1 # acquisitions to run through the network
+SOS_CMAP = "turbo" # high-contrast, multi-hue colormap for the SOS maps
+SOS_RANGE = (1300, 1700) # physical speed-of-sound range, m/s
-def plot_comparison(sos, pred, path):
+
+def plot_comparison(sos, pred, path: Path) -> None:
+ """Side-by-side ground-truth vs. predicted SOS maps, for validation."""
zea.visualize.set_mpl_style()
- _, ax = plt.subplots(1, 2, figsize=(7, 6))
- im = ax[0].imshow(sos[0, :, :, 0], cmap="gray", vmin=1300, vmax=1700)
+ pred = keras.ops.convert_to_numpy(pred)
+ fig, ax = plt.subplots(1, 2, figsize=(7, 6))
+ ax[0].imshow(sos[0, :, :, 0], cmap=SOS_CMAP, vmin=SOS_RANGE[0], vmax=SOS_RANGE[1])
ax[0].set_title("Ground Truth SOS Map")
- ax[1].imshow(keras.ops.convert_to_numpy(pred)[0, :, :, 0], cmap="gray", vmin=1300, vmax=1700)
+ im = ax[1].imshow(pred[0, :, :, 0], cmap=SOS_CMAP, vmin=SOS_RANGE[0], vmax=SOS_RANGE[1])
ax[1].set_title("Predicted SOS Map")
for axis in ax:
axis.set_xlabel("X (mm)")
@@ -65,41 +70,31 @@ def plot_comparison(sos, pred, path):
ax[0].set_yticks(range(0, 401, 80), labels=range(0, 151, 30))
ax[1].set_yticks(range(0, 401, 80), [])
cax = make_axes_locatable(ax[1]).append_axes("right", size="5%", pad=0.05)
- plt.gcf().colorbar(im, cax=cax, orientation="vertical", label="SOS (m/s)")
- plt.savefig(path, dpi=300, bbox_inches="tight")
- plt.close()
+ fig.colorbar(im, cax=cax, orientation="vertical", label="SOS (m/s)")
+ fig.savefig(path, dpi=300, bbox_inches="tight")
+ plt.close(fig)
+
+
+def plot_main(pred, path: Path) -> None:
+ """Clean hero image: just the predicted SOS map, no axes/title/colorbar."""
+ path.parent.mkdir(parents=True, exist_ok=True)
+ image = keras.ops.convert_to_numpy(pred)[0, :, :, 0]
+ height, width = image.shape
+ fig = plt.figure(figsize=(width / 100, height / 100), dpi=200)
+ ax = fig.add_axes([0, 0, 1, 1])
+ ax.imshow(image, cmap=SOS_CMAP, vmin=SOS_RANGE[0], vmax=SOS_RANGE[1])
+ ax.axis("off")
+ fig.savefig(path, dpi=200)
+ plt.close(fig)
def main():
zea.init_device(verbose=False)
- if LOAD_CONFIG:
- config = Config.from_path(str(CONFIG))
- pipeline = Pipeline.from_config(config)
- else:
- # Match the official OpenPros inference preprocessing and postprocessing:
- # restore the original four acquisition blocks (SS, SR, RR, RS), apply
- # the sign-preserving log1p transform with k=1e5, and min-max normalize
- # its configured data range to [-1, 1]. After network inference, undo
- # the label normalization by mapping the prediction from [-1, 1] to the
- # physical SOS range of 1300--3600 m/s.
- pipeline = Pipeline(
- operations=[
- MyRearrange(), # rearrange data to the layout expected by the network
- LogTransform(data_min=-0.25, data_max=0.45, k=1e5),
- Normalize(output_range=(-1, 1)),
- InversionNetInference(preset="inversionnet-openpros"),
- Normalize(input_range=(-1, 1), output_range=(1300, 3600)),
- ]
- )
-
- if WRITE_CONFIG:
- config = pipeline.to_config()
- print(config)
- config.to_yaml(str(CONFIG))
- print(f"Wrote pipeline and parameters to {CONFIG}")
-
- with File(INPUT) as f:
+ config = Config.from_path(str(CONFIG))
+ pipeline = Pipeline.from_config(config)
+
+ with File(ZEA_FILE) as f:
raw = f.data.raw_data[:SAMPLES]
sos = f.data.sos_map.values[:SAMPLES] # gt
@@ -107,8 +102,12 @@ def main():
print(f"ground truth shape: {sos.shape}")
outputs = pipeline(data=raw)["data"]
print(f"reconstructed shape: {outputs.shape}")
- plot_comparison(sos, outputs, OUTPUT)
- print(f"Saved comparison plot: {OUTPUT}")
+
+ plot_comparison(sos, outputs, OUT)
+ print(f"Saved comparison plot: {OUT}")
+
+ plot_main(outputs, MAIN_OUTPUT)
+ print(f"Saved hero image: {MAIN_OUTPUT}")
if __name__ == "__main__":
diff --git a/datasets/us4us/README.md b/datasets/us4us/README.md
index 0f4b9cd..435ba6d 100644
--- a/datasets/us4us/README.md
+++ b/datasets/us4us/README.md
@@ -1,5 +1,6 @@
---
-pretty_name: "OpenH-RF — us4us Ring-Array USCT (forearm, breast phantom, water)"
+name: us4us
+pretty_name: "us4us Ring-Array USCT (forearm, breast phantom, water)"
license: cc-by-4.0
task_categories:
- other
@@ -19,6 +20,12 @@ size_categories:
- n<1K
---
+# us4us Ring-Array USCT
+
+
+
+*A left-forearm cross-section, slice 8 of [`data/s1_l.hdf5`](https://huggingface.co/datasets/nvidia/OpenH-RF/blob/main/us4us/data/s1_l.hdf5), reconstructed beside the sinogram and reference image stored in the file.*
+
## Dataset Description
Raw RF data acquired with the us4us Ltd. us4R system and a Draminski ring probe.
@@ -33,33 +40,33 @@ The forearm and phantom acquisitions comprise consecutive slices spaced 9 mm apa
Each slice was recorded using 1024 subsequent single-element transmissions, and received by a 512-element aperture located opposite the transmitting element.
+## Dataset Contributor(s)
-## Dataset Contributors
-PI: Ziemowit Klimonda
-
-Team: Piotr Jarosik, Jakub Rozbicki, Piotr Karwat, Marcin Lewandowski (all @ us4us Ltd. (https://us4us.eu/))
-
+- Ziemowit Klimonda (PI)
+- Piotr Jarosik
+- Jakub Rozbicki
+- Piotr Karwat
+- Marcin Lewandowski
+- us4us Ltd. (https://us4us.eu/)
## Dataset Creation Date
09/07/2026
+## License / Terms of Use
-## License
-CC BY 4.0
-
+[Creative Commons Attribution 4.0 International (CC BY 4.0)](https://creativecommons.org/licenses/by/4.0/legalcode.en). Retain attribution and identify modifications when reusing the data.
## Intended Usage
Ultrasound computed tomography image reconstruction.
-
## Dataset Characterization
* Data Collection Method: phantom, healthy adult human volunteers.
* Labeling Method: N/A.
- * Acquisition system:
+ * Acquisition system:
- ring probe:
- probe radius: 130mm,
- - number of elements: 1024,
- - center frequency: 2MHz,
+ - number of elements: 1024,
+ - center frequency: 2MHz,
- sampling rate: 8125000.0,
- us4R research system + host PC,
- custom positioning system for subject spatial control.
@@ -70,34 +77,38 @@ Ultrasound computed tomography image reconstruction.
- for each transmission, the center of the receiving aperture was positioned on the opposite side of the probe relative to the transmitting element,
- for example, for the 0th transmission, the 0th probe element transmitted, and the receiving aperture consisted of probe elements 256–767.
+## Processing the Dataset
+
+The acquisitions can be processed with the `reconstruct.py` [script](https://github.com/open-h/OpenH-RF/blob/main/datasets/us4us/reconstruct.py) as provided in the [OpenH-RF GitHub repository](https://github.com/open-h/OpenH-RF), together with the `pipeline.yaml` definition in this folder and the [zea library](https://github.com/tue-bmd/zea). The script streams the data from the Hugging Face Hub.
+
+The script rebuilds the attenuation sinogram and filtered-backprojection image from `data/raw_data` and plots them beside the versions stored in the file. Set `ZEA_FILE` and `FRAME` (the slice) at the top of the script.
+
## Dataset Format
-All sub-datasets are provided in the ZEA file format.
-No preprocessing was performed on the raw channel data.
+[zea v0.1.6](https://github.com/tue-bmd/zea)
+
+All sub-datasets are provided in the ZEA file format. No preprocessing was performed on the raw channel data.
## Dataset Quantification
**Current OpenH-RF release:** 18 HDF5 files; 32.66 GB (32,658,423,808 bytes) stored; root `zea_version` **0.1.6**. Sizes include all HDF5 contents and use decimal units (MB = 10^6 bytes, GB = 10^9 bytes, TB = 10^12 bytes), not decoded-array memory or original-source download sizes.
- * Each HDF5 file contains 10 slices of the subject, except `reference_water.hdf5`, which contains a single slice.
+ * Each forearm HDF5 file contains 10 slices of the subject; `yezitronix-b-rg-1.2.hdf5` contains 11 and `reference_water.hdf5` a single slice.
* Stored HDF5 file sizes vary: 1.89 GB to 1.95 GB excluding the water reference. `reference_water.hdf5` is 183,107,584 bytes (183.11 MB).
-
## Subject Metadata
The dataset contains data from:
* breast phantom Yezitronix B-RG-1.2,
* both forearms of 8 healthy human volunteers (2 females and 6 males, age range [20, 55]),
* water only (reference data).
-
## Data Validation
- * The data files contain attenuation sinograms and images reconstructed from raw data using the filtered backprojection algorithm.
+* The data files contain attenuation sinograms and images reconstructed from raw data using the filtered backprojection algorithm.
+ * `reconstruct.py` rebuilds both from `data/raw_data` and plots them beside the stored versions (see *Processing the Dataset*).
## Known Issues
* The following probe elements should be considered damaged: [367, 409, 457, 764, 775, 776, 368, 390, 470, 739, 792].
-
## Ethical Considerations
* All human subjects were healthy adults who voluntarily participated in the measurements.
-
diff --git a/datasets/us4us/assets/main.png b/datasets/us4us/assets/main.png
new file mode 100644
index 0000000..133beb7
Binary files /dev/null and b/datasets/us4us/assets/main.png differ
diff --git a/datasets/us4us/assets/s1_l_reconstruct.png b/datasets/us4us/assets/s1_l_reconstruct.png
new file mode 100644
index 0000000..9eaa20f
Binary files /dev/null and b/datasets/us4us/assets/s1_l_reconstruct.png differ
diff --git a/datasets/us4us/reconstruct.py b/datasets/us4us/reconstruct.py
index 65fb20a..eed324d 100644
--- a/datasets/us4us/reconstruct.py
+++ b/datasets/us4us/reconstruct.py
@@ -59,8 +59,8 @@
# --- Inputs -----------------------------------------------------------------
# Defaults stream straight from the published corpus. Swap any of these for a
# local path to run against your own copy.
-INPUT = "hf://nvidia/OpenH-RF/us4us/data/reference_water.hdf5"
-FRAME = 0
+ZEA_FILE = "hf://nvidia/OpenH-RF/us4us/data/s1_l.hdf5"
+FRAME = 8 # slice index within the acquisition (10 slices, 9 mm apart)
APERTURE_OFFSET_2 = APERTURE_OFFSET
PROBE_RADIUS_2 = PROBE_RADIUS # ring radius in metres
SMOOTH_SIGMA = 1.0 # post-FBP Gaussian smoothing
@@ -295,15 +295,15 @@ def validate_geometry(rf, tx_position, rx_positions, sound_speed, initial_time,
def main():
- input_path = str(INPUT)
+ input_path = str(ZEA_FILE)
if "://" not in input_path:
candidate = Path(input_path)
if not candidate.is_absolute():
candidate = HERE / candidate
if not candidate.exists():
- raise FileNotFoundError(f"{INPUT} not found (looked in cwd and {HERE}).")
+ raise FileNotFoundError(f"{ZEA_FILE} not found (looked in cwd and {HERE}).")
input_path = str(candidate)
- output_path = HERE / f"{Path(input_path).stem}_reconstruct.png"
+ output_path = HERE / "assets" / f"{Path(input_path).stem}_reconstruct.png"
# Build with every parameter explicit, save to pipeline.yaml, then reload and
# run from that file - so the YAML alone fully describes the reconstruction.
@@ -421,6 +421,7 @@ def main():
fig.suptitle(f"{Path(input_path).name} — frame {FRAME}")
fig.tight_layout()
+ Path(output_path).parent.mkdir(parents=True, exist_ok=True)
plt.savefig(str(output_path), bbox_inches="tight", dpi=100)
print(f"Reconstructed : {recon.shape}")
diff --git a/datasets/vanderbilt/README.md b/datasets/vanderbilt/README.md
index c0d11bb..48fbb0a 100644
--- a/datasets/vanderbilt/README.md
+++ b/datasets/vanderbilt/README.md
@@ -1,5 +1,6 @@
---
-pretty_name: "OpenH-RF — Vanderbilt / Multi-Frame Focused Transmit Echocardiography Channel Dataset"
+name: vanderbilt
+pretty_name: "Vanderbilt / Multi-Frame Focused Transmit Echocardiography Channel Dataset"
license: cc-by-4.0
task_categories:
- image-reconstruction
@@ -17,16 +18,25 @@ size_categories:
- n<1K
---
-# Multi-Frame Focused Transmit Echocardiography Channel Dataset
+# Vanderbilt Multi-Frame Focused Transmit Echocardiography Channel Dataset
+
+
+
+*One cineloop of a fundamental focused-transmit acquisition, [`data/Fundamental/118420_1_Focused_Uncoded_TX.hdf5`](https://huggingface.co/datasets/nvidia/OpenH-RF/blob/main/vanderbilt/data/Fundamental/118420_1_Focused_Uncoded_TX.hdf5).*
## Dataset Description
This multi-frame focused transmit echocardiography channel dataset contains over 2000 frames of fundamental and harmonic data acquired with the P4-2v probe on a Verasonics Vantage 128. This dataset was originally acquired to visualize the left atrial appendage in patients following transesophageal echocardiography. Some patients have atrial fibrillation, which can cause blood clots to form in the appendage.
+Each dataset follows the naming convention of `subject_id`_`view_number`_`sequence_type`. `subject_id` is a six-digit random number. `view_number` distinguishes between multiple views acquired on the same subject. `sequence_type` is either Focused_Uncoded_TX or Harmonic_Focused_Uncoded_TX.
+
## Dataset Contributor(s)
-Brett Byram (PI), Christopher Khan, Ying-Chun (Preston) Pan, Zoe Marshall
-Vanderbilt University
+- Brett Byram (PI)
+- Christopher Khan
+- Ying-Chun (Preston) Pan
+- Zoe Marshall
+- Vanderbilt University
## Dataset Creation Date
@@ -34,7 +44,7 @@ Vanderbilt University
## License / Terms of Use
-CC BY 4.0.
+[Creative Commons Attribution 4.0 International (CC BY 4.0)](https://creativecommons.org/licenses/by/4.0/legalcode.en). Retain attribution and identify modifications when reusing the data.
## Intended Usage
@@ -48,8 +58,27 @@ This dataset could be useful for training a domain-adaptive network, as it captu
- **Frame rate:** Fundamental: 25 Hz (32 frames). Harmonic: 10 Hz (32 frames).
- Note that the fundamental and harmonic sequences are not matched or interleaved: the harmonic sequence was executed immediately after the fundamental sequence within the same Verasonics setup file.
+## Processing the Dataset
+
+The acquisitions can be processed with the `pipeline.yaml` definition in this folder and the [zea library](https://github.com/tue-bmd/zea).
+
+`zea` streams the data from the Hugging Face Hub and processes it according to the pipeline. You can try it out with the following command:
+
+```bash
+zea process \
+ --dataset hf://nvidia/OpenH-RF/vanderbilt/data/Fundamental/118420_1_Focused_Uncoded_TX.hdf5 \
+ --config hf://nvidia/OpenH-RF/vanderbilt/pipeline.yaml \
+ --n-frames 10
+```
+
+Alternatively, you can use the `reconstruct.py` [script](https://github.com/open-h/OpenH-RF/blob/main/datasets/vanderbilt/reconstruct.py) as provided in the [OpenH-RF GitHub repository](https://github.com/open-h/OpenH-RF).
+
+Set `ZEA_FILE` and `N_FRAMES` at the top of the script to pick a file and how many frames to beamform.
+
## Dataset Format
+[zea v0.1.6](https://github.com/tue-bmd/zea)
+
All acquisitions are submitted in the *zea* file format as raw RF channel data, with no preprocessing applied.
| Group / field | Shape | Description |
@@ -58,34 +87,26 @@ All acquisitions are submitted in the *zea* file format as raw RF channel data,
### zea 0.1.6 Migration
-Files migrated with zea 0.1.6 store RF channel data at
-`tracks/track_0/data/raw_data`.
+Files migrated with zea 0.1.6 store RF channel data at `tracks/track_0/data/raw_data`.
-Two legacy scalar text fields are relocated because they are not standard
-zea 0.1.6 metadata fields:
+Two legacy scalar text fields are relocated because they are not standard zea 0.1.6 metadata fields:
| Original path | Migrated path |
|---|---|
| `metadata/imaging_view_name` | `custom/legacy_metadata/imaging_view_name` |
| `metadata/notes` | `custom/legacy_metadata/notes` |
-The scalar text values, string dtypes, and original attributes are preserved.
-Each relocated field also has a `source_hdf5_path` attribute recording its
-original path. No text is reinterpreted or cleaned by this relocation.
-The RF data are re-saved, without intentional filtering, normalization, or
-other numerical preprocessing. This schema migration is not an additional
-de-identification pass.
+The scalar text values, string dtypes, and original attributes are preserved. Each relocated field also has a `source_hdf5_path` attribute recording its original path. No text is reinterpreted or cleaned by this relocation. The RF data are re-saved, without intentional filtering, normalization, or other numerical preprocessing. This schema migration is not an additional de-identification pass.
-The current release uses the migrated schema; inspect each file's root
-`zea_version` attribute and field paths when loading it. The descriptions in
-Subject Metadata below apply to both the original and migrated text fields.
+The current release uses the migrated schema; inspect each file's root `zea_version` attribute and field paths when loading it. The descriptions in Subject Metadata below apply to both the original and migrated text fields.
## Dataset Quantification
**Current OpenH-RF release:** 165 HDF5 files; 185.58 GB (185,584,517,120 bytes) stored; root `zea_version` **0.1.6**. Sizes include all HDF5 contents and use decimal units (MB = 10^6 bytes, GB = 10^9 bytes, TB = 10^12 bytes), not decoded-array memory or original-source download sizes.
-- **Samples:** 82 cineloops (32 frames each) from 29 patients — 2,624 fundamental frames
+- **Samples:** 82 cineloops (32 frames each) from 30 patients — 2,624 fundamental frames
- Plus a matching set of 2,624 harmonic frames (same cineloops, harmonic sequence)
+- Plus one CIRS phantom validation acquisition (`CIRS_validation/CIRS_fundamental.hdf5`, 32 frames), giving the 165 files and 5,280 frames of the current release
- **Train / validation / test split:** N/A
## Subject Metadata
@@ -95,7 +116,7 @@ Subject Metadata below apply to both the original and migrated text fields.
## Data Validation
-A `zea.Pipeline` (cast → demodulate → DAS beamforming → envelope detection → normalization → log compression → scan conversion) reconstructs the B-mode image from the raw channel data and is defined in [pipeline.yaml](pipeline.yaml). Run [reconstruct.py](reconstruct.py) to reproduce it, e.g. `python reconstruct.py --input my_file.hdf5 --n_frames 32`.
+A `zea.Pipeline` (cast → demodulate → DAS beamforming → envelope detection → normalization → log compression → scan conversion) reconstructs the B-mode image from the raw channel data and is defined in `pipeline.yaml`.
## Known Issues
diff --git a/datasets/vanderbilt/assets/118420_1_Focused_Uncoded_TX.gif b/datasets/vanderbilt/assets/118420_1_Focused_Uncoded_TX.gif
new file mode 100644
index 0000000..96f8524
Binary files /dev/null and b/datasets/vanderbilt/assets/118420_1_Focused_Uncoded_TX.gif differ
diff --git a/datasets/vanderbilt/assets/main.png b/datasets/vanderbilt/assets/main.png
new file mode 100644
index 0000000..00890bc
Binary files /dev/null and b/datasets/vanderbilt/assets/main.png differ
diff --git a/datasets/vanderbilt/reconstruct.py b/datasets/vanderbilt/reconstruct.py
index 2cc46fd..d5777dc 100644
--- a/datasets/vanderbilt/reconstruct.py
+++ b/datasets/vanderbilt/reconstruct.py
@@ -41,7 +41,8 @@
)
HERE = Path(__file__).parent
-CONFIG = HERE / "pipeline.yaml"
+CONFIG = HERE / "pipeline.yaml" # written by write_config(); this is what the run loads
+HF_CONFIG = "hf://nvidia/OpenH-RF/vanderbilt/pipeline.yaml" # where CONFIG is published
# P4-2v is a phased array (sector scan), so beamform on a polar grid and
# scan convert to Cartesian for display, rather than beamforming directly
@@ -61,7 +62,7 @@
# --- Inputs -----------------------------------------------------------------
# Defaults stream straight from the published corpus. Swap any of these for a
# local path to run against your own copy.
-INPUT = "hf://nvidia/OpenH-RF/vanderbilt/data/Fundamental/118420_1_Focused_Uncoded_TX.hdf5"
+ZEA_FILE = "hf://nvidia/OpenH-RF/vanderbilt/data/Fundamental/118420_1_Focused_Uncoded_TX.hdf5"
N_FRAMES = 1
DEVICE = None # CUDA device ID (e.g. 'cuda:0', 'auto:1', or 'cpu')
@@ -93,7 +94,7 @@ def write_config(pipeline: Pipeline, path: Path) -> None:
def main():
# The input may be an hf:// URI, so write the PNG beside this script.
- output_path = HERE / f"{Path(INPUT).stem}.png"
+ output_path = HERE / "assets" / f"{Path(ZEA_FILE).stem}.png"
zea.init_device(device=DEVICE, verbose=False)
@@ -104,7 +105,7 @@ def main():
frames = list(range(N_FRAMES))
# Load file: read acquisition parameters (with config overrides) and raw RF data
- with File(str(INPUT)) as f:
+ with File(str(ZEA_FILE)) as f:
parameters = f.load_parameters(**config.parameters)
# Only grab and beamform the first frame
@@ -128,6 +129,7 @@ def main():
)
plt.xlabel("X (m)")
plt.ylabel("Z (m)")
+ Path(output_path).parent.mkdir(parents=True, exist_ok=True)
plt.savefig(str(output_path), bbox_inches="tight", dpi=100)
print(f"Reconstructed : {recon.shape}")
diff --git a/datasets/waterloo-carotid/README.md b/datasets/waterloo-carotid/README.md
index f68e99d..0415055 100644
--- a/datasets/waterloo-carotid/README.md
+++ b/datasets/waterloo-carotid/README.md
@@ -1,4 +1,5 @@
---
+name: waterloo-carotid
pretty_name: UW-CarotidRF
license: cc-by-4.0
task_categories:
@@ -21,31 +22,22 @@ size_categories:
# UW-Carotid RF
-Dataset consisting of raw RF data and vector velocity measurements of carotid
-arteries acquired in in vivo carotid artery studies conducted by LITMUS @
-University of Waterloo. The dataset consists of longitudinal and cross-sectional
-images of the common and internal carotid arteries respectively.
+
+*Cine loop of [`data/Acq1.hdf5`](https://huggingface.co/datasets/nvidia/OpenH-RF/blob/main/waterloo-carotid/data/Acq1.hdf5), rendered using provided velocity fields.*
## Dataset Description
-This is a dataset consisting of raw RF frames (plane wave) and vector flow
-profiles of the carotid arteries (Common Carotid Artery and Internal Carotid
-Artery) in humans, acquired using a programmable research scanner configured for
-high frame rate vector flow imaging. The data was collected as part of studies
-conducted by the LITMUS research group at the University of Waterloo, focusing on
-carotid artery hemodynamics during baseline and physiological maneuvers (such as
-the Valsalva Maneuver, head-down tilt, and supine postures).
+Raw RF frames (plane wave) and vector flow profiles of the human carotid arteries, acquired in vivo by the LITMUS research group at the University of Waterloo with a programmable research scanner configured for high-frame-rate vector flow imaging. The dataset holds longitudinal images of the common carotid artery and cross-sectional images of the internal carotid artery, recorded to study carotid hemodynamics at baseline and during physiological maneuvers (Valsalva maneuver, head-down tilt, and supine postures).
## Dataset Contributor(s)
-Hassan Nahas, Jason Y. -H. Hsu, Theresa Gu, Adrian J. Y. Chee, Alfred C. H. Yu
-
-Correspondence emails:
-hassan.nahas@uwaterloo.ca
-jason.hsu@uwaterloo.ca
-theresa.gu@uwaterloo.ca
-alfred.yu@uwaterloo.ca
+- Hassan Nahas
+- Jason Y. -H. Hsu
+- Theresa Gu
+- Adrian J. Y. Chee
+- Alfred C. H. Yu
+- LITMUS, University of Waterloo
## Dataset Creation Date
@@ -53,28 +45,40 @@ alfred.yu@uwaterloo.ca
## License / Terms of Use
-[Creative Commons Attribution 4.0 International (CC BY 4.0)](https://creativecommons.org/licenses/by/4.0/legalcode.en).
-
-All human studies were approved by the University of Waterloo’s Human Research
-Ethics Board (ORE #46278). All included data was acquired from participants who
-provided both written and verbal consent prior to participating in the study
-regarding public data sharing.
+[Creative Commons Attribution 4.0 International (CC BY 4.0)](https://creativecommons.org/licenses/by/4.0/legalcode.en). Retain attribution and identify modifications when reusing the data.
## Intended Usage
-Developing, benchmarking, and evaluating methods for ultrasound image
-reconstruction, motion estimation, clutter filtering, multi-angle Doppler
-processing, and vector flow imaging (VFI) in carotid artery imaging.
+Developing, benchmarking, and evaluating methods for ultrasound image reconstruction, motion estimation, clutter filtering, multi-angle Doppler processing, and vector flow imaging (VFI) in carotid artery imaging.
## Dataset Characterization
- **Data Collection Method:** In vivo imaging of human carotid arteries (Common Carotid Artery and Internal Carotid Artery).
- **Labeling Method:** Categorized by target artery (Anatomy), view direction (Longitudinal or Cross-sectional), and physiological condition/maneuver (Baseline, Valsalva Maneuver, Valsalva Maneuver – Supine, Valsalva Maneuver – Head Down Tilt, Head Down Tilt).
-- **Acquisition system:**
- Raw RF data was acquired from programmable research scanners (US4R/US4R-Lite, US4US, Warsaw, Poland) equipped with an L14-5 linear array transducer.
+- **Acquisition system:** Raw RF data was acquired from programmable research scanners (US4R/US4R-Lite, US4US, Warsaw, Poland) equipped with an L14-5 linear array transducer.
+
+## Processing the Dataset
+
+The acquisitions can be processed with the `pipeline.yaml` definition in this folder and the [zea library](https://github.com/tue-bmd/zea).
+
+`zea` streams the data from the Hugging Face Hub and processes it according to the pipeline. You can try it out with the following command:
+
+```bash
+zea process \
+ --dataset hf://nvidia/OpenH-RF/waterloo-carotid/data/Acq1.hdf5 \
+ --config hf://nvidia/OpenH-RF/waterloo-carotid/pipeline.yaml \
+ --n-frames 1 \
+ --save-as png
+```
+
+Alternatively, you can use the `reconstruct.py` [script](https://github.com/open-h/OpenH-RF/blob/main/datasets/waterloo-carotid/reconstruct.py) as provided in the [OpenH-RF GitHub repository](https://github.com/open-h/OpenH-RF).
+
+Swap `--n-frames 1 --save-as png` for `--save-as gif` to get the cine loop. In the script, `ZEA_FILE`, `FRAME` and `POWER_THRESHOLD` (the power-Doppler mask threshold, in dB) at the top select what is reconstructed and overlaid.
## Dataset Format
+[zea v0.1.4](https://github.com/tue-bmd/zea)
+
Submitted in the [`zea` file format](https://zea.readthedocs.io/en/latest/) (one HDF5 file per acquisition).
Per-sample contents of the converted HDF5:
@@ -100,33 +104,15 @@ Per-sample contents of the converted HDF5:
| `data/color_doppler` | `[n_frames, z, x]` (+ `coordinates` `[z, x, 3]`) | float32 | m/s | Color Doppler map |
| `scan/*` | -- | -- | -- | Probe geometry, sampling/center/demodulation frequency, t0 delays, sound speed, transmit angles, focus distances, transmit origins, apodizations, PRI... |
-All `coordinates` arrays are per-pixel Cartesian positions in meters, last axis
-`[x, y, z]` (y = 0 for 2-D maps).
-
-## Shipped Example Acquisitions
-
-Two example acquisitions are included under `hdf5/` as a representative subset of
-the full dataset:
-
-| File | Subject | Anatomy | View | Condition | Frames |
-|---|---|---|---|---|---|
-| `hdf5/Acq0.hdf5` | 1 | Common Carotid Artery | Longitudinal | Baseline | 500 |
-| `hdf5/Acq62.hdf5` | 1 | Internal Carotid Artery | Cross-sectional | Baseline | 500 |
-
-Each common carotid artery frame comprises 2 steered plane-wave transmits (`n_tx = 2`), 2048 axial
-samples, and 128 receive channels. Each internal carotid artery frame comprises 1 steered plane-wave transmits (`n_tx = 1`), 1536 axial
-samples, and 128 receive channels.
-
-The frame count in these examples is truncated for demonstration; full acquisitions contain the frame counts described below.
+All `coordinates` arrays are per-pixel Cartesian positions in meters, last axis `[x, y, z]` (y = 0 for 2-D maps).
## Dataset Quantification
**Current OpenH-RF release:** 93 HDF5 files; 6.90 TB (6,902,089,770,179 bytes) stored; root `zea_version` **0.1.4**. Sizes include all HDF5 contents and use decimal units (MB = 10^6 bytes, GB = 10^9 bytes, TB = 10^12 bytes), not decoded-array memory or original-source download sizes.
-Data was collected from 8 participants, spanning carotid arteries (Common Carotid
-Artery and Internal Carotid Artery) in both longitudinal and cross-sectional
-views. In total, the dataset consists of 93 acquisitions, containing
-36,000/60,000 frames of raw RF data per acquisition.
+Data was collected from 8 participants, spanning carotid arteries (Common Carotid Artery and Internal Carotid Artery) in both longitudinal and cross-sectional views. In total, the dataset consists of 93 acquisitions, containing 30,000 or 36,000 frames of raw RF data per acquisition (47 acquisitions of 30,000 frames and 46 of 36,000 frames).
+Each common carotid artery frame comprises 2 steered plane-wave transmits (`n_tx = 2`), 2048 axial samples, and 128 receive channels. Each internal carotid artery frame comprises 1 steered plane-wave transmits (`n_tx = 1`), 1536 axial samples, and 128 receive channels.
+
## Subject Metadata
@@ -135,7 +121,7 @@ views. In total, the dataset consists of 93 acquisitions, containing
| **Total Number of Subjects** | 8 |
| **Total Number of Files (Acquisitions)** | 93 |
| **Sex Composition** | M: 6 (75.0%), F: 2 (25.0%) |
-| **Total RF Frames** | 4,476,000 |
+| **Total RF Frames** | 3,066,000 |
## Known Issues
@@ -147,29 +133,19 @@ views. In total, the dataset consists of 93 acquisitions, containing
## Beamforming and Processing
-1. **Pre-Filtering:**
- Channel RF data is pre-filtered using a 5 MHz bandpass filter before beamforming.
-2. **GPU-Accelerated Beamforming (DAS):**
- Beamforming is carried out via a GPU-accelerated Delay-and-Sum (DAS) module.
+1. **Pre-Filtering:** Channel RF data is pre-filtered using a 5 MHz bandpass filter before beamforming.
+2. **GPU-Accelerated Beamforming (DAS):** Beamforming is carried out via a GPU-accelerated Delay-and-Sum (DAS) module.
- **Aperture & Apodization:** 64-element Hanning window apodization and an F-number of 1.5.
- **Dual Angle-Compounding:** Beamforming for B-mode and power Doppler is performed twice with opposite receive angles ($+15^{\circ}$ and $-15^{\circ}$). The final high-resolution beamformed image (HRI) is the average of these two acquisitions:
$$HRI = \frac{HRI_{+15^{\circ}} + HRI_{-15^{\circ}}}{2}$$
- **Reconstruction Grid:** Cartesian coordinates mapped by a `PixelMap` representing a lateral range of $[-19, 19]\text{ mm}$ and axial depth of $[0, 30]\text{ mm}$ at $0.1\text{ mm}$ spatial resolution.
-3. **Clutter Filtering:**
- Clutter filtering is performed on the beamformed ensemble using a high-pass wall filter (normalized cut-off frequencies of 0.1 and 0.15, filter length of 100).
-4. **Multi-Angle Doppler Frequency Estimation:**
- Angle-specific Doppler frequencies are computed using an ensemble size of 64 frames with a step size of 1.
- - For acquisitions with 2 tx angles, we used the following Tx-Rx angles:
- Tx: [-10, -10, 10, 10]; Rx: [-10, 10, -10, 10]
- - For acquisitions with 1 tx angle:
- Tx: [-10, -10, -10]; Rx: [-10, 0, 10]
-5. **Vector Doppler Velocity Estimation:**
- Lateral ($v_x$) and axial ($v_z$) velocity components are computed from the multi-angle Doppler frequency estimates using least-squares estimation.
-
-The full LITMUS processing pipeline (GPU DAS beamforming + multi-angle vector
-Doppler) is documented in [`convert.py`](convert.py). That script is included for
-provenance and reproducibility; it depends on the LITMUS core Python package and
-the raw acquisition frames, so it is not runnable from this folder alone.
+3. **Clutter Filtering:** Clutter filtering is performed on the beamformed ensemble using a high-pass wall filter (normalized cut-off frequencies of 0.1 and 0.15, attenuation of 100 db).
+4. **Multi-Angle Doppler Frequency Estimation:** Angle-specific Doppler frequencies are computed using an ensemble size of 64 frames with a step size of 1.
+ - For acquisitions with 2 tx angles, we used the following Tx-Rx angles: Tx: [-10°, -10°, 10°, 10°]; Rx: [-10°, 10°, -10°, 10°]
+ - For acquisitions with 1 tx angle: Tx: [-10°, -10°, -10°]; Rx: [-10°, 0°, 10°]
+5. **Vector Doppler Velocity Estimation:** Lateral ($v_x$) and axial ($v_z$) velocity components are computed from the multi-angle Doppler frequency estimates using least-squares estimation.
+
+The full LITMUS processing pipeline (GPU DAS beamforming + multi-angle vector Doppler) is documented by the contributors. That documentation is provided for provenance and reproducibility; it depends on the LITMUS core Python package and the raw acquisition frames, so it is not runnable from this folder alone.
Papers relevant to our pipeline:
@@ -181,42 +157,17 @@ B. Y. S. Yiu and A. C. H. Yu, "Least-Squares Multi-Angle Doppler Estimators for
## Data Validation
-[`reconstruct.py`](reconstruct.py) builds a `zea.Pipeline` of DAS beamforming →
-envelope detection → normalization → log-compression **in code** and
-reconstructs a B-mode directly from `raw_data`, showing the raw-to-image flow
-without any config file. It also saves the pipeline to
-[`pipeline.yaml`](pipeline.yaml) as a shareable recipe. Comparing the
-reconstruction against the stored (LITMUS) B-mode is a sanity check that the
-acquisition parameters and probe geometry are recorded correctly, and serves as
-a reproducible reference reconstruction.
-
-When the vector-flow fields (`vector_velocity_x/z` + `power_doppler`) are present,
-a third panel overlays the vector velocity field on the stored B-mode. The
-overlay uses `draw_velocity_field`, a single self-contained (numpy + matplotlib)
-helper reproduced inside `reconstruct.py` from the LITMUS core Python package
-(`litmus.core_py.visualization`), so the script has no dependency on the full
-LITMUS GPU stack.
+`reconstruct.py` builds a `zea.Pipeline` of DAS beamforming → envelope detection → normalization → log-compression **in code** and reconstructs a B-mode directly from `raw_data`, showing the raw-to-image flow without any config file. It also saves the pipeline to `pipeline.yaml` as a shareable recipe. Comparing the reconstruction against the stored (LITMUS) B-mode is a sanity check that the acquisition parameters and probe geometry are recorded correctly, and serves as a reproducible reference reconstruction.
-The result is written to `reconstruct_output.png`:
-
-
-
-### Example Usage of reconstruct.py
+When the vector-flow fields (`vector_velocity_x/z` + `power_doppler`) are present, a third panel overlays the vector velocity field on the stored B-mode. The overlay uses `draw_velocity_field`, a single self-contained (numpy + matplotlib) helper reproduced inside `reconstruct.py` from the LITMUS core Python package (`litmus.core_py.visualization`), so the script has no dependency on the full LITMUS GPU stack.
-```bash
-# Reconstruct the default file (hdf5/Acq0.hdf5) at frame 100
-python reconstruct.py
+The result is written to `reconstruct_output.png`:
-# Reconstruct a specific file and frame, and adjust the power-Doppler mask
-python reconstruct.py --input hdf5/Acq1.hdf5 --frame 250 --power-threshold 55.0
-```
+
## Ethical Considerations
-All human studies were approved by the University of Waterloo’s Human Research
-Ethics Board (ORE #46278). All included data was acquired from participants who
-provided both written and verbal consent prior to participating in the study
-regarding public data sharing.
+All human studies were approved by the University of Waterloo’s Human Research Ethics Board (ORE #46278). All included data was acquired from participants who provided both written and verbal consent prior to participating in the study regarding public data sharing.
## Citation
diff --git a/datasets/waterloo-carotid/assets/Acq1.gif b/datasets/waterloo-carotid/assets/Acq1.gif
new file mode 100644
index 0000000..6b087fd
Binary files /dev/null and b/datasets/waterloo-carotid/assets/Acq1.gif differ
diff --git a/datasets/waterloo-carotid/assets/main.png b/datasets/waterloo-carotid/assets/main.png
new file mode 100644
index 0000000..241314f
Binary files /dev/null and b/datasets/waterloo-carotid/assets/main.png differ
diff --git a/datasets/waterloo-carotid/assets/reconstruct_output.png b/datasets/waterloo-carotid/assets/reconstruct_output.png
new file mode 100644
index 0000000..843d06d
Binary files /dev/null and b/datasets/waterloo-carotid/assets/reconstruct_output.png differ
diff --git a/datasets/waterloo-carotid/pipeline.yaml b/datasets/waterloo-carotid/pipeline.yaml
index a8e6641..6efa7a1 100644
--- a/datasets/waterloo-carotid/pipeline.yaml
+++ b/datasets/waterloo-carotid/pipeline.yaml
@@ -18,6 +18,14 @@ pipeline:
- 1.0
- log_compress
parameters:
+ xlims:
+ - -0.019
+ - 0.019
+ zlims:
+ - 0.0
+ - 0.03
+ grid_size_x: 381
+ grid_size_z: 301
dynamic_range:
- -50
- 0
diff --git a/datasets/waterloo-carotid/reconstruct.py b/datasets/waterloo-carotid/reconstruct.py
index e93b8b5..fbc12d3 100644
--- a/datasets/waterloo-carotid/reconstruct.py
+++ b/datasets/waterloo-carotid/reconstruct.py
@@ -47,18 +47,28 @@
)
HERE = Path(__file__).parent
-DEFAULT_OUTPUT = HERE / "reconstruct_output.png"
DYNAMIC_RANGE = [-50, 0] # dB; written to pipeline.yaml, tweak it there
+# Reconstruction grid, matching the stored B-mode. Written into pipeline.yaml so
+# zea process reproduces the same field of view.
+PARAMETERS = {
+ "xlims": [-0.019, 0.019],
+ "zlims": [0.0, 0.030],
+ "grid_size_x": 381,
+ "grid_size_z": 301,
+ "dynamic_range": DYNAMIC_RANGE,
+}
+
# --- Inputs -----------------------------------------------------------------
# Defaults stream straight from the published corpus. Swap any of these for a
# local path to run against your own copy.
-INPUT = "hf://nvidia/OpenH-RF/waterloo-carotid/data/Acq90.hdf5"
-OUTPUT = DEFAULT_OUTPUT
-PIPELINE = "hf://nvidia/OpenH-RF/waterloo-carotid/pipeline.yaml"
-FRAME = 100
-POWER_THRESHOLD = 38.0 # Power Doppler mask threshold (dB); this data peaks near 46
+ZEA_FILE = "hf://nvidia/OpenH-RF/waterloo-carotid/data/Acq1.hdf5"
+CONFIG = HERE / "pipeline.yaml"
+OUT = HERE / "assets" / "reconstruct_output.png"
+HF_CONFIG = "hf://nvidia/OpenH-RF/waterloo-carotid/pipeline.yaml"
+FRAME = 250
+POWER_THRESHOLD = 55.0 # Power Doppler mask threshold (dB)
def draw_velocity_field(
@@ -133,34 +143,22 @@ def build_config() -> Config:
LogCompress(),
],
).to_config()
- config["parameters"] = {"dynamic_range": DYNAMIC_RANGE}
+ config["parameters"] = PARAMETERS
return config
def main():
zea.init_device()
- # pipeline.yaml is the source of truth (pipeline + dynamic_range).
- config = Config.from_path(str(PIPELINE))
- params = dict(config.get("parameters", {}) or {})
- params.setdefault("dynamic_range", DYNAMIC_RANGE)
- config["parameters"] = params
+ config = build_config()
+ config.to_yaml(str(CONFIG))
pipeline = Pipeline.from_config(config)
- with File(str(INPUT)) as f:
+ with File(str(ZEA_FILE)) as f:
frame = min(max(0, FRAME), f.data.image.values.shape[0] - 1)
raw = f.data.raw_data[frame : frame + 1] # (1, n_tx, n_ax, n_el, 1)
-
- # Reconstruct on the same grid as the stored B-mode so the panels line up.
- coords = f.data.image.coordinates[:] # (z, x, 3), last axis [x, y, z] in metres
- parameters = f.load_parameters(
- **config.get("parameters", {}),
- grid_size_z=coords.shape[0],
- grid_size_x=coords.shape[1],
- xlims=[float(coords[..., 0].min()), float(coords[..., 0].max())],
- zlims=[float(coords[..., 2].min()), float(coords[..., 2].max())],
- )
+ parameters = f.load_parameters(**config.get("parameters", {}))
has_velocity = all(
k in f.data for k in ("vector_velocity_x", "vector_velocity_z", "power_doppler")
@@ -203,8 +201,9 @@ def main():
ax.set_ylabel("z [mm]")
ax.set_aspect("equal", adjustable="box")
- plt.savefig(str(OUTPUT), dpi=150, bbox_inches="tight")
- print(f"Saved {OUTPUT}")
+ Path(OUT).parent.mkdir(parents=True, exist_ok=True)
+ plt.savefig(str(OUT), dpi=150, bbox_inches="tight")
+ print(f"Saved {OUT}")
if __name__ == "__main__":
diff --git a/datasets/waterloo-largeartery/README.md b/datasets/waterloo-femoralvein/README.md
similarity index 57%
rename from datasets/waterloo-largeartery/README.md
rename to datasets/waterloo-femoralvein/README.md
index 0cc1927..5044e44 100644
--- a/datasets/waterloo-largeartery/README.md
+++ b/datasets/waterloo-femoralvein/README.md
@@ -1,4 +1,5 @@
---
+name: waterloo-femoralvein
pretty_name: UW-FemVeinRF
license: cc-by-4.0
task_categories:
@@ -22,25 +23,23 @@ size_categories:
# UW-FemVein RF
-Dataset consisting of raw RF data and vector velocity measurements of femoral vein acquired in studies conducted by VORTEX @
-University of Waterloo.
+
+
+*Cine loop of [`data/Acq0.hdf5`](https://huggingface.co/datasets/nvidia/OpenH-RF/blob/main/waterloo-femoralvein/data/Acq0.hdf5), rendered from provided velocity fields.*
## Dataset Description
-This is a dataset consisting of raw RF frames (plane wave) and vector flow
-profiles of the femoral vein in humans, acquired using a programmable research scanner configured for
-high frame rate vector flow imaging. The data was collected as part of studies
-conducted by the VORTEX research group at the University of Waterloo, focusing on
-venous hemodynamics under muscular contraction and head up tilt.
+Raw RF frames (plane wave) and vector flow profiles of the human femoral vein, acquired by the VORTEX research group at the University of Waterloo with a programmable research scanner configured for high-frame-rate vector flow imaging. The data was collected to study venous hemodynamics under muscular contraction and head-up tilt.
## Dataset Contributor(s)
-Hassan Nahas, Jeremy N. Cohen, Eudoxia Zafiris, Skye H.T. Ling, Alfred C.H. Yu, Jason S. Au
-
-Correspondence emails:
-hassan.nahas@uwaterloo.ca
-jason.au@uwaterloo.ca
-
+- Hassan Nahas
+- Jeremy N. Cohen
+- Eudoxia Zafiris
+- Skye H.T. Ling
+- Alfred C.H. Yu
+- Jason S. Au
+- VORTEX, University of Waterloo
## Dataset Creation Date
@@ -48,28 +47,40 @@ jason.au@uwaterloo.ca
## License / Terms of Use
-[Creative Commons Attribution 4.0 International (CC BY 4.0)](https://creativecommons.org/licenses/by/4.0/legalcode.en).
-
-All human studies were approved by the University of Waterloo’s Human Research
-Ethics Board (ORE #46018). All included data was acquired from participants who
-provided both written and verbal consent prior to participating in the study
-regarding public data sharing.
+[Creative Commons Attribution 4.0 International (CC BY 4.0)](https://creativecommons.org/licenses/by/4.0/legalcode.en). Retain attribution and identify modifications when reusing the data.
## Intended Usage
-Developing, benchmarking, and evaluating methods for ultrasound image
-reconstruction, motion estimation, clutter filtering, multi-angle Doppler
-processing, and vector flow imaging (VFI) in venous imaging.
+Developing, benchmarking, and evaluating methods for ultrasound image reconstruction, motion estimation, clutter filtering, multi-angle Doppler processing, and vector flow imaging (VFI) in venous imaging.
## Dataset Characterization
- **Data Collection Method:** In vivo imaging of human femoral veins.
- **Labeling Method:** Label contains target vessel (Anatomy), view direction (Longitudinal), and physiological condition (Contraction + head up tilt).
-- **Acquisition system:**
- Raw RF data was acquired from programmable research scanners (US4R, US4US, Warsaw, Poland) equipped with an AL2442 linear array transducer.
+- **Acquisition system:** Raw RF data was acquired from programmable research scanners (US4R, US4US, Warsaw, Poland) equipped with an AL2442 linear array transducer.
+
+## Processing the Dataset
+
+The acquisitions can be processed with the `pipeline.yaml` definition in this folder and the [zea library](https://github.com/tue-bmd/zea).
+
+`zea` streams the data from the Hugging Face Hub and processes it according to the pipeline. You can try it out with the following command:
+
+```bash
+zea process \
+ --dataset hf://nvidia/OpenH-RF/waterloo-femoralvein/data/Acq0.hdf5 \
+ --config hf://nvidia/OpenH-RF/waterloo-femoralvein/pipeline.yaml \
+ --n-frames 1 \
+ --save-as png
+```
+
+Alternatively, you can use the `reconstruct.py` [script](https://github.com/open-h/OpenH-RF/blob/main/datasets/waterloo-femoralvein/reconstruct.py) as provided in the [OpenH-RF GitHub repository](https://github.com/open-h/OpenH-RF).
+
+Swap `--n-frames 1 --save-as png` for `--save-as gif` to get the cine loop. In the script, `ZEA_FILE`, `FRAME`, `POWER_THRESHOLD` (the power-Doppler mask threshold, in dB), `VMAX` (velocity colour-scale maximum) and `NO_DEALIAS` at the top select what is reconstructed and overlaid.
## Dataset Format
+[zea v0.1.5](https://github.com/tue-bmd/zea)
+
Submitted in the [`zea` file format](https://zea.readthedocs.io/en/latest/) (one HDF5 file per acquisition).
Per-sample contents of the converted HDF5:
@@ -97,30 +108,16 @@ Per-sample contents of the converted HDF5:
| `data/color_doppler` | `[n_frames, z, x]` (+ `coordinates` `[z, x, 3]`) | float32 | m/s | Color Doppler map |
| `scan/*` | -- | -- | -- | Probe geometry, sampling/center/demodulation frequency, t0 delays, sound speed, transmit angles, focus distances, transmit origins, apodizations, PRI... |
-All `coordinates` arrays are per-pixel Cartesian positions in meters, last axis
-`[x, y, z]` (y = 0 for 2-D maps).
-
-## Shipped Example Acquisitions
+All `coordinates` arrays are per-pixel Cartesian positions in meters, last axis `[x, y, z]` (y = 0 for 2-D maps).
-One example acquisition is included under `hdf5/` as a representative subset of
-the full dataset:
-| File | Subject | Anatomy | View | Condition | Frames |
-|---|---|---|---|---|---|
-| `hdf5/Acq0.hdf5` | 1 | Femoral Vein | Longitudinal | Contraction 8Kg HUT 40 | 9000-12000 |
-Each femoral vein acquisition comprises 2 steered plane-wave transmits (`n_tx = 2`), 2048/3072 axial
-samples, and 192 receive channels. Note that example provided was convrted with start-frame=9000 to get to the interesting part.
-
-The frame count in these examples is truncated for demonstration; full acquisitions contain the frame counts described below.
## Dataset Quantification
**Current OpenH-RF release:** 15 HDF5 files; 941.96 GB (941,958,804,227 bytes) stored; root `zea_version` **0.1.5**. Sizes include all HDF5 contents and use decimal units (MB = 10^6 bytes, GB = 10^9 bytes, TB = 10^12 bytes), not decoded-array memory or original-source download sizes.
-Data was collected from 15 participants and consists of 15 acquisitions (one per participant), containing
-24,000 frames of raw RF data per acquisition. Each participant performed isometric plantarflexion
-contractions at 8 Kg under head up tilt of 40 degrees.
+Data was collected from 15 participants and consists of 15 acquisitions (one per participant), containing 12,000 frames of raw RF data per acquisition. Each participant performed isometric plantarflexion contractions at 8 Kg under head up tilt of 40 degrees. Each femoral vein acquisition comprises 2 steered plane-wave transmits (`n_tx = 2`), 2048/3072 axial samples, and 192 receive channels.
## Subject Metadata
@@ -129,7 +126,7 @@ contractions at 8 Kg under head up tilt of 40 degrees.
| **Total Number of Subjects** | 15 |
| **Total Number of Files (Acquisitions)** | 15 |
| **Sex Composition** | M: 8, F: 7 |
-| **Total RF Frames** | 360,000 |
+| **Total RF Frames** | 180,000 |
## Known Issues
@@ -140,31 +137,20 @@ contractions at 8 Kg under head up tilt of 40 degrees.
## Beamforming and Processing
-1. **Pre-Filtering:**
- Channel RF data is pre-filtered to remove hardware artifacts and out-of-band noise using a 5 MHz bandpass filter before beamforming.
-2. **GPU-Accelerated Beamforming (DAS):**
- Beamforming is carried out via a GPU-accelerated Delay-and-Sum (DAS) module.
+1. **Pre-Filtering:** Channel RF data is pre-filtered to remove hardware artifacts and out-of-band noise using a 5 MHz bandpass filter before beamforming.
+2. **GPU-Accelerated Beamforming (DAS):** Beamforming is carried out via a GPU-accelerated Delay-and-Sum (DAS) module.
- **Aperture & Apodization:** 128-element Hanning window apodization and an F-number of 1.5.
- **Dual Angle-Compounding:** Beamforming for B-mode and power Doppler is performed twice with opposite receive angles ($+15^{\circ}$ and $-15^{\circ}$). The final high-resolution beamformed image (HRI) is the average of these two acquisitions:
$$HRI = \frac{HRI_{+15^{\circ}} + HRI_{-15^{\circ}}}{2}$$
- **Reconstruction Grid:** Cartesian coordinates mapped by a `PixelMap` representing a lateral range of $[-19, 19]\text{ mm}$ and axial depth of $[10, 60]\text{ mm}$ at $0.1\text{ mm}$ spatial resolution.
-3. **Clutter Filtering:**
- Clutter filtering is performed on the beamformed ensemble using a high-pass wall filter (normalized cut-off frequencies of 0.05 and 0.1, attenuation of 100 dB).
-4. **Multi-Angle Doppler Frequency Estimation:**
- Angle-specific Doppler frequencies are computed using an ensemble size of 64 frames with a step size of 1.
- - For conventional vector velocity estimation, we used the following Tx-Rx angles:
- Tx: [-10, -10, 10, 10]; Rx: [-10, 10, -10, 10]
- - For dealiased vector velocity estimation, we used the following Tx-Rx angles:
- Tx: [-10, -10, -10,-10, 10, 10]; Rx: [-10, -3, 6, 10, -6, 3,10]
- - Color Doppler map is selected as the first of these (Tx: -10, Rx = -10)
-5. **Vector Doppler Velocity Estimation:**
- Lateral ($v_x$) and axial ($v_z$) velocity components are computed from the multi-angle Doppler frequency estimates using GPU-accelerated least-squares estimation.
- Lateral ($v_x$) and axial ($v_z$) dealiased velocity components are computed from the multi-angle Doppler frequency estimates using GPU-accelerated extended least-squares estimation.
-
-The full LITMUS processing pipeline (GPU DAS beamforming + multi-angle vector
-Doppler) is documented in [`convert.py`](convert.py). That script is included for
-provenance and reproducibility; it depends on the LITMUS core Python package and
-the raw acquisition frames, so it is not runnable from this folder alone.
+3. **Clutter Filtering:** Clutter filtering is performed on the beamformed ensemble using a high-pass wall filter (normalized cut-off frequencies of 0.05 and 0.1, attenuation of 100 dB).
+4. **Multi-Angle Doppler Frequency Estimation:** Angle-specific Doppler frequencies are computed using an ensemble size of 64 frames with a step size of 1.
+ - For conventional vector velocity estimation, we used the following Tx-Rx angles: Tx: [-10°, -10°, 10°, 10°]; Rx: [-10°, 10°, -10°, 10°]
+ - For dealiased vector velocity estimation, we used the following Tx-Rx angles: Tx: [-10°, -10°, -10°,-10°, 10°, 10°]; Rx: [-10°, -3°, 6°, 10°, -6°, 3°,10°]
+ - Color Doppler map is selected as the first of these (Tx: -10°, Rx = -10°)
+5. **Vector Doppler Velocity Estimation:** Lateral ($v_x$) and axial ($v_z$) velocity components are computed from the multi-angle Doppler frequency estimates using GPU-accelerated least-squares estimation. Lateral ($v_x$) and axial ($v_z$) dealiased velocity components are computed from the multi-angle Doppler frequency estimates using GPU-accelerated extended least-squares estimation.
+
+The full LITMUS processing pipeline (GPU DAS beamforming + multi-angle vector Doppler) is documented by the contributors. That documentation is provided for provenance and reproducibility; it depends on the LITMUS core Python package and the raw acquisition frames, so it is not runnable from this folder alone.
Papers relevant to our pipeline:
@@ -176,42 +162,17 @@ B. Y. S. Yiu and A. C. H. Yu, "Least-Squares Multi-Angle Doppler Estimators for
## Data Validation
-[`reconstruct.py`](reconstruct.py) builds a `zea.Pipeline` of DAS beamforming →
-envelope detection → normalization → log-compression **in code** and
-reconstructs a B-mode directly from `raw_data`, showing the raw-to-image flow
-without any config file. It also saves the pipeline to
-[`pipeline.yaml`](pipeline.yaml) as a shareable recipe. Comparing the
-reconstruction against the stored (LITMUS) B-mode is a sanity check that the
-acquisition parameters and probe geometry are recorded correctly, and serves as
-a reproducible reference reconstruction.
-
-When the vector-flow fields (`vector_velocity_x/z`/`vector_velocity_x/z_deal` + `power_doppler`) are present,
-a third panel overlays the vector velocity field on the stored B-mode. The
-overlay uses `draw_velocity_field`, a single self-contained (numpy + matplotlib)
-helper reproduced inside `reconstruct.py` from the LITMUS core Python package
-(`litmus.core_py.visualization`), so the script has no dependency on the full
-LITMUS GPU stack.
+`reconstruct.py` builds a `zea.Pipeline` of DAS beamforming → envelope detection → normalization → log-compression **in code** and reconstructs a B-mode directly from `raw_data`, showing the raw-to-image flow without any config file. It also saves the pipeline to `pipeline.yaml` as a shareable recipe. Comparing the reconstruction against the stored (LITMUS) B-mode is a sanity check that the acquisition parameters and probe geometry are recorded correctly, and serves as a reproducible reference reconstruction.
-The result is written to `reconstruct_output.png`:
+When the vector-flow fields (`vector_velocity_x/z`/`vector_velocity_x/z_deal` + `power_doppler`) are present, the vector velocity field is overlayed on the stored B-mode. The overlay uses `draw_velocity_field`, a single self-contained (numpy + matplotlib) helper reproduced inside `reconstruct.py` from the LITMUS core Python package (`litmus.core_py.visualization`), so the script has no dependency on the full LITMUS GPU stack.
-
-
-### Example Usage of reconstruct.py
-
-```bash
-# Reconstruct the default file (hdf5/Acq0.hdf5) at frame 100
-python reconstruct.py
+The result is written to `reconstruct_output.png`:
-# Reconstruct a specific file and frame, and adjust the power-Doppler mask
-python reconstruct.py --input "hdf5/Acq0.hdf5" --frame 700 --power-threshold 58 --vmax 1
-```
+
## Ethical Considerations
-All human studies were approved by the University of Waterloo’s Human Research
-Ethics Board (ORE #46018). All included data was acquired from participants who
-provided both written and verbal consent prior to participating in the study
-regarding public data sharing.
+All human studies were approved by the University of Waterloo’s Human Research Ethics Board (ORE #46018). All included data was acquired from participants who provided both written and verbal consent prior to participating in the study regarding public data sharing.
## Citation
diff --git a/datasets/waterloo-femoralvein/assets/Acq0.gif b/datasets/waterloo-femoralvein/assets/Acq0.gif
new file mode 100644
index 0000000..c40d7c1
Binary files /dev/null and b/datasets/waterloo-femoralvein/assets/Acq0.gif differ
diff --git a/datasets/waterloo-femoralvein/assets/main.png b/datasets/waterloo-femoralvein/assets/main.png
new file mode 100644
index 0000000..7790f62
Binary files /dev/null and b/datasets/waterloo-femoralvein/assets/main.png differ
diff --git a/datasets/waterloo-femoralvein/assets/reconstruct_output.png b/datasets/waterloo-femoralvein/assets/reconstruct_output.png
new file mode 100644
index 0000000..aa0d7fc
Binary files /dev/null and b/datasets/waterloo-femoralvein/assets/reconstruct_output.png differ
diff --git a/datasets/waterloo-largeartery/pipeline.yaml b/datasets/waterloo-femoralvein/pipeline.yaml
similarity index 79%
rename from datasets/waterloo-largeartery/pipeline.yaml
rename to datasets/waterloo-femoralvein/pipeline.yaml
index a8e6641..38350c2 100644
--- a/datasets/waterloo-largeartery/pipeline.yaml
+++ b/datasets/waterloo-femoralvein/pipeline.yaml
@@ -18,6 +18,14 @@ pipeline:
- 1.0
- log_compress
parameters:
+ xlims:
+ - -0.019
+ - 0.019
+ zlims:
+ - 0.01
+ - 0.06
+ grid_size_x: 381
+ grid_size_z: 501
dynamic_range:
- -50
- 0
diff --git a/datasets/waterloo-largeartery/reconstruct.py b/datasets/waterloo-femoralvein/reconstruct.py
similarity index 70%
rename from datasets/waterloo-largeartery/reconstruct.py
rename to datasets/waterloo-femoralvein/reconstruct.py
index 92d7b81..c41d4d5 100644
--- a/datasets/waterloo-largeartery/reconstruct.py
+++ b/datasets/waterloo-femoralvein/reconstruct.py
@@ -1,13 +1,13 @@
# SPDX-License-Identifier: Apache-2.0
-"""Example reconstruction script for the waterloo-largeartery dataset of OpenH-RF.
+"""Example reconstruction script for the waterloo-femoralvein dataset of OpenH-RF.
-Dataset link: https://huggingface.co/datasets/nvidia/OpenH-RF/tree/main/waterloo-largeartery
+Dataset link: https://huggingface.co/datasets/nvidia/OpenH-RF/tree/main/waterloo-femoralvein
B-mode reconstruction of steered plane-wave femoral vein channel data (UW-FemVeinRF).
The display dynamic range lives in pipeline.yaml (``parameters.dynamic_range``);
tweak it there and it is picked up for display. Where the vector-flow fields are
-present, a second panel overlays the vector velocity field using
+present, the vector velocity field is overlaid on the B-mode using
``draw_velocity_field`` -- a self-contained (numpy + matplotlib) helper
reproduced below from the LITMUS core Python package
(``litmus.core_py.visualization``), so this script has no dependency on the full
@@ -49,20 +49,28 @@
)
HERE = Path(__file__).parent
-DEFAULT_INPUT = "hf://nvidia/OpenH-RF/waterloo-largeartery/data/Acq5.hdf5"
-DEFAULT_PIPELINE = HERE / "pipeline.yaml"
-DEFAULT_OUTPUT = HERE / "reconstruct_output.png"
DYNAMIC_RANGE = [-50, 0] # dB; written to pipeline.yaml, tweak it there
+# Reconstruction grid, matching the stored B-mode. Written into pipeline.yaml so
+# zea process reproduces the same field of view.
+PARAMETERS = {
+ "xlims": [-0.019, 0.019],
+ "zlims": [0.010, 0.060],
+ "grid_size_x": 381,
+ "grid_size_z": 501,
+ "dynamic_range": DYNAMIC_RANGE,
+}
+
# --- Inputs -----------------------------------------------------------------
# Defaults stream straight from the published corpus. Swap any of these for a
# local path to run against your own copy.
-INPUT = "hf://nvidia/OpenH-RF/waterloo-largeartery/data/Acq5.hdf5"
-OUTPUT = DEFAULT_OUTPUT
-PIPELINE = "hf://nvidia/OpenH-RF/waterloo-largeartery/pipeline.yaml"
-FRAME = 100
-POWER_THRESHOLD = 50.0 # Power Doppler mask threshold (dB); covers the vein lumen
+ZEA_FILE = "hf://nvidia/OpenH-RF/waterloo-femoralvein/data/Acq0.hdf5"
+CONFIG = HERE / "pipeline.yaml"
+OUT = HERE / "assets" / "reconstruct_output.png"
+HF_CONFIG = "hf://nvidia/OpenH-RF/waterloo-femoralvein/pipeline.yaml"
+FRAME = 5200
+POWER_THRESHOLD = 58.0 # Power Doppler mask threshold (dB); covers the vein lumen
VMAX = 1.0 # Velocity color-scale max (m/s) for the quiver overlay; None -> 99th pct
NO_DEALIAS = False # Use the raw (aliased) velocity fields even when dealiased ones exist
@@ -139,45 +147,26 @@ def build_config() -> Config:
LogCompress(),
],
).to_config()
- config["parameters"] = {"dynamic_range": DYNAMIC_RANGE}
+ config["parameters"] = PARAMETERS
return config
def main():
zea.init_device()
- # pipeline.yaml is the source of truth (pipeline + dynamic_range); (re)create
- # it only if missing so manual tweaks to the dynamic range are preserved.
- if True:
- config = Config.from_path(str(PIPELINE))
- # pipeline.yaml carries no parameters block, so supply the display range.
- params = dict(config.get("parameters", {}) or {})
- params.setdefault("dynamic_range", DYNAMIC_RANGE)
- config["parameters"] = params
- else:
- config = build_config()
- config.to_yaml(str(PIPELINE))
+ config = build_config()
+ config.to_yaml(str(CONFIG))
pipeline = Pipeline.from_config(config)
has_velocity = False
dealiased = False
vx = vz = power = None
- with File(str(INPUT)) as f:
+ with File(str(ZEA_FILE)) as f:
frame = min(max(0, FRAME), f.data.image.values.shape[0] - 1)
- # breakpoint()
raw = f.data.raw_data[frame : frame + 1] # (1, n_tx, n_ax, n_el, 1)
-
- # Reconstruct on the same grid as the stored B-mode so the panels line up.
- coords = f.data.image.coordinates[:] # (z, x, 3), last axis [x, y, z] in metres
- parameters = f.load_parameters(
- **config.get("parameters", {}),
- grid_size_z=coords.shape[0],
- grid_size_x=coords.shape[1],
- xlims=[float(coords[..., 0].min()), float(coords[..., 0].max())],
- zlims=[float(coords[..., 2].min()), float(coords[..., 2].max())],
- )
+ parameters = f.load_parameters(**config.get("parameters", {}))
has_velocity = all(
k in f.data for k in ("vector_velocity_x", "vector_velocity_z", "power_doppler")
@@ -202,45 +191,36 @@ def main():
print("Using dealiased vector velocity fields.")
else:
print("No dealiased vector velocity fields in file: using raw estimates.")
- # breakpoint()
+
inputs = pipeline.prepare_parameters(parameters)
recon = pipeline(data=raw, **inputs, return_numpy=True)["data"][0]
extent = [v * 1e3 for v in parameters.extent_imshow] # metres -> mm
vmin, vmax_db = parameters.dynamic_range
zea.visualize.set_mpl_style()
- n_panels = 2 if has_velocity else 1
- # Size each panel to the image aspect ratio so the axes hug the B-mode.
panel_h = 5.0
img_aspect = (extent[1] - extent[0]) / (extent[2] - extent[3])
- fig, axes = plt.subplots(
- 1,
- n_panels,
- figsize=(panel_h * img_aspect * n_panels, panel_h),
- constrained_layout=True,
- )
- imshow_kw = dict(cmap="gray", vmin=vmin, vmax=vmax_db, extent=extent)
-
- axes[0].imshow(recon, **imshow_kw)
+ fig, ax = plt.subplots(figsize=(panel_h * img_aspect, panel_h), constrained_layout=True)
+ ax.imshow(recon, cmap="gray", vmin=vmin, vmax=vmax_db, extent=extent)
if has_velocity:
mag = np.sqrt(vx**2 + vz**2)
valid = (power >= POWER_THRESHOLD) & ~np.isnan(mag)
- if VMAX is not None:
- v_scale = VMAX
- else:
- v_scale = float(np.percentile(mag[valid], 99)) if np.any(valid) else 1.0
- axes[1].imshow(recon, **imshow_kw)
- q = draw_velocity_field(axes[1], vx, vz, power, POWER_THRESHOLD, extent, vmax=v_scale)
+ v_scale = (
+ VMAX
+ if VMAX is not None
+ else (float(np.percentile(mag[valid], 99)) if np.any(valid) else 1.0)
+ )
+ q = draw_velocity_field(ax, vx, vz, power, POWER_THRESHOLD, extent, vmax=v_scale)
q.set_clim(0, v_scale)
- for ax in axes:
- ax.set_xlabel("x [mm]")
- ax.set_ylabel("z [mm]")
- ax.set_aspect("equal", adjustable="box")
+ ax.set_xlabel("x [mm]")
+ ax.set_ylabel("z [mm]")
+ ax.set_aspect("equal", adjustable="box")
- plt.savefig(OUTPUT, dpi=150, bbox_inches="tight")
- print(f"Saved {OUTPUT}")
+ Path(OUT).parent.mkdir(parents=True, exist_ok=True)
+ plt.savefig(OUT, dpi=150, bbox_inches="tight")
+ print(f"Saved {OUT}")
if __name__ == "__main__":
diff --git a/datasets/waterloo-muscle/README.md b/datasets/waterloo-muscle/README.md
index e18a6fb..ffe9d8e 100644
--- a/datasets/waterloo-muscle/README.md
+++ b/datasets/waterloo-muscle/README.md
@@ -1,4 +1,5 @@
---
+name: waterloo-muscle
pretty_name: UW-MuscleRF
license: cc-by-4.0
task_categories:
@@ -20,23 +21,25 @@ size_categories:
# UW-Muscle RF
-Dataset consisting of raw RF data and speed of sound measurements acquired in an in vivo speed of sound study conducted by LITMUS @ University of Waterloo.
+
+
+*Cine loop of the relaxed left calf (lateral, longitudinal), [`data/Acq_p35_Calf_left_calf_lateral_longitudinal_relaxed_pressure.hdf5`](https://huggingface.co/datasets/nvidia/OpenH-RF/blob/main/waterloo-muscle/data/Acq_p35_Calf_left_calf_lateral_longitudinal_relaxed_pressure.hdf5), reconstructed from the raw channel data with the `pipeline.yaml` in this folder.*
## Dataset Description
-This is a dataset consisting of 580K raw RF frames (plane wave) and associated SoS measurements using a programmable research scanner configured for high frame rate imaging. We used a rigorous image collection protocol based on landmarking according to bone markers to ensure image consistency. This data was collected as part of the following study:
+18,720 raw RF frames (plane wave; 580,320 frame-transmits) with associated speed-of-sound (SoS) measurements, acquired in vivo by LITMUS at the University of Waterloo with a programmable research scanner configured for high-frame-rate imaging. Images were collected with a rigorous protocol based on landmarking according to bone markers to ensure image consistency. This data was collected as part of the following study:
D. Xiao, P. De La Torre, M. Saif El Nasr, A. J. Y. Chee, M. Mourtzakis, and A. C. H. Yu, “LivePulse-Echo Speed-of-Sound Estimation for Quality Assessment of Large Muscles in Humans,”Ultrasound in Medicine & Biology, vol. 51, no. 11, pp. 1925–1935, Nov. 2025.
-
## Dataset Contributor(s)
-Hassan Nahas, Di Xiao, Pat de la Torre, Adrian J.Y. Chee, Marina Mourtzakis, Alfred C.H. Yu
-
-Correspondence emails:
-hassan.nahas@uwaterloo.ca
-di.xiao@uwaterloo.ca
-alfred.yu@uwaterloo.ca
+- Hassan Nahas
+- Di Xiao
+- Pat de la Torre
+- Adrian J.Y. Chee
+- Marina Mourtzakis
+- Alfred C.H. Yu
+- LITMUS, University of Waterloo
## Dataset Creation Date
@@ -44,10 +47,7 @@ alfred.yu@uwaterloo.ca
## License / Terms of Use
-[Creative Commons Attribution 4.0 International (CC BY 4.0)](https://creativecommons.org/licenses/by/4.0/legalcode.en).
-
-This human study was approved by the University of Waterloo’s Human Research Ethics Board (ORE #44778). All included data was acquired from participants who provided both written and verbal consent prior to participating in the study regarding public data sharing.
-
+[Creative Commons Attribution 4.0 International (CC BY 4.0)](https://creativecommons.org/licenses/by/4.0/legalcode.en). Retain attribution and identify modifications when reusing the data.
## Intended Usage
@@ -63,13 +63,31 @@ The algorithm for global speed of sound estimation can be found here:
D. Xiao, P. D. l. Torre and A. C. H. Yu, "Real-Time Speed-of-Sound Estimation In Vivo via Steered Plane Wave Ultrasound," in IEEE Transactions on Ultrasonics, Ferroelectrics, and Frequency Control, vol. 71, no. 6, pp. 673-686, June 2024, doi: 10.1109/TUFFC.2024.3395490.
-- **Acquisition system:**
-Raw RF data was acquired from the US4R-Lite research scanner (US4US, Warsaw, Poland), equipped with an L14-5 linear array. For a subset of acquisitions, a through-transmission SoS estimation was made using a custom setup consisting of two single-element Olympus transducers (C567; Olympus; Tokyo, Japan).
+- **Acquisition system:** Raw RF data was acquired from the US4R-Lite research scanner (US4US, Warsaw, Poland), equipped with an L14-5 linear array. For a subset of acquisitions, a through-transmission SoS estimation was made using a custom setup consisting of two single-element Olympus transducers (C567; Olympus; Tokyo, Japan).
+
+## Processing the Dataset
+
+The acquisitions can be processed with the `pipeline.yaml` definition in this folder and the [zea library](https://github.com/tue-bmd/zea).
+
+`zea` streams the data from the Hugging Face Hub and processes it according to the pipeline. You can try it out with the following command:
+
+```bash
+zea process \
+ --dataset hf://nvidia/OpenH-RF/waterloo-muscle/data/Acq_p35_Calf_left_calf_lateral_longitudinal_relaxed_pressure.hdf5 \
+ --config hf://nvidia/OpenH-RF/waterloo-muscle/pipeline.yaml \
+ --n-frames 1 \
+ --save-as png
+```
+
+Alternatively, you can use the `reconstruct.py` [script](https://github.com/open-h/OpenH-RF/blob/main/datasets/waterloo-muscle/reconstruct.py) as provided in the [OpenH-RF GitHub repository](https://github.com/open-h/OpenH-RF).
+
+Swap `--n-frames 1 --save-as png` for `--save-as gif` to get the cine loop. In the script, `ZEA_FILE` and `FRAME` at the top select what is reconstructed.
## Dataset Format
-Submitted in the [`zea` file format](https://zea.readthedocs.io/en/latest/)
-(one HDF5 file per acquisition).
+[zea v0.1.6](https://github.com/tue-bmd/zea)
+
+Submitted in the [`zea` file format](https://zea.readthedocs.io/en/latest/) (one HDF5 file per acquisition).
Per-sample contents of the converted HDF5:
@@ -89,14 +107,14 @@ Per-sample contents of the converted HDF5:
| `custom/baecke_sport_index` | `[1]` | float32 | /5 | Baecke sport activity score |
| `custom/baecke_leisure_index` | `[1]` | float32 | /5 | Baecke leisure activity score |
| `custom/baecke_score` | `[1]` | float32 | /15 | Total baecke score |
-All `coordinates` arrays are per-pixel Cartesian positions in metres, last axis
-`[x, y, z]` (y = 0 for these 2-D maps).
+
+All `coordinates` arrays are per-pixel Cartesian positions in metres, last axis `[x, y, z]` (y = 0 for these 2-D maps).
## Dataset Quantification
**Current OpenH-RF release:** 1,248 HDF5 files; 576.19 GB (576,186,417,152 bytes) stored; root `zea_version` **0.1.6**. Sizes include all HDF5 contents and use decimal units (MB = 10^6 bytes, GB = 10^9 bytes, TB = 10^12 bytes), not decoded-array memory or original-source download sizes.
-Data was collected from 39 participants, each with 32 unique images spanning calf/bicep/quad, axis and muscle state. For each imaging location, 15 frames were made per limb under minimal contact and with pressure. Given that each frame consisted of 31 steered plane waves, our protocol yielded a total of 15 repeats × 31 frames × 8 views × 2 sides × 2 pressure settings = 14880 raw RF frames per participant. In total, our dataset is expected to contain 580k frames of raw RF data.
+Data was collected from 39 participants, each with 32 unique images spanning calf/bicep/quad, axis and muscle state. For each imaging location, 15 frames were made per limb under minimal contact and with pressure. Given that each frame consisted of 31 steered plane waves, our protocol yielded a total of 15 repeats × 31 transmits × 8 views × 2 sides × 2 pressure settings = 14,880 frame-transmits per participant, i.e. 480 stored frames per participant. In total the dataset contains 18,720 stored frames and 580,320 frame-transmits (see the table below).
All 1,248 HDF5 files are uploaded; current stored size and format version are reported above.
@@ -116,13 +134,7 @@ All 1,248 HDF5 files are uploaded; current stored size and format version are re
## Data Validation
-[`reconstruct.py`](reconstruct.py) builds a `zea.Pipeline` of DAS beamforming →
-envelope detection → normalization → log-compression **in code** and reconstructs
-a B-mode directly from `raw_data` — showing the raw-to-image flow without any
-config file. It also saves the pipeline to [`pipeline.yaml`](pipeline.yaml) as a
-shareable recipe. Comparing the reconstruction against the stored B-mode is a
-sanity check that the acquisition parameters and probe geometry are recorded
-correctly, and serves as a reproducible reference reconstruction.
+`reconstruct.py` builds a `zea.Pipeline` of DAS beamforming → envelope detection → normalization → log-compression **in code** and reconstructs a B-mode directly from `raw_data` — showing the raw-to-image flow without any config file. It also saves the pipeline to `pipeline.yaml` as a shareable recipe. Comparing the reconstruction against the stored B-mode is a sanity check that the acquisition parameters and probe geometry are recorded correctly, and serves as a reproducible reference reconstruction.
## Known Issues
- Scan.sound_speed uses default 1540 m/s used for computing tx delays as was done during acquisition. This is different from the estimated global speed of sound which is currently stored as a custom element.
diff --git a/datasets/waterloo-muscle/assets/Acq_p35_Calf_left_calf_lateral_longitudinal_relaxed_pressure.gif b/datasets/waterloo-muscle/assets/Acq_p35_Calf_left_calf_lateral_longitudinal_relaxed_pressure.gif
new file mode 100644
index 0000000..36c761e
Binary files /dev/null and b/datasets/waterloo-muscle/assets/Acq_p35_Calf_left_calf_lateral_longitudinal_relaxed_pressure.gif differ
diff --git a/datasets/waterloo-muscle/assets/main.png b/datasets/waterloo-muscle/assets/main.png
new file mode 100644
index 0000000..cd74bf6
Binary files /dev/null and b/datasets/waterloo-muscle/assets/main.png differ
diff --git a/datasets/waterloo-muscle/assets/reconstruct_output.png b/datasets/waterloo-muscle/assets/reconstruct_output.png
new file mode 100644
index 0000000..9f6dcc3
Binary files /dev/null and b/datasets/waterloo-muscle/assets/reconstruct_output.png differ
diff --git a/datasets/waterloo-muscle/pipeline.yaml b/datasets/waterloo-muscle/pipeline.yaml
index c52ce84..616b4f4 100644
--- a/datasets/waterloo-muscle/pipeline.yaml
+++ b/datasets/waterloo-muscle/pipeline.yaml
@@ -17,3 +17,15 @@ pipeline:
- 0.0
- 1.0
- log_compress
+parameters:
+ xlims:
+ - -0.019
+ - 0.019
+ zlims:
+ - 0.0
+ - 0.08
+ grid_size_x: 381
+ grid_size_z: 801
+ dynamic_range:
+ - -60
+ - 0
diff --git a/datasets/waterloo-muscle/reconstruct.py b/datasets/waterloo-muscle/reconstruct.py
index c325a45..8a40678 100644
--- a/datasets/waterloo-muscle/reconstruct.py
+++ b/datasets/waterloo-muscle/reconstruct.py
@@ -37,18 +37,34 @@
)
HERE = Path(__file__).parent
-DEFAULT_INPUT = "hf://nvidia/OpenH-RF/waterloo-muscle/data/Acq_p35_Calf_left_calf_lateral_longitudinal_relaxed_pressure.hdf5"
-DEFAULT_PIPELINE = HERE / "pipeline.yaml"
-DEFAULT_OUTPUT = HERE / "reconstruct_output.png"
# --- Inputs -----------------------------------------------------------------
# Defaults stream straight from the published corpus. Swap any of these for a
# local path to run against your own copy.
-INPUT = "hf://nvidia/OpenH-RF/waterloo-muscle/data/Acq_p35_Calf_left_calf_lateral_longitudinal_relaxed_pressure.hdf5"
-OUTPUT = DEFAULT_OUTPUT
-PIPELINE = "pipeline.yaml"
+ZEA_FILE = "hf://nvidia/OpenH-RF/waterloo-muscle/data/Acq_p35_Calf_left_calf_lateral_longitudinal_relaxed_pressure.hdf5"
+CONFIG = HERE / "pipeline.yaml"
+OUT = HERE / "assets" / "reconstruct_output.png"
+HF_CONFIG = "hf://nvidia/OpenH-RF/waterloo-muscle/pipeline.yaml"
FRAME = 9
+# The reconstruction grid matches the stored B-mode so the two line up. Kept here
+# rather than derived per file so pipeline.yaml fully describes the reconstruction
+# and zea process reproduces it.
+PARAMETERS = {
+ "xlims": [-0.019, 0.019],
+ "zlims": [0.0, 0.080],
+ "grid_size_x": 381,
+ "grid_size_z": 801,
+ "dynamic_range": [-60, 0],
+}
+
+
+def write_config(pipeline: Pipeline, path) -> None:
+ """Serialize the pipeline and its acquisition parameters to pipeline.yaml."""
+ config = pipeline.to_config()
+ config["parameters"] = PARAMETERS
+ config.to_yaml(str(path))
+
def build_pipeline() -> Pipeline:
"""Define the delay-and-sum B-mode pipeline in code."""
@@ -69,21 +85,12 @@ def main():
zea.init_device()
pipeline = build_pipeline()
- pipeline.to_yaml(str(PIPELINE))
+ write_config(pipeline, CONFIG)
- with File(str(INPUT)) as f:
+ with File(str(ZEA_FILE)) as f:
frame = min(max(0, FRAME), f.data.image.values.shape[0] - 1)
-
raw = f.data.raw_data[frame : frame + 1] # (1, n_tx, n_ax, n_el, 1)
-
- # Reconstruct on the same grid as the stored B-mode so the panels line up.
- coords = f.data.image.coordinates[:] # (z, x, 3), last axis [x, y, z] in metres
- parameters = f.load_parameters(
- grid_size_z=coords.shape[0],
- grid_size_x=coords.shape[1],
- xlims=[float(coords[..., 0].min()), float(coords[..., 0].max())],
- zlims=[float(coords[..., 2].min()), float(coords[..., 2].max())],
- )
+ parameters = f.load_parameters(**PARAMETERS)
inputs = pipeline.prepare_parameters(parameters)
recon = pipeline(data=raw, **inputs, return_numpy=True)["data"][0]
@@ -94,13 +101,20 @@ def main():
panel_h = 5.5
img_aspect = (extent[1] - extent[0]) / (extent[2] - extent[3])
fig, ax = plt.subplots(figsize=(panel_h * img_aspect, panel_h), constrained_layout=True)
- ax.imshow(recon, cmap="gray", vmin=-60, vmax=0, extent=extent)
+ ax.imshow(
+ recon,
+ cmap="gray",
+ vmin=parameters.dynamic_range[0],
+ vmax=parameters.dynamic_range[1],
+ extent=extent,
+ )
ax.set_xlabel("x [mm]")
ax.set_ylabel("z [mm]")
ax.set_aspect("equal", adjustable="box")
- plt.savefig(OUTPUT, dpi=150, bbox_inches="tight")
- print(f"Saved {OUTPUT}")
+ Path(OUT).parent.mkdir(parents=True, exist_ok=True)
+ plt.savefig(OUT, dpi=150, bbox_inches="tight")
+ print(f"Saved {OUT}")
if __name__ == "__main__":
diff --git a/datasets/weillcornell/README.md b/datasets/weillcornell/README.md
index 07c0516..cdf43df 100644
--- a/datasets/weillcornell/README.md
+++ b/datasets/weillcornell/README.md
@@ -1,6 +1,7 @@
---
+name: weillcornell
license: cc-by-4.0
-pretty_name: OpenH-RF QUS Phantom Dataset
+pretty_name: "Weill Cornell QUS Phantom Dataset"
task_categories:
- image-to-image
- feature-extraction
@@ -17,142 +18,105 @@ size_categories:
- n<1K
---
-# OpenH-RF QUS Phantom Dataset
+# Weill Cornell QUS Phantom Dataset
-Pre-beamformed RF channel data from three homogeneous tissue-mimicking
-phantoms. Each zea HDF5 acquisition is self-contained and includes raw RF,
-model-derived theoretical backscatter coefficient (BSC), direct per-frame
-Nakagami maps, and 20-frame pooled Nakagami references.
+
-## OpenH-RF Release Inventory
+*B-mode (frame 0) and 20-frame pooled Nakagami maps from [`data/ac10_15m_SK.hdf5`](https://huggingface.co/datasets/nvidia/OpenH-RF/blob/main/weillcornell/data/ac10_15m_SK.hdf5). The BSC curves are material-model references for the three phantoms; pooled Nakagami maps are statistical references.*
-**Current OpenH-RF release:** 120 HDF5 files; 1.00 GB (1,002,700,800 bytes) stored; root `zea_version` **0.1.6**. Sizes include all HDF5 contents and use decimal units (MB = 10^6 bytes, GB = 10^9 bytes, TB = 10^12 bytes), not decoded-array memory or original-source download sizes.
+## Dataset Description
-## Contributors
+Pre-beamformed RF channel data from three homogeneous tissue-mimicking phantoms, acquired for quantitative ultrasound (QUS). Next to the raw RF, each acquisition carries the phantom's model-derived theoretical backscatter coefficient (BSC), direct per-frame Nakagami maps, and 20-frame pooled Nakagami references, so single-frame QUS estimators can be trained and evaluated against targets stored in the same file.
-Shangke Liu, Tipu Sultan, Cameron Hoerig, and Jonathan Mamou;
-Biomedical Ultrasound Research Laboratory (BURL), Weill Cornell Medicine.
+## Dataset Contributor(s)
-Contact: Shangke Liu, shl4035@med.cornell.edu
+- Shangke Liu (contact)
+- Tipu Sultan
+- Cameron Hoerig
+- Jonathan Mamou
+- Biomedical Ultrasound Research Laboratory (BURL), Weill Cornell Medicine
-## Dataset Summary
+## Dataset Creation Date
-- Verasonics Vantage 256 and GE9LD linear array
-- 192 elements, 0.23 mm pitch, 5.2083 MHz center frequency
-- One normal-incidence plane wave per frame
-- 20.8333 MHz RF sampling; 1540 m/s sound-speed metadata
-- 3 phantoms x 2 operators x 20 probe placements x 20 frames
-- 120 acquisitions and 2400 frames
-- Phantom-only data; no human or animal subjects, clinical metadata, or PHI
-- No predefined train/validation/test split
+Not specified by the contributors.
-Keep all frames from one acquisition in the same split.
+## License / Terms of Use
-## Files
+[Creative Commons Attribution 4.0 International (CC BY 4.0)](https://creativecommons.org/licenses/by/4.0/legalcode.en). Retain attribution and identify modifications when reusing the data.
-```text
-data/.hdf5 self-contained zea acquisitions
-reconstruct.py B-mode and QUS example
-pipeline.yaml zea reconstruction pipeline
-LICENSE CC BY 4.0 license
-ac1_15m_SK_pipeline.png reference zea reconstruction
-```
+## Intended Usage
-Scan IDs use `ac__`, for example
-`ac1_15m_SK`. Phantom IDs are `15m`, `18m`, and `60m`; operator IDs are
-`SK` and `TP`; acquisition numbers run from 1 to 20.
+1. Reconstruct B-mode from one frame of raw RF.
+2. Predict the phantom's theoretical BSC curve from one RF frame. This is a material-model target, not a local experimentally estimated BSC curve.
+3. Predict pooled Nakagami `m` or `omega` from one RF frame. Use the supplied direct per-frame map as the single-frame baseline.
-## HDF5 Contents
+For Nakagami predictions, report MAE/RMSE and map correlation against the pooled reference. For BSC predictions, report the frequency range and unit and state whether evaluation uses linear BSC or a specified dB conversion.
-Each file follows zea 0.1.6 and contains one track. Raw RF is stored as `int16`
-ADC counts without demodulation, decimation, or resampling.
+## Dataset Characterization
-| Field under `tracks/track_0/data/` | Shape | dtype | Unit | Meaning |
-|---|---|---|---|---|
-| `raw_data` | `(20,1,n_ax,192,1)` | `int16` | ADC counts | Raw RF input |
-| `theoretical_bsc/values` | `(20,z,x,157)` | `float32` | `m^-1 sr^-1` | Model-derived BSC target |
-| `nakagami_m_per_frame/values` | `(20,z,x)` | `float32` | `1` | Direct single-frame shape estimate |
-| `nakagami_omega_per_frame/values` | `(20,z,x)` | `float32` | `a.u.^2` | Direct single-frame spread estimate |
-| `nakagami_m_pooled/values` | `(20,z,x)` | `float32` | `1` | 20-frame pooled shape reference |
-| `nakagami_omega_pooled/values` | `(20,z,x)` | `float32` | `a.u.^2` | 20-frame pooled spread reference |
+- **Data collection method:** phantom — three homogeneous tissue-mimicking phantoms (`15m`, `18m`, `60m`), each scanned by two operators (`SK`, `TP`) at 20 probe placements
+- **Labeling method:** derived — BSC from the phantom material model; Nakagami maps estimated from the RF
+- **Acquisition system:** Verasonics Vantage 256, GE9LD linear array, 192 elements, 0.23 mm pitch, 5.2083 MHz center frequency, 20.8333 MHz RF sampling
+- **Transmit sequence:** one normal-incidence plane wave per frame; 1540 m/s sound speed
-The five QUS products are zea Map fields with `values`, Cartesian
-`coordinates` in `[x,y,z]` order and metres, `description`, `unit`, `min`, and
-`max`. The BSC field also contains 157 `labels` of the form
-`frequency_hz=`, spanning 3.3162435-6.4900716 MHz.
+## Processing the Dataset
-Map grids are `(z,x)=(26,35)` for `15m` and `18m`, and `(53,35)` for `60m`.
-The analysis windows are approximately 2.96 mm axial by 4.37 mm lateral with
-75% overlap. Nakagami maps use normal-incidence delay-and-sum beamforming,
-Hann receive apodization, and intensity-domain maximum-likelihood fitting,
-with `omega = E[A^2]`.
+The acquisitions can be processed with the `pipeline.yaml` definition in this folder and the [zea library](https://github.com/tue-bmd/zea).
-The theoretical BSC is a homogeneous phantom material property: each phantom
-has one curve, broadcast over space and all 20 frames. The pooled Nakagami maps
-are also repeated along the frame axis so every single-frame input has the same
-20-frame reference. The pooled estimate includes the selected input frame.
+`zea` streams the data from the Hugging Face Hub and processes it according to the pipeline. You can try it out with the following command:
-Metadata uses `metadata.subject.type="phantom"` and a phantom ID. Anatomical
-annotations and anatomical-view annotations are intentionally omitted.
-Plane-wave acquisition is recorded in the file description, and the linear
-array geometry is recorded in the probe fields.
+```bash
+zea process \
+ --dataset hf://nvidia/OpenH-RF/weillcornell/data/ac10_15m_SK.hdf5 \
+ --config hf://nvidia/OpenH-RF/weillcornell/pipeline.yaml
+```
-## Suggested Tasks
+Alternatively, you can use the `reconstruct.py` [script](https://github.com/open-h/OpenH-RF/blob/main/datasets/weillcornell/reconstruct.py) as provided in the [OpenH-RF GitHub repository](https://github.com/open-h/OpenH-RF). Besides the B-mode, it prints the selected frame's BSC band and unit, the QUS map shapes, and the error of the direct per-frame Nakagami maps against the pooled references.
-1. Reconstruct B-mode from one frame of raw RF.
-2. Predict the phantom's theoretical BSC curve from one RF frame. This is a
- material-model target, not a local experimentally estimated BSC curve.
-3. Predict pooled Nakagami `m` or `omega` from one RF frame. Use the supplied
- direct per-frame map as the single-frame baseline.
+## Dataset Format
-For Nakagami predictions, report MAE/RMSE and map correlation against the
-pooled reference. For BSC predictions, report the frequency range and unit and
-state whether evaluation uses linear BSC or a specified dB conversion.
+[zea v0.1.6](https://github.com/tue-bmd/zea)
-All QUS maps are public reference targets, not hidden competition labels.
+Each file contains one track. Raw RF is stored as `int16` ADC counts without demodulation, decimation, or resampling. The five QUS targets are zea Map fields next to `raw_data`, with Cartesian coordinates in metres. The BSC field has 157 frequency `labels` (`frequency_hz=`) spanning 3.3162435-6.4900716 MHz.
-## Quick Start
+Map grids are `(z,x)=(26,35)` for `15m` and `18m`, and `(53,35)` for `60m`. The analysis windows are approximately 2.96 mm axial by 4.37 mm lateral with 75% overlap. Nakagami maps use normal-incidence delay-and-sum beamforming, Hann receive apodization, and intensity-domain maximum-likelihood fitting, with `omega = E[A^2]`.
-For the current release, use an OpenH-RF environment with `zea==0.1.6` and a supported Keras backend:
+The theoretical BSC is a homogeneous phantom material property: each phantom has one curve, broadcast over space and all 20 frames. The pooled Nakagami maps are also repeated along the frame axis so every single-frame input has the same 20-frame reference. The pooled estimate includes the selected input frame.
-```bash
-KERAS_BACKEND=jax python reconstruct.py \
- --input data/ac1_15m_SK.hdf5 \
- --output ac1_15m_SK_pipeline.png \
- --frame 0
-```
+## Dataset Quantification
-The script defines the pipeline in code, writes `pipeline.yaml`, saves the
-B-mode PNG, then prints the selected frame's RF shape, BSC band and unit, QUS
-map shapes, and direct per-frame-to-pooled Nakagami errors.
+**Current OpenH-RF release:** 120 HDF5 files; 1.00 GB (1,002,700,800 bytes) stored; root `zea_version` **0.1.6**. Sizes include all HDF5 contents and use decimal units (MB = 10^6 bytes, GB = 10^9 bytes, TB = 10^12 bytes), not decoded-array memory or original-source download sizes.
-## Validation
+- **Acquisitions / frames:** 120 acquisitions (3 phantoms x 2 operators x 20 probe placements, one HDF5 file each), 20 frames per acquisition — 2,400 frames total
+- **File naming:** `data/ac__.hdf5`, with `n` from 1 to 20, e.g. `ac10_15m_SK.hdf5`
+- **Splits:** no predefined train/validation/test split. Keep all frames from one acquisition in the same split.
-The original 120 HDF5 files passed zea 0.1.3 `File.validate()` and
-`File.validate_spec()`. Raw RF and embedded maps were checked for shape, dtype,
-finite values, coordinates, labels, min/max, and the documented frame-broadcast
-behavior. The original files used zea 0.1.3's default Blosc/Zstd+bitshuffle compression.
+| Field under `tracks/track_0/data/` | Shape | dtype | Unit | Meaning |
+|---|---|---|---|---|
+| `raw_data` | `(20,1,n_ax,192,1)` | `int16` | ADC counts | Raw RF input |
+| `theoretical_bsc/values` | `(20,z,x,157)` | `float32` | `m^-1 sr^-1` | Model-derived BSC target |
+| `nakagami_m_per_frame/values` | `(20,z,x)` | `float32` | `1` | Direct single-frame shape estimate |
+| `nakagami_omega_per_frame/values` | `(20,z,x)` | `float32` | `a.u.^2` | Direct single-frame spread estimate |
+| `nakagami_m_pooled/values` | `(20,z,x)` | `float32` | `1` | 20-frame pooled shape reference |
+| `nakagami_omega_pooled/values` | `(20,z,x)` | `float32` | `a.u.^2` | 20-frame pooled spread reference |
+
+## Subject Metadata
+
+No human or animal subjects. `metadata/subject/type` is `phantom` and `metadata/subject/id` names the phantom (`phantom_15m`, `phantom_18m`, `phantom_60m`).
-
+## Data Validation
-The reference uses frame 0 and the common 597 x 300 zea grid at approximately
-3-25 mm depth.
+A `zea.Pipeline` (cast → demodulate → DAS beamforming → envelope detection → normalization → log compression) is defined in `pipeline.yaml`, on a common 301 x 600 grid (isotropic ~0.073 mm pixels) for every acquisition. Its output for frame 0 of `ac10_15m_SK` is shown at the top of this card. Raw RF and the embedded maps were checked for shape, dtype, finite values, coordinates, labels, min/max, and the frame-broadcast behavior described above.
-## Limitations
+## Known Issues
-- Acquisition timestamps, PRF, explicit TGC curves, and emitted waveforms are
- unavailable; do not use these frames for calibrated temporal or flow analysis.
+- Acquisition timestamps, PRF, explicit TGC curves, and emitted waveforms are unavailable; do not use these frames for calibrated temporal or flow analysis.
- Repeated frames are strongly correlated.
-- BSC targets are model-derived references, not independent experimental BSC
- measurements; there are three unique phantom curves.
-- Pooled Nakagami maps are lower-variance statistical references, not
- independent physical ground truth.
-- Nakagami `omega` depends on gain, attenuation, beam sensitivity, and RF
- amplitude scale; it is not system-independent.
-- This release contains Verasonics data only.
-
-## License
-
-CC BY 4.0. See `LICENSE`. Commercial and non-commercial reuse is permitted
-with attribution. The contributors confirm that these phantom data are cleared
-for release under CC BY 4.0.
+- BSC targets are model-derived references, not independent experimental BSC measurements; there are three unique phantom curves.
+- Pooled Nakagami maps are lower-variance statistical references, not independent physical ground truth.
+- Nakagami `omega` depends on gain, attenuation, beam sensitivity, and RF amplitude scale; it is not system-independent.
+
+## Ethical Considerations
+
+Phantom-only data; no human or animal subjects, clinical metadata, or PHI. The contributors confirm that these phantom data are cleared for release under CC BY 4.0.
+
diff --git a/datasets/weillcornell/assets/ac10_15m_SK_pipeline.png b/datasets/weillcornell/assets/ac10_15m_SK_pipeline.png
new file mode 100644
index 0000000..ac14091
Binary files /dev/null and b/datasets/weillcornell/assets/ac10_15m_SK_pipeline.png differ
diff --git a/datasets/weillcornell/assets/hero.png b/datasets/weillcornell/assets/hero.png
new file mode 100644
index 0000000..df53878
Binary files /dev/null and b/datasets/weillcornell/assets/hero.png differ
diff --git a/datasets/weillcornell/assets/main.png b/datasets/weillcornell/assets/main.png
new file mode 100644
index 0000000..cb0da82
Binary files /dev/null and b/datasets/weillcornell/assets/main.png differ
diff --git a/datasets/weillcornell/pipeline.yaml b/datasets/weillcornell/pipeline.yaml
index 16aa268..d98224e 100644
--- a/datasets/weillcornell/pipeline.yaml
+++ b/datasets/weillcornell/pipeline.yaml
@@ -13,8 +13,8 @@ pipeline:
- 1.0
- log_compress
parameters:
- grid_size_x: 300
- grid_size_z: 597
+ grid_size_x: 600
+ grid_size_z: 301
xlims:
- -0.021965
- 0.021965
diff --git a/datasets/weillcornell/reconstruct.py b/datasets/weillcornell/reconstruct.py
index 8304177..d312d5b 100644
--- a/datasets/weillcornell/reconstruct.py
+++ b/datasets/weillcornell/reconstruct.py
@@ -18,8 +18,6 @@
python reconstruct.py
"""
-from __future__ import annotations
-
import os
os.environ.setdefault("KERAS_BACKEND", "jax")
@@ -37,13 +35,12 @@
HERE = Path(__file__).resolve().parent
CONFIG = HERE / "pipeline.yaml"
-DEFAULT_INPUT = "hf://nvidia/OpenH-RF/weillcornell/data/ac10_15m_SK.hdf5"
-DEFAULT_OUTPUT = HERE / "ac1_15m_SK_pipeline.png"
-# Common shallow reference grid used for every acquisition.
+# Common shallow reference grid used for every acquisition, with isotropic
+# ~0.073 mm (~lambda/4) pixels so the image keeps its physical aspect ratio.
PARAMETERS = {
- "grid_size_x": 300,
- "grid_size_z": 597,
+ "grid_size_x": 600,
+ "grid_size_z": 301,
"xlims": [-0.021965, 0.021965],
"zlims": [0.0029568189236411113, 0.02498497892364108],
"dynamic_range": [-60, 0],
@@ -52,8 +49,9 @@
# --- Inputs -----------------------------------------------------------------
# Defaults stream straight from the published corpus. Swap any of these for a
# local path to run against your own copy.
-INPUT = "hf://nvidia/OpenH-RF/weillcornell/data/ac10_15m_SK.hdf5"
-OUTPUT = DEFAULT_OUTPUT # Output PNG path
+ZEA_FILE = "hf://nvidia/OpenH-RF/weillcornell/data/ac10_15m_SK.hdf5"
+OUT = HERE / "assets" / "ac10_15m_SK_pipeline.png"
+HF_CONFIG = "hf://nvidia/OpenH-RF/weillcornell/pipeline.yaml"
FRAME = 0 # Frame index to reconstruct
DEVICE = None # Optional zea device, e.g. cpu, cuda:0, auto:0
@@ -172,26 +170,25 @@ def summarize_qus(zea_file: Path, frame: int) -> None:
)
-def main() -> int:
+def main():
# Define the beamforming pipeline in code, save it (with the reconstruction
# parameters) to pipeline.yaml, then load that YAML back in.
write_config(build_pipeline(), CONFIG)
config = Config.from_path(str(CONFIG))
- image_db, parameters = reconstruct_one(INPUT, config, FRAME, DEVICE)
- save_png(image_db, parameters, OUTPUT, f"{Path(INPUT).stem}, frame {FRAME}")
+ image_db, parameters = reconstruct_one(ZEA_FILE, config, FRAME, DEVICE)
+ save_png(image_db, parameters, OUT, f"{Path(ZEA_FILE).stem}, frame {FRAME}")
- print(f"Input : {INPUT}")
+ print(f"Input : {ZEA_FILE}")
print(f"Pipeline : {CONFIG}")
- print(f"Output : {OUTPUT}")
+ print(f"Output : {OUT}")
print(
f"Reconstruction : shape={image_db.shape}, "
f"min={float(np.nanmin(image_db)):.2f}, "
f"max={float(np.nanmax(image_db)):.2f}"
)
- summarize_qus(INPUT, FRAME)
- return 0
+ summarize_qus(ZEA_FILE, FRAME)
if __name__ == "__main__":
- raise SystemExit(main())
+ main()
diff --git a/datasets/weizmann-sampl/README.md b/datasets/weizmann-sampl/README.md
index f4d4ec9..9db704d 100644
--- a/datasets/weizmann-sampl/README.md
+++ b/datasets/weizmann-sampl/README.md
@@ -1,6 +1,7 @@
---
+name: weizmann-sampl
license: cc-by-4.0
-pretty_name: OpenH-RF Thyroid In-Vivo L11-5v Scan (D1)
+pretty_name: "Weizmann SAMPL Thyroid Clinical Scans"
task_categories:
- other
tags:
@@ -10,21 +11,25 @@ tags:
- thyroid
- clinical
- zea
+language:
+ - en
---
-# OpenH-RF Thyroid Clinical Scans
+# Weizmann SAMPL Thyroid Clinical Scans
+
+
+
+*Cine loop of a thyroid scan, [`data/30_1.hdf5`](https://huggingface.co/datasets/nvidia/OpenH-RF/blob/main/weizmann-sampl/data/30_1.hdf5), reconstructed from the raw channel data with the `pipeline.yaml` in this folder.*
## Dataset Description
-The data set consists of clinical ultrasound channel data acquired
-with a Verasonics Vantage 128 system and an L11-5v linear array probe, imaging
-the thyroid gland of 30 adult healthy volunteers. The scans were carried out by a senior radiologist
-who specializes in ultrasound thyroid imaging. The purpose of the scans is to provide a complete set of channel data of a thyroid gland scan of the full anatomy.
+The data set consists of clinical ultrasound channel data acquired with a Verasonics Vantage 128 system and an L11-5v linear array probe, imaging the thyroid gland of 30 adult healthy volunteers. The scans were carried out by a senior radiologist who specializes in ultrasound thyroid imaging. The purpose of the scans is to provide a complete set of channel data of a thyroid gland scan of the full anatomy.
## Dataset Contributor(s)
-Prof. Yonina Eldar's SAMPLLAB Group, Faculty of Mathematics and Computer Science, Weizmann Institute of Science, Rehovot, Israel.
-
+- Yonina C. Eldar (SAMPL Lab, Weizmann Institute of Science)
+- Adi Wegerhoff (SAMPL Lab, Weizmann Institute of Science)
+- Ditza Auerbach (SAMPL Lab, Weizmann Institute of Science)
## Dataset Creation Date
@@ -32,30 +37,29 @@ Prof. Yonina Eldar's SAMPLLAB Group, Faculty of Mathematics and Computer Science
## License / Terms of Use
-CC-BY-4.0. Acquired under a Weizmann Institute IRB-approved research protocol, with informed
-consent obtained from each subject prior to scanning.
+[Creative Commons Attribution 4.0 International (CC BY 4.0)](https://creativecommons.org/licenses/by/4.0/legalcode.en). Retain attribution and identify modifications when reusing the data.
## Intended Usage
-General-purpose ultrasound channel-data foundation model pretraining and
-evaluation — in particular DAS beamforming/reconstruction, inverse speed of sound imaging.
-Suitable as a base for future downstream tasks (e.g. thyroid
-segmentation, nodule detection) if paired with additional annotations from the B-mode images.
+General-purpose ultrasound channel-data foundation model pretraining and evaluation — in particular DAS beamforming/reconstruction, inverse speed of sound imaging. Suitable as a base for future downstream tasks (e.g. thyroid segmentation, nodule detection) if paired with additional annotations from the B-mode images.
## Dataset Characterization
- **Data Collection Method:** clinical
- **Labeling Method:** N/A — no annotations included
-- **Acquisition system:** Verasonics Vantage 128 system, L11-5v linear array
- probe, center frequency 7.6 MHz (76.8% fractional
- bandwidth), element width 0.27 mm, aperture width 38.1 mm; RF sampling
- frequency 31.25 MHz, demodulation frequency 7.8125 MHz, assumed sound
- speed 1540 m/s.
+- **Acquisition system:** Verasonics Vantage 128 system, L11-5v linear array probe, center frequency 7.6 MHz (76.8% fractional bandwidth), element width 0.27 mm, aperture width 38.1 mm; RF sampling frequency 31.25 MHz, demodulation frequency 7.8125 MHz, assumed sound speed 1540 m/s.
+
+## Processing the Dataset
+
+The acquisitions can be processed with the `reconstruct.py` [script](https://github.com/open-h/OpenH-RF/blob/main/datasets/weizmann-sampl/reconstruct.py) as provided in the [OpenH-RF GitHub repository](https://github.com/open-h/OpenH-RF), together with the `pipeline.yaml` definition in this folder and the [zea library](https://github.com/tue-bmd/zea). The script streams the data from the Hugging Face Hub.
+
+Set `ZEA_FILE` and `FRAME` at the top of the script to pick a scan and frame; setting `ZEA_FILE = None` switches to the grid modes that sample several scans (see the script docstring).
## Dataset Format
-zea file format, one acquisition HDF5 file per subject. Before packaging,
-the frames prior to workspace parameter freezing were removed from the raw channel data frames.
+[zea v0.1.6](https://github.com/tue-bmd/zea)
+
+zea file format, one acquisition HDF5 file per subject. Before packaging, the frames prior to workspace parameter freezing were removed from the raw channel data frames.
## Dataset Quantification
@@ -69,7 +73,7 @@ the frames prior to workspace parameter freezing were removed from the raw chann
| Field | Shape | Dtype | Units | Description |
|---|------------------------------|---|---|---|
-| `tracks/track_0/data/raw_data` | (nframes, 128, 4096, 128, 1) | int16 | ADC counts | Raw per-element RF channel data: (frames, transmits, axial samples, elements, 1) |
+| `tracks/track_0/data/raw_data` | (nframes, 128, 2176, 128, 1) | int16 | ADC counts | Raw per-element RF channel data: (frames, transmits, axial samples, elements, 1); the axial dimension is 2176 in 29 of the 30 acquisitions and 2048 in the remaining one |
| `tracks/track_0/scan/t0_delays` | (128, 128) | float32 | s | Per-transmit, per-element transmit delay |
| `tracks/track_0/scan/tx_apodizations` | (128, 128) | float32 | unitless (0-1) | Per-transmit, per-element transmit apodization weight |
| `tracks/track_0/scan/polar_angles` | (128,) | float32 | rad | Per-transmit polar steering angle |
@@ -93,7 +97,6 @@ the frames prior to workspace parameter freezing were removed from the raw chann
| `metadata/subject/id` | scalar | str | - | De-identified subject code |
| `metadata/subject/type` | scalar | str | - | `human` |
-
## Subject Metadata
- number of subjects: 30,
- age range: 18-65,
@@ -104,47 +107,20 @@ the frames prior to workspace parameter freezing were removed from the raw chann
## Data Validation
-`reconstruct.py` runs the `zea.Pipeline` defined in `pipeline.yaml`, alongside
-this README, to reconstruct a B-mode image from the raw channel data: cast →
-apply window → demodulate → DAS beamform (with native, per-element/per-pixel
-lens correction) → envelope detect → normalize → log compress. See that file
-for the grid size, dynamic range and lens-correction parameters.
+`reconstruct.py` runs the `zea.Pipeline` defined in `pipeline.yaml`, alongside this README, to reconstruct a B-mode image from the raw channel data: cast → apply window → demodulate → DAS beamform (with native, per-element/per-pixel lens correction) → envelope detect → normalize → log compress. See that file for the grid size, dynamic range and lens-correction parameters.
-Example reconstruction, run via `python reconstruct.py --data-dir subjects
---n-scans 3 --n-frames 3 --seed 0 --output three_patients_grid.png`
-(3 subjects, 3 randomly sampled frames each):
+Three frames from each of three subjects, reconstructed with the `pipeline.yaml` in this folder:
-
+
-All 9 sampled frames, across 3 different subjects, show consistent diffuse
-in-vivo tissue speckle with no reconstruction artifacts, confirming the
-acquisition geometry, timing metadata, and native lens correction are
-correctly recorded/applied across the released dataset, not just a single
-acquisition.
+All 9 sampled frames, across 3 different subjects, show consistent diffuse in-vivo tissue speckle with no reconstruction artifacts, confirming the acquisition geometry, timing metadata, and native lens correction are correctly recorded/applied across the released dataset, not just a single acquisition.
## Known Issues
-- `decimSampleRate`, `quadDecim`, and `demodFrequency` are absent from the
- raw Verasonics workspace (`BaselineWorkspace.mat`) and were instead
- sourced from this session's recalibration checkpoint files,
- where they were confirmed constant.
-- The default beamforming grid in `pipeline.yaml` (`grid_size_x=300`,
- `grid_size_z=400`) is coarser than the half-wavelength Nyquist rate for
- this probe/frequency; this only affects the resolution of the example
- reconstruction images, not the released raw channel data.
-- The number of frames for each subject is variable, depending on the subject's
- anatomy and the radiologist's scanning protocol. It may also be affected by
- bottlenecks in the Verasonics system's data transfer rate,
- which can cause "dropped frames" when the system cannot keep up with the
- acquisition speed.
+- `decimSampleRate`, `quadDecim`, and `demodFrequency` are absent from the raw Verasonics workspace (`BaselineWorkspace.mat`) and were instead sourced from this session's recalibration checkpoint files, where they were confirmed constant.
+- The default beamforming grid in `pipeline.yaml` (`grid_size_x=300`, `grid_size_z=400`) is coarser than the half-wavelength Nyquist rate for this probe/frequency; this only affects the resolution of the example reconstruction images, not the released raw channel data.
+- The number of frames for each subject is variable, depending on the subject's anatomy and the radiologist's scanning protocol. It may also be affected by bottlenecks in the Verasonics system's data transfer rate, which can cause "dropped frames" when the system cannot keep up with the acquisition speed.
## Ethical Considerations
-This acquisition was performed under an IRB-approved research protocol,
-with informed consent obtained from the subject prior to scanning. The
-subjects are identified only by a de-identified code with no directly
-identifying information (name, exact date of birth, medical record number)
-stored in the released file. No `acquisition_time` timestamp is embedded in
-the zea file, consistent with HIPAA Safe Harbor de-identification guidance
-for human-subject data.
-
+This acquisition was performed under a Weizmann Institute IRB-approved research protocol, with informed consent obtained from the subject prior to scanning. The subjects are identified only by a de-identified code with no directly identifying information (name, exact date of birth, medical record number) stored in the released file. No `acquisition_time` timestamp is embedded in the zea file, consistent with HIPAA Safe Harbor de-identification guidance for human-subject data.
diff --git a/datasets/weizmann-sampl/assets/30_1.gif b/datasets/weizmann-sampl/assets/30_1.gif
new file mode 100644
index 0000000..1e8a26c
Binary files /dev/null and b/datasets/weizmann-sampl/assets/30_1.gif differ
diff --git a/datasets/weizmann-sampl/assets/30_1.png b/datasets/weizmann-sampl/assets/30_1.png
new file mode 100644
index 0000000..7d97f31
Binary files /dev/null and b/datasets/weizmann-sampl/assets/30_1.png differ
diff --git a/datasets/weizmann-sampl/assets/main.png b/datasets/weizmann-sampl/assets/main.png
new file mode 100644
index 0000000..2dd1d7c
Binary files /dev/null and b/datasets/weizmann-sampl/assets/main.png differ
diff --git a/datasets/weizmann-sampl/assets/three_patients_grid.png b/datasets/weizmann-sampl/assets/three_patients_grid.png
new file mode 100644
index 0000000..83c88d8
Binary files /dev/null and b/datasets/weizmann-sampl/assets/three_patients_grid.png differ
diff --git a/datasets/weizmann-sampl/reconstruct.py b/datasets/weizmann-sampl/reconstruct.py
index 4e401fb..b5ecd2e 100644
--- a/datasets/weizmann-sampl/reconstruct.py
+++ b/datasets/weizmann-sampl/reconstruct.py
@@ -7,12 +7,12 @@
Three modes, selected by the constants below:
- 1. Single-scan mode (``INPUT`` set): beamform frame ``FRAME`` of that one file
+ 1. Single-scan mode (``ZEA_FILE`` set): beamform frame ``FRAME`` of that one file
and save it as a PNG. This is the default.
- 2. Random grid mode (``INPUT = None``): pick ``N_SCANS`` random scans from
+ 2. Random grid mode (``ZEA_FILE = None``): pick ``N_SCANS`` random scans from
``DATA_DIR``, ``N_FRAMES`` random frames from each (never below
``MIN_FRAME``), and save a single PNG grid (rows = scans, columns = frames).
- 3. Systematic grid mode (``INPUT = None`` and ``SYSTEMATIC = True``): fixed,
+ 3. Systematic grid mode (``ZEA_FILE = None`` and ``SYSTEMATIC = True``): fixed,
evenly-spaced frame numbers (``FRAME_START``/``FRAME_STEP``/``FRAME_COUNT``,
1-indexed to match the raw rawdata_{frame}of4 numbering) for the patients
named in ``PATIENTS``. Rows = patients, columns = frame numbers.
@@ -34,8 +34,8 @@
import random
from pathlib import Path
+import keras
import matplotlib.pyplot as plt
-import numpy as np
import zea
from zea import Config, File, Pipeline
@@ -45,9 +45,9 @@
# --- Inputs -----------------------------------------------------------------
# Defaults stream straight from the published corpus. Swap any of these for a
# local path to run against your own copy.
-INPUT = "hf://nvidia/OpenH-RF/weizmann-sampl/data/30_1.hdf5"
-DATA_DIR = HERE / "subjects" # HDF5 files to sample from (grid modes, used when INPUT is None)
-OUTPUT = None
+ZEA_FILE = "hf://nvidia/OpenH-RF/weizmann-sampl/data/30_1.hdf5"
+DATA_DIR = HERE / "subjects" # HDF5 files to sample from (grid modes, used when ZEA_FILE is None)
+OUT = None
# Frame 0 is unsettled: a near-field transient saturates the log compression
# and blacks out everything below ~10 mm.
FRAME = 20 # Frame index (single-scan mode)
@@ -63,9 +63,9 @@
def reconstruct_single(config):
- output_path = OUTPUT or Path(Path(INPUT).stem + ".png")
+ output_path = OUT or HERE / "assets" / f"{Path(ZEA_FILE).stem}.png"
- with File(str(INPUT)) as f:
+ with File(str(ZEA_FILE)) as f:
n_frames_available = f.data.raw_data.shape[0]
frame = FRAME if FRAME is not None else 0
# apply_lens_correction (pipeline.yaml) + the probe's lens_thickness/
@@ -87,7 +87,7 @@ def reconstruct_single(config):
inputs = pipeline.prepare_parameters(parameters)
outputs = pipeline(data=raw, **inputs)
- recon = np.array(outputs["data"]) # (1, grid_z, grid_x)
+ recon = keras.ops.convert_to_numpy(outputs["data"]) # (1, grid_z, grid_x)
image = zea.display.to_8bit(recon[0], dynamic_range=parameters.dynamic_range)
# NOTE: parameters.extent_imshow is in meters, not mm -- scale explicitly.
extent_mm = [v * 1e3 for v in parameters.extent_imshow]
@@ -96,6 +96,7 @@ def reconstruct_single(config):
plt.imshow(image, extent=extent_mm, cmap="gray")
plt.xlabel("X (mm)")
plt.ylabel("Z (mm)")
+ Path(output_path).parent.mkdir(parents=True, exist_ok=True)
plt.savefig(str(output_path), bbox_inches="tight", dpi=100)
print(f"Reconstructed : {recon.shape}")
@@ -128,13 +129,13 @@ def reconstruct_grid(config):
inputs = pipeline.prepare_parameters(parameters)
outputs = pipeline(data=raw, **inputs)
- recon = np.array(outputs["data"]) # (n_frames, grid_z, grid_x)
+ recon = keras.ops.convert_to_numpy(outputs["data"]) # (n_frames, grid_z, grid_x)
extent_mm = [v * 1e3 for v in parameters.extent_imshow]
images = [zea.display.to_8bit(r, dynamic_range=parameters.dynamic_range) for r in recon]
rows.append((path.stem, list(zip(frame_indices, images, [extent_mm] * len(images)))))
print(f"raw_data shape : {raw.shape} ({path.stem})")
- _save_grid(rows, OUTPUT or DATA_DIR / "random_grid.png", frame_label_offset=0)
+ _save_grid(rows, OUT or HERE / "assets" / "random_grid.png", frame_label_offset=0)
def reconstruct_systematic_grid(config):
@@ -171,13 +172,13 @@ def reconstruct_systematic_grid(config):
inputs = pipeline.prepare_parameters(parameters)
outputs = pipeline(data=raw, **inputs)
- recon = np.array(outputs["data"])
+ recon = keras.ops.convert_to_numpy(outputs["data"])
extent_mm = [v * 1e3 for v in parameters.extent_imshow]
images = [zea.display.to_8bit(r, dynamic_range=parameters.dynamic_range) for r in recon]
rows.append((patient, list(zip(valid, images, [extent_mm] * len(images)))))
print(f"raw_data shape : {raw.shape} ({patient}, frame numbers {valid})")
- _save_grid(rows, OUTPUT or DATA_DIR / "search_grid.png", frame_label_offset=0)
+ _save_grid(rows, OUT or HERE / "assets" / "search_grid.png", frame_label_offset=0)
def _save_grid(rows, output_path, frame_label_offset):
@@ -199,20 +200,15 @@ def _save_grid(rows, output_path, frame_label_offset):
ax.set_ylabel("Z (mm)")
fig.tight_layout()
+ Path(output_path).parent.mkdir(parents=True, exist_ok=True)
fig.savefig(str(output_path), bbox_inches="tight", dpi=100)
print(f"Saved : {output_path}")
def main():
- global INPUT
- if INPUT is None and not SYSTEMATIC and not True:
- found = sorted(HERE.glob("*.hdf5"))
- if found:
- INPUT = found[0]
-
config = Config.from_path(str(CONFIG))
- if INPUT is not None:
+ if ZEA_FILE is not None:
reconstruct_single(config)
elif SYSTEMATIC:
reconstruct_systematic_grid(config)
diff --git a/datasets/wpi/README.md b/datasets/wpi/README.md
index 96a4f89..9d73b0b 100644
--- a/datasets/wpi/README.md
+++ b/datasets/wpi/README.md
@@ -1,5 +1,6 @@
---
-pretty_name: "OpenH-RF — eSAF Rotational 3D US Raw Channel Data (Medical FUSION Lab, WPI)"
+name: wpi
+pretty_name: "eSAF Rotational 3D US Raw Channel Data (Medical FUSION Lab, WPI)"
license: cc-by-4.0
task_categories:
- image-to-image
@@ -16,111 +17,50 @@ size_categories:
- n<1K
---
-# OpenH-RF Sub-Dataset — Rotational 3D US Raw Channel Data for Elevational SAF (Simulated + Measured Phantom)
+# Rotational 3D Ultrasound Raw Channel Data for Elevational SAF
+
+
+
+*Top view down the rotation axis of a point target at 20 mm depth, 6 mm off-axis, [`data/tall_elev_H12__point_z020_r6.hdf5`](https://huggingface.co/datasets/nvidia/OpenH-RF/blob/main/wpi/data/tall_elev_H12__point_z020_r6.hdf5). Magenta is the naive per-angle reconstruction, filling in as the array (white line) sweeps 180° about the rotation axis (small circle); cyan is the paired eSAF label shipped in the file; white is where both agree. eSAF collapses the rotational smear arc back onto the target (arc-FWHM 1.26 → 0.39 mm).*
## Dataset Description
-Synthetic rotational 3D ultrasound acquisitions of point, pair, and off-axis targets, captured
-with an **elevation-focused 1D linear array** that is rotated 180° about its axial
-axis (1° steps, 180 frames). Each acquisition stores the **raw per-element channel
-RF** for a single normal plane-wave transmit at every rotation angle — i.e. the data
-*before* in-plane beamforming — which is what enables flexible offline beamforming and
-the **elevational Synthetic Aperture Focusing (eSAF)** method. The targets span a wide
-depth range to capture the depth-dependent elevational beam thickness (the artifact
-eSAF corrects). The release is **mostly simulated (Field II)**, complemented by a
-small set of **real measured phantom** rotational scans acquired with the physical
-Japan Probe 68-element array (same geometry as the simulation) over a shallow-to-focal
-depth series (10–45 mm). **Simulated + measured phantom** data (no in-vivo / subjects).
+
+Rotational 3D ultrasound acquisitions of point, pair and off-axis targets, captured with an **elevation-focused 1D linear array rotated 180° about its axial axis** (1° steps). Each acquisition stores the **raw per-element channel RF** of a single normal plane-wave transmit at every rotation angle, i.e. the data before in-plane beamforming, which enables flexible offline beamforming and **elevational Synthetic Aperture Focusing (eSAF)**. Every file also carries the eSAF-reconstructed 3D volume as a paired label.
+
+The release is mostly **simulated (Field II)**: a grid of 10 probe types × 19 targets spanning depths where the elevational beam thickness (the artifact eSAF corrects) varies. It is complemented by 5 **measured phantom** rotational scans with the physical Japan Probe 68-element array (same geometry as the simulation) at 10–45 mm depth. No human or animal subjects.
## Dataset Contributor(s)
-Medical FUSION Laboratory, Worcester Polytechnic Institute. Contact: Ryo Murakami.
+
+- Ryo Murakami (contact)
+- Medical FUSION Laboratory, Worcester Polytechnic Institute
## Dataset Creation Date
-06/15/2026.
+
+06/15/2026
## License / Terms of Use
-CC BY 4.0 (full text in `LICENSE`). The release contains **simulated (Field II) and
-real measured phantom** rotational scans — inanimate phantom only, so there are no
-IP, subject-consent, or IRB constraints.
-**Citation.** When using this dataset, please cite:
-> R. Murakami et al., "Elevational Synthetic Aperture Focusing for Rotated
-> Array-Based Three-Dimensional Ultrasound Imaging," IEEE Access, 2025.
+[Creative Commons Attribution 4.0 International (CC BY 4.0)](https://creativecommons.org/licenses/by/4.0/legalcode.en). Retain attribution and identify modifications when reusing the data.
## Intended Usage
-Advanced beamforming and **elevational resolution recovery** for rotational 3D US
-(eSAF), elevation-PSF / aperture-growth studies, and as a reproducible raw-channel-data
-benchmark for rotational synthetic-aperture reconstruction.
+
+Advanced beamforming and **elevational resolution recovery** for rotational 3D US (eSAF), elevation-PSF / aperture-growth studies, and a reproducible raw-channel-data benchmark for rotational synthetic-aperture reconstruction.
## Dataset Characterization
-- **Data Collection Method:** synthetic, generated with **Field II** (Jensen) run in
- **MATLAB**. The main release is a **probe × target grid** produced by
- `sim/batch_sim_probe_target.m` (source) (with `sim/sim_probe_catalog.m` /
- `sim/sim_target_catalog.m`, source): for each (probe type, target) it uses `xdc_focused_array`
- + `calc_scat_multi` to produce the raw per-element channel RF at every rotation angle
- (scatterer rotated about the axial axis, transducer fixed), then `sim/sim_dataset_to_zea.py`
- (source) repackages every case into the zea format here. **10 probe types** span lateral aperture
- (`n_el` 32/68/128, pitch 0.1/0.2/0.3 mm), elevation height `H` (4/8/12 mm), and elevation
- focal depth `R` (25/45/90 mm + unfocused) — see the probe table in `data/manifest.json`.
- (The earlier 18-acquisition set generated by `sim/batch_generate_fieldii.m` +
- `sim/mat_to_zea.py` (source) remains available as a compatible alternative with the
- identical schema.)
- **Measured phantom acquisitions (5):** real rotational scans of the physical Japan
- Probe 68-element array on a wire/point phantom, acquired with CPWC channel-RF capture
- (`experiment/Ryo_SetUp_JP68_PWCompound_3D_ChannelRF.m`, source) and a Galil-controlled 180°
- rotation. Each scan is time-tag-synced (frames → motor angles) and reduced to the
- **single centre (normal) plane wave per angle** by `experiment/sync_channel_rf.m` (source)
- (so the schema matches the simulation, n_tx = 1), then converted with the same
- `sim/sim_dataset_to_zea.py` (source). They span a shallow-to-focal depth series (10, 20, 30,
- 40, 45 mm nominal target depth).
-- **Labeling Method:** synthetic ground truth (exact target positions known; in
- `data/manifest.json`).
-- **Acquisition system (simulated):** Japan Probe JP_Linear_68 — 68-element linear
- array, pitch 0.2 mm, element width 0.15 mm, element height 8 mm, **elevational lens
- focus 45 mm** (Field II `xdc_focused_array` with 500 elevation math sub-elements);
- center frequency 10 MHz; sampling 40 MHz (NS200BW, 4 samples/wavelength); speed of
- sound 1490 m/s; single normal plane-wave transmit per rotation angle; 180° rotation,
- 1° step (180 frames). Parameters match the paper simulation.
-## Dataset Format
-zea file format (HDF5), one file per acquisition, **single track**: the raw
-channel RF + scan parameters live in the standard data/scan groups
-(`tracks/track_0` on disk), and the paired eSAF label volume is stored as a
-**zea custom field** in the `custom` group (`custom/saf_bmode`, read via
-`zea.File.custom` — see below). The fused SAF volume is a single frame, so it
-cannot share the data group with the ~180-frame `raw_data` (zea validates
-`n_frames` across all fields of a data group); the `custom` group is the zea
-mechanism for exactly such data, and keeping the file single-track avoids the
-`track_schedule` warning a multi-track file would print on every load.
-Pre-processing — *simulated:* none
-beyond the forward model (raw RF, not demodulated/decimated); *measured:* time-tag
-frame→angle synchronisation, per-angle dwell averaging, and centre-plane-wave selection
-(still raw per-element RF, not demodulated/decimated; `scan/demodulation_frequency`
-records the 10 MHz demodulation applied by the reference pipeline). The probe
-rotation per frame is stored as the zea **`metadata/probe_pose`** trajectory
-(`rotation_representation="euler_xyz"`, **radians**; the array rotates about its
-axial axis, so the angle is the z Euler component and the translation is zero).
-Note `probe_pose/sampling_frequency = 1.0 Hz` is a **nominal** one-pose-per-frame
-value, not a physical acquisition rate. Every file is
-written with `zea.File.create()` (`sim/sim_dataset_to_zea.py` +
-`sim/pack_saf_labels.py`, source) and carries a
-`zea_version` stamp, so zea loads it natively (not as a legacy file).
-
-**Paired pre-/post-SAF labels (the dataset's target output).** Each file also carries
-the **elevational-SAF reconstructed 3D B-mode volume** as the custom field
-**`custom/saf_bmode`**: `values` is `(1, z, x, y)` float32 in **dB** (log-compressed
-normalized envelope, 0 dB = volume max, empty pixels −inf) and `coordinates` holds
-the per-pixel `[x, y, z]` positions in **meters**, shape `(z, x, y, 3)`; both carry
-`description`/`unit` attributes. This is
-the *post*-SAF **output/label** paired with the *pre*-beamformed **input**
-(`data/raw_data`):
-the raw channel RF is back-projected through the published eSAF algorithm
-(`matlab/saf/safrot_backproj.m`, source: in-plane DAS → `recon_3d` → `safrot_backproj`,
-elevational focus 45 mm, f-number 45/8) into a 3D volume `B_SAF(x,y,z)`, generated by
-`sim/make_saf_all.m` → `experiment/run_esaf_synced.m` (source) and written into the zea
-file by `sim/pack_saf_labels.py` (source). The stored volume covers
-a thin depth window (±2 mm) about the target; per-case arc-FWHM before/after and gain
-are in `data/manifest.json` and in the `description` attribute of
-`custom/saf_bmode/values`. Read it with `zea.File`:
+- **Data Collection Method:** synthetic and phantom.
+ - *Simulated (190):* Field II (MATLAB, `xdc_focused_array` + `calc_scat_multi`), scatterers rotated about the axial axis with the transducer fixed. **10 probe types** vary lateral aperture (`n_el` 32/68/128, pitch 0.1/0.2/0.3 mm), elevation height `H` (4/8/12 mm) and elevation focus `R` (25/45/90 mm or unfocused), encoded in the probe name (`tall_elev_H12` = `H` 12 mm; `baseline_R45_H8` = `R` 45 mm, `H` 8 mm) and in `probe/*`.
+ - *Measured (5):* rotational scans of the Japan Probe 68-element array on a wire/point phantom with a Galil-controlled 180° rotation, acquired as 7-angle CPWC, time-tag-synced to the motor angles and reduced to the centre (0°) plane wave per angle to match the simulation schema.
+- **Labeling Method:** synthetic ground truth. Target positions are exact, and each file's `description` attribute records probe and target, e.g. `probe=tall_elev_H12 target=point_z020_r6 r0=6.0mm z=20.0mm`. The paired eSAF volume (`custom/saf_bmode`) is the label.
+- **Acquisition system:** Japan Probe JP_Linear_68 (baseline): 68 elements, pitch 0.2 mm, element width 0.15 mm, element height 8 mm, elevational lens focus 45 mm; center frequency 10 MHz; sampling 40 MHz; sound speed 1490 m/s; one normal plane-wave transmit per rotation angle; 180° rotation in 1° steps. Parameters match the paper simulation.
+
+## Processing the Dataset
+
+The acquisitions can be processed with the `reconstruct.py` [script](https://github.com/open-h/OpenH-RF/blob/main/datasets/wpi/reconstruct.py) as provided in the [OpenH-RF GitHub repository](https://github.com/open-h/OpenH-RF), together with the `pipeline.yaml` definition in this folder and the [zea library](https://github.com/tue-bmd/zea). The script streams the data from the Hugging Face Hub, beamforms the rotation frame closest to ±90° (where an off-axis target lies in-plane) and plots it beside the per-frame rotation angle from `metadata/probe_pose`. Set `ZEA_FILE` and `FRAME` at the top of the script to pick another acquisition or frame. The default, frame 90 (~−90°) of [`data/experiment__acq_exp_30mm.hdf5`](https://huggingface.co/datasets/nvidia/OpenH-RF/blob/main/wpi/data/experiment__acq_exp_30mm.hdf5), gives:
+
+
+
+The rotational eSAF itself (in-plane DAS → `recon_3d` → `safrot_backproj`) is the published MATLAB implementation; its output is shipped in every file as `custom/saf_bmode`:
```python
with zea.File("data/baseline_R45_H8__point_z080_r4.hdf5") as f:
@@ -130,46 +70,31 @@ with zea.File("data/baseline_R45_H8__point_z080_r4.hdf5") as f:
print(saf["values"].description) # axes + eSAF parameters + arc-FWHM
```
-A **MATLAB `.mat` version** of the same raw channel data + metadata, plus a
-**reference eSAF-beamformed** result and a `_ref.png` figure, is provided **per
-acquisition** alongside the source grid as `sim_dataset_out//.mat`
-and `..._ref.png` (each `.mat` holds the raw RF, the in-plane DAS, the metadata and
-the eSAF output produced with the published algorithm `matlab/saf/safrot_backproj.m`
-(source): in-plane DAS → `recon_3d` → `safrot_backproj`, f-number 45/8). A FWHM-vs-depth
-overview across probes is `sim_dataset_out/dataset_overview_r4.png`
-(`sim/dataset_overview.m`, source). The zea `.hdf5` acquisitions are **hosted on Hugging
-Face** at (git-LFS).
-The MATLAB `.mat`/`_ref.png` intermediates are
-reproducible from source and kept on lab storage.
+## Dataset Format
+
+[zea v0.1.6](https://github.com/tue-bmd/zea)
+
+One zea HDF5 file per acquisition, single track. The raw channel RF and scan parameters are in the standard data/scan groups (`tracks/track_0`); the probe rotation per frame is the **`metadata/probe_pose`** trajectory (`euler_xyz`, radians, rotation in the z component, zero translation; `sampling_frequency = 1.0 Hz` is nominal, one pose per frame).
+
+The paired eSAF label is the zea custom field **`custom/saf_bmode`**: `values` is `(1, z, x, y)` float32 in dB (0 dB = volume max, empty pixels −inf) over a ±2 mm depth window about the target, and `coordinates` holds the per-pixel `[x, y, z]` in metres. It lives in `custom` rather than the data group because it is a single frame, while `raw_data` has ~180. The per-case arc-FWHM before/after is in the `description` of `custom/saf_bmode/values`.
+
+Pre-processing: none for the simulations beyond the forward model; for the measured scans, frame-to-angle synchronisation, per-angle dwell averaging and centre-plane-wave selection. Both remain raw per-element RF (not demodulated or decimated).
## Dataset Quantification
**Current OpenH-RF release:** 195 HDF5 files; 1.87 GB (1,870,462,976 bytes) stored; root `zea_version` **0.1.6**. Sizes include all HDF5 contents and use decimal units (MB = 10^6 bytes, GB = 10^9 bytes, TB = 10^12 bytes), not decoded-array memory or original-source download sizes.
- **Acquisitions:** **195** = **190 simulated** + **5 measured phantom**.
- - *Simulated (190):* **10 probe types × 19 targets** (16 single points over depth
- {20,45,80,130} mm × radial offset from the rotation centre {0,2,4,6} mm, plus 3
- pair/oblique cases). The probe and target axes are listed in `data/manifest.json`. (The
- earlier compatible set has 18 acquisitions.)
- - *Measured (5):* real rotational phantom scans at nominal depths {10,20,30,40,45} mm
- (`experiment__acq_exp_*.hdf5`), centre plane wave, ~182 measured rotation angles
- over ~180°.
-- **Frames per acquisition:** simulated 180 (one per 1° step); measured ~182 (the
- actual encoder angles are stored in `metadata/probe_pose` — z Euler component,
- radians — not necessarily uniform).
+ - *Simulated (190):* **10 probe types × 19 targets** (16 single points over depth {20,45,80,130} mm × radial offset from the rotation centre {0,2,4,6} mm, plus 3 pair/oblique cases). The probe axis is listed above under Data Collection Method; each file's own `description` attribute gives its exact probe/target/r0/depth. (The earlier compatible set has 18 acquisitions.)
+ - *Measured (5):* real rotational phantom scans at nominal depths {10,20,30,40,45} mm (`experiment__acq_exp_*.hdf5`), centre plane wave, ~182 measured rotation angles over ~180°.
+- **Frames per acquisition:** simulated 180 (one per 1° step); measured ~182 (the actual encoder angles are stored in `metadata/probe_pose` — z Euler component, radians — not necessarily uniform).
- **Stored HDF5 size:** 1.87 GB (1,870,462,976 bytes), including the paired `saf_bmode` label volumes.
-- **Train/val/test split:** N/A (benchmark / characterization set; the probe × depth ×
- radius axes are the intended study dimensions).
+- **Train/val/test split:** N/A (benchmark / characterization set; the probe × depth × radius axes are the intended study dimensions).
### Per-sample feature table
-Shapes use placeholders because dimensions vary across the probe grid and between
-simulated and measured scans: **`n_frames`** = 180 (simulated, one per 1° step) or
-~182 (measured encoder angles); **`n_el`** ∈ {32, 68, 128} (probe grid; 68 for the
-baseline and all measured scans); **`n_ax`** = axial sample count (per case);
-**`n_z`** = depth samples of the label volume (target ± ~2 mm window).
+Shapes use placeholders because dimensions vary across the probe grid and between simulated and measured scans: **`n_frames`** = 180 (simulated, one per 1° step) or ~182 (measured encoder angles); **`n_el`** ∈ {32, 68, 128} (probe grid; 68 for the baseline and all measured scans); **`n_ax`** = axial sample count (per case); **`n_z`** = depth samples of the label volume (target ± ~2 mm window).
-Paths below are inside each `.hdf5`; with `zea.File` use `f.data` / `f.scan` /
-`f.metadata.probe_pose`, and `f.custom` for the SAF label volume.
+Paths below are inside each `.hdf5`; with `zea.File` use `f.data` / `f.scan` / `f.metadata.probe_pose`, and `f.custom` for the SAF label volume.
| field (HDF5 path) | shape | dtype | units | description |
|-----------------------------------|--------------------------------|---------|-------|-------------|
@@ -191,74 +116,38 @@ Paths below are inside each `.hdf5`; with `zea.File` use `f.data` / `f.scan` /
| `custom/saf_bmode/coordinates` | (n_z, n_el, n_el, 3) | float32 | m | per-pixel `[x, y, z]` positions of the label volume (target ± ~2 mm depth window) |
## Subject Metadata
-No human or animal subjects / no PHI. Each file stores `metadata/subject/type`:
-`simulated phantom` for the Field II simulations, `phantom` for the measured
-`experiment__*` scans. Creator attribution is stored per file in `metadata/credit`.
+
+No human or animal subjects / no PHI. Each file stores `metadata/subject/type`: `simulated phantom` for the Field II simulations, `phantom` for the measured `experiment__*` scans. Creator attribution is stored per file in `metadata/credit`.
## Data Validation
-`reconstruct.py` (**runnable, verified** — official `zea` API, no fallback code)
-loads one zea acquisition, reads its acquisition parameters via
-`zea.Config.from_path('pipeline.yaml')` + `File.load_parameters`, beamforms the
-rotation frame closest to ±90° rotation magnitude (the frame where an off-axis target
-lies in-plane; this handles signed encoder angles too — measured scans run 0 → ~−180°)
-with the native `zea.Pipeline` op chain **Cast → Demodulate → Beamform(delay_and_sum) →
-EnvelopeDetect → Normalize → LogCompress** defined in `pipeline.yaml`, and writes a
-two-panel PNG: the B-mode image, and the per-frame probe **rotation angle**
-(from `metadata/probe_pose`, plotted in degrees) so downstream users know how to
-interpret the frame axis — the special data this dataset adds:
-```
-python reconstruct.py --input data/baseline_R45_H8__point_z080_r4.hdf5 --output out.png
-```
-The rotational **eSAF** across frames — the contribution of this dataset — is implemented in
-`matlab/saf` (source) (`recon_3d` → `safrot_backproj`); per-probe before/after eSAF reference
-images and a FWHM-vs-depth overview accompany the MATLAB `.mat` release
-(`sim/dataset_overview.m`, source), and the resulting paired SAF volume is stored as
-the `custom/saf_bmode` custom field of every `.hdf5` (see Dataset Format above).
+
+`reconstruct.py` beamforms a single rotation frame with the `pipeline.yaml` chain (Cast → Demodulate → Beamform(delay_and_sum) → EnvelopeDetect → Normalize → LogCompress) and plots the stored rotation trajectory beside it, as a check on the acquisition parameters and the frame-to-angle mapping.
+
+The eSAF labels were checked per case with the arc-FWHM of the rotational smear before and after eSAF, shown here annotated for the case in the hero image:
+
+
## Known Issues
-- **Paired SAF label — on-axis targets (r0 = 0) do not narrow, by design.** eSAF
- refocuses the *rotational elevation smear*; a target sitting on the rotation axis has
- essentially no smear, so its `saf_bmode` label volume is not sharper than the input (arc-FWHM
- gain ≈ 1). This is expected physics, not a defect — the 40 on-axis cases (median gain
- 1.00×) are included so the pair covers the degenerate no-smear case. Off-axis targets
- (n=120, median gain 1.75×, up to ~12×) and paired/oblique targets (n=30, median 3.71×)
- improve clearly; targets at the focal depth (~45 mm) and weak-elevation-focus probes
- (`efocus_deep_90`, `elev_unfocused`) have less smear to recover. Across all 195 cases,
- median arc-FWHM gain is 1.36× (42 cases < 1×, mostly the on-axis/near-focus group above).
- Arc-FWHM is measured on a **centred** reconstruction: the smear circle passes through both
- the rotation axis and the target (not a circle centred on the rotation axis). The eSAF
- back-projection uses a fixed elevational focus of 45 mm; per-depth focus tuning (see
- `docs/eSAF_focus_depth_study_JP.md`, source) can further sharpen deep off-axis cases but was
- not applied here (single as-designed focus).
-- **Measured phantom depth window.** The real reflector bead sits **~4 mm off the rotation
- axis** (not on-axis) and, for each scan, slightly deeper than the folder's nominal depth
- label; labels are reconstructed over the interactively-identified reflector depth window
- (not a naive nominal-depth ± 2 mm window), which matters because a mis-centred window can
- pick up near-axis clutter instead of the actual bead.
-- **Simulated** data (Field II spatial-impulse-response model): realistic transducer
- field, but no tissue attenuation, aberration, multiple scattering, or electronic
- noise. Not a substitute for measured data.
+
+- **Paired SAF label — on-axis targets (r0 = 0) do not narrow, by design.** eSAF refocuses the *rotational elevation smear*; a target sitting on the rotation axis has essentially no smear, so its `saf_bmode` label volume is not sharper than the input (arc-FWHM gain ≈ 1). This is expected physics, not a defect — the 40 on-axis cases (median gain 1.00×) are included so the pair covers the degenerate no-smear case. Off-axis targets (n=120, median gain 1.75×, up to ~12×) and paired/oblique targets (n=30, median 3.71×) improve clearly; targets at the focal depth (~45 mm) and weak-elevation-focus probes (`efocus_deep_90`, `elev_unfocused`) have less smear to recover. Across all 195 cases, median arc-FWHM gain is 1.36× (42 cases < 1×, mostly the on-axis/near-focus group above). Arc-FWHM is measured on a **centred** reconstruction: the smear circle passes through both the rotation axis and the target (not a circle centred on the rotation axis). The eSAF back-projection uses a fixed elevational focus of 45 mm; per-depth focus tuning (see `docs/eSAF_focus_depth_study_JP.md`, source) can further sharpen deep off-axis cases but was not applied here (single as-designed focus).
+- **Measured phantom depth window.** The real reflector bead sits **~4 mm off the rotation axis** (not on-axis) and, for each scan, slightly deeper than the folder's nominal depth label; labels are reconstructed over the interactively-identified reflector depth window (not a naive nominal-depth ± 2 mm window), which matters because a mis-centred window can pick up near-axis clutter instead of the actual bead.
+- **Simulated** data (Field II spatial-impulse-response model): realistic transducer field, but no tissue attenuation, aberration, multiple scattering, or electronic noise. Not a substitute for measured data.
- Speed of sound is 1490 m/s, matching the paper Table 1 and the experiment.
-- A single normal plane-wave transmit per rotation angle is simulated (the dataset
- stores n_tx = 1); multi-angle compounding is left to downstream users.
-- **Measured scans:** acquired as 7-angle CPWC; only the **centre (0°) plane wave** is
- kept here to match the n_tx = 1 schema. The dwell frames per angle are averaged before
- storage (noise reduction). Real reflectors are not ideal point scatterers — expect
- reverberation/clutter near the surface and specular layering; rotation angles are the
- measured encoder values (slightly non-uniform, full span ≈ 180°, sign per encoder
- direction). The elevational lens focus is the nominal 45 mm, but the effective
- back-projection focus for eSAF is depth-dependent on real data (see
- `docs/eSAF_focus_depth_study_JP.md`, source).
+- A single normal plane-wave transmit per rotation angle is simulated (the dataset stores n_tx = 1); multi-angle compounding is left to downstream users.
+- **Measured scans:** acquired as 7-angle CPWC; only the **centre (0°) plane wave** is kept here to match the n_tx = 1 schema. The dwell frames per angle are averaged before storage (noise reduction). Real reflectors are not ideal point scatterers — expect reverberation/clutter near the surface and specular layering; rotation angles are the measured encoder values (slightly non-uniform, full span ≈ 180°, sign per encoder direction). The elevational lens focus is the nominal 45 mm, but the effective back-projection focus for eSAF is depth-dependent on real data (see `docs/eSAF_focus_depth_study_JP.md`, source).
+
+## Ethical Considerations
+
+None. The data is either fully synthetic (Field II) or measured on an inanimate phantom: no human or animal subjects, no PHI, no consent or IRB constraints.
## Raw Source Data
-The raw, pre-conversion acquisition/simulation outputs that were processed into the
-zea `.hdf5` files above are archived (same CC BY 4.0 license) at
-: the raw Verasonics
-per-line channel-RF captures (`RFdata_line*.mat` + encoder logs) for the 5 measured
-acquisitions, and the per-case MATLAB intermediates (raw RF, in-plane DAS, eSAF
-output) for the 190 simulated cases. See that repository's README for how each
-maps to `data/*.hdf5` here.
-## Ethical Considerations
-None. The data is either fully synthetic (Field II) or measured on an **inanimate
-phantom** — no human or animal subjects, no PHI, no consent/IRB constraints.
+The raw pre-conversion outputs are archived under the same CC BY 4.0 license at
+: the raw Verasonics per-line
+channel-RF captures (with encoder logs) for the 5 measured acquisitions, and the per-case MATLAB intermediates (raw RF, in-plane DAS, eSAF output) for the 190 simulated cases.
+
+## Citation
+
+When using this dataset, please cite:
+
+> R. Murakami et al., "Elevational Synthetic Aperture Focusing for Rotated Array-Based Three-Dimensional Ultrasound Imaging," IEEE Access, 2025.
diff --git a/datasets/wpi/assets/bmode.png b/datasets/wpi/assets/bmode.png
new file mode 100644
index 0000000..d132148
Binary files /dev/null and b/datasets/wpi/assets/bmode.png differ
diff --git a/datasets/wpi/assets/esaf_topview_before_after.png b/datasets/wpi/assets/esaf_topview_before_after.png
new file mode 100644
index 0000000..2c30a26
Binary files /dev/null and b/datasets/wpi/assets/esaf_topview_before_after.png differ
diff --git a/datasets/wpi/assets/esaf_topview_sweep.gif b/datasets/wpi/assets/esaf_topview_sweep.gif
new file mode 100644
index 0000000..1e8f8cb
Binary files /dev/null and b/datasets/wpi/assets/esaf_topview_sweep.gif differ
diff --git a/datasets/wpi/assets/main.png b/datasets/wpi/assets/main.png
new file mode 100644
index 0000000..aed4723
Binary files /dev/null and b/datasets/wpi/assets/main.png differ
diff --git a/datasets/wpi/reconstruct.py b/datasets/wpi/reconstruct.py
index 16c0375..b038c18 100644
--- a/datasets/wpi/reconstruct.py
+++ b/datasets/wpi/reconstruct.py
@@ -26,22 +26,25 @@
from pathlib import Path
+import keras
import matplotlib.pyplot as plt
import numpy as np
import zea
from zea import Config, File, Pipeline
HERE = Path(__file__).parent
-DEFAULT_INPUT = "hf://nvidia/OpenH-RF/wpi/data/narrow_lateral_32el__point_z045_r0.hdf5"
-DEFAULT_OUTPUT = HERE / "outputs" / "reconstruct_example.png"
CONFIG = HERE / "pipeline.yaml"
# --- Inputs -----------------------------------------------------------------
# Defaults stream straight from the published corpus. Swap any of these for a
-# local path to run against your own copy.
-INPUT = "hf://nvidia/OpenH-RF/wpi/data/narrow_lateral_32el__point_z045_r0.hdf5"
-OUTPUT = DEFAULT_OUTPUT
-FRAME_INDEX = None # rotation frame to beamform (default: closest to +-90 deg rotation)
+# local path to run against your own copy. The default below is one of the 5
+# measured-phantom scans, which show real reflector/reverberation texture --
+# a more representative first look than the mostly-empty simulated point
+# targets (see the probe x target grid in this dataset's README for those).
+ZEA_FILE = "hf://nvidia/OpenH-RF/wpi/data/experiment__acq_exp_30mm.hdf5"
+OUT = HERE / "assets" / "bmode.png"
+HF_CONFIG = "hf://nvidia/OpenH-RF/wpi/pipeline.yaml"
+FRAME = None # rotation frame to beamform (default: closest to +-90 deg rotation)
def main():
@@ -54,14 +57,14 @@ def main():
# and this dataset's special data — the probe rotation angle per frame.
# Files are single-track (channel RF + scan); the paired eSAF label volume
# lives in the custom group (custom/saf_bmode/{values,coordinates}, via f.custom).
- with File(str(INPUT)) as f:
+ with File(str(ZEA_FILE)) as f:
parameters = f.load_parameters(**config.parameters)
# Rotation angle per frame lives in metadata/probe_pose (euler_xyz [rad],
# nominal 1 Hz sampling — one pose per rotation frame): the array rotates
# about its axial (z) axis, so the angle is the z Euler component.
rotation_angles_deg = np.degrees(np.asarray(f.metadata.probe_pose.rotation)[:, 2]).ravel()
n_frames = f.data.raw_data.shape[0]
- frame = FRAME_INDEX
+ frame = FRAME
if frame is None: # default: frame where the probe has rotated ~90 deg
# Select on rotation *magnitude* so signed encoder angles work too
# (measured scans run 0 -> ~-180 deg; a plain |angle - 90| would pick
@@ -80,7 +83,7 @@ def main():
inputs = pipeline.prepare_parameters(parameters)
outputs = pipeline(data=raw, **inputs)
- recon = np.array(outputs["data"]) # (1, grid_z, grid_x), log-compressed dB
+ recon = keras.ops.convert_to_numpy(outputs["data"]) # (1, grid_z, grid_x), log-compressed dB
image = zea.display.to_8bit(recon[0], dynamic_range=parameters.dynamic_range, pillow=False)
# B-mode + rotation-angle plot (how to interpret the frame axis)
@@ -107,13 +110,13 @@ def main():
axes[1].grid(True, color="0.85", linewidth=0.8)
axes[1].legend(loc="upper left", fontsize=8, frameon=False)
- fig.suptitle(f"OpenH-RF eSAF rotational 3D US — {Path(INPUT).name}", y=0.98)
+ fig.suptitle(f"OpenH-RF eSAF rotational 3D US — {Path(ZEA_FILE).name}", y=0.98)
plt.tight_layout()
- OUTPUT.parent.mkdir(parents=True, exist_ok=True)
- plt.savefig(str(OUTPUT), bbox_inches="tight", dpi=150)
+ OUT.parent.mkdir(parents=True, exist_ok=True)
+ plt.savefig(str(OUT), bbox_inches="tight", dpi=150)
print(f"Reconstructed : {recon.shape}")
- print(f"Saved : {OUTPUT}")
+ print(f"Saved : {OUT}")
if __name__ == "__main__":