hazen

Quality assurance framework for Magnetic Resonance Imaging

https://github.com/gstt-csc/hazen

Science Score: 44.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
    Found CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
  • Academic publication links
  • Academic email domains
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (15.4%) to scientific vocabulary

Keywords

image-processing mri mri-phantoms python qa quality-assurance
Last synced: 6 months ago · JSON representation ·

Repository

Quality assurance framework for Magnetic Resonance Imaging

Basic Info
Statistics
  • Stars: 27
  • Watchers: 5
  • Forks: 12
  • Open Issues: 54
  • Releases: 24
Topics
image-processing mri mri-phantoms python qa quality-assurance
Created over 4 years ago · Last pushed 6 months ago
Metadata Files
Readme Contributing License Citation

README.md


Ibn Al-Haytham


hazen

Quality assurance framework for Magnetic Resonance Imaging
Explore the docs

View repo

Report Bug

Request Feature

Please STAR this repo to receive updates about new versions of hazen!


Overview

hazen is a command line tool (Python package) for performing automated analysis of magnetic resonance imaging (MRI) quality assurance (QA) data. hazen consists of multiple Tasks which perform quantitative processing and analysis of MRI phantom data. Currently, hazen supports the ACR Large MRI Phantom and the MagNET Test Objects collection of phantoms.

The hazen Tasks provide the following measurements within these phantoms: - Signal-to-noise ratio (SNR) - Spatial resolution - Slice position - Slice width - Uniformity - Ghosting - MR relaxometry

Each Task outputs numerical results to the user's terminal. Below is an output from the hazen snr Task performed on some example MRI data:

shell hazen snr tests/data/snr/Siemens { 'snr_smoothing_measured_SNR_seFoV250_2meas_slice5mm_tra_repeat_PSN_noDC_2_1': 173.97, 'snr_smoothing_measured_SNR_seFoV250_2meas_slice5mm_tra_repeat_PSN_noDC_3_1': 177.91, 'snr_smoothing_normalised_SNR_seFoV250_2meas_slice5mm_tra_repeat_PSN_noDC_2_1': 1698.21, 'snr_smoothing_normalised_SNR_seFoV250_2meas_slice5mm_tra_repeat_PSN_noDC_3_1': 1736.66, 'snr_subtraction_measured_SNR_seFoV250_2meas_slice5mm_tra_repeat_PSN_noDC_2_1': 220.73, 'snr_subtraction_normalised_SNR_seFoV250_2meas_slice5mm_tra_repeat_PSN_noDC_2_1': 2154.69 }

The optional --report flag allows the user to generate diagrams that visualise the image processing performed by each hazen Task:

| hazen snr tests/data/snr/Siemens --report | hazen acr_ghosting tests/data/acr/Siemens --report | |---------------------------------------------|------------------------------------------------------| | | |


Installation and usage

There are two main options for running hazen. 1. Install using Python and run directly via command line interface (CLI) 2. Run using the latest Docker container build

1) Python install and run (CLI)

hazen can be installed with Python 3.9, 3.10, 3.11 or 3.12 versions via pip.

It is strongly recommended to use a virtual environment, that can be made using the following commands.

```bash python3 -m venv hazen-venv source hazen-venv/bin/activate pip install hazen

Check that hazen was correctly installed and see which version it is:

hazen --version ```

Updating hazen

If you already have an old version of hazen installed, upgrade to the latest version with:

shell source hazen-venv/bin/activate pip install --upgrade pip pip install --upgrade hazen

Running hazen via CLI

The CLI version of hazen is designed to be pointed at single folders containing DICOM file(s). Example datasets are provided in the tests/data/ directory. If you are using the Docker version of hazen (installation described below), replace hazen with hazen-app in the following commands.

```bash

To see the full list of available Tasks and optional arguments, enter:

hazen -h

To perform the SNR Task on example data:

hazen snr tests/data/snr/Philips

The --report option generates additional visualisation about the image processing measurement methods and is available

for all Tasks. Example usage for the SNR Task, which returns images showing the regions used for SNR calculation.

hazen snr tests/data/snr/Philips --report

a directory path can be provided to save the report images to:

hazen snr tests/data/snr/Philips --report ./report_images ```

2) Docker

The Docker version of hazen has been made available as it is easy to get up-and-running and is linked to the most recent stable release. Refer to the Docker installation instructions to install Docker on your host computer.

The containerised version of hazen can be obtained from DockerHub (see commands below). For ease of use, it is recommended to copy the hazen-app script to a location accessible on the PATH such as /usr/local/bin. This will allow you to run hazen from any directory on your computer. Then, to use Docker hazen, simply run the hazen-app script appended with the function you want to use (e.g.: snr).

In Terminal:

```shell

Ensure Docker installed and running, then pull the latest hazen Docker container

docker pull gsttmriphysics/hazen:latest

Command line output will look something like:

latest: Pulling from gsttmriphysics/hazen Digest: sha256:18603e40b45f3af4bf45f07559a08a7833af92a6efe21cb7306f758e8eeab24a Status: Image is up to date for gsttmriphysics/hazen:latest docker.io/gsttmriphysics/hazen:latest

Copy the 'hazen-app' executable file into your local bin folder

cd hazen cp hazen-app /usr/local/bin

Run hazen via Docker with the normal CLI inputs

hazen-app snr tests/data/snr/Siemens/

Example command line output for the SNR Task:

{ 'snrsmoothingmeasuredSNRseFoV2502measslice5mmtrarepeatPSNnoDC21': 173.97, 'snrsmoothingmeasuredSNRseFoV2502measslice5mmtrarepeatPSNnoDC31': 177.91, 'snrsmoothingnormalisedSNRseFoV2502measslice5mmtrarepeatPSNnoDC21': 1698.21, 'snrsmoothingnormalisedSNRseFoV2502measslice5mmtrarepeatPSNnoDC31': 1736.66, 'snrsubtractionmeasuredSNRseFoV2502measslice5mmtrarepeatPSNnoDC21': 220.73, 'snrsubtractionnormalisedSNRseFoV2502measslice5mmtrarepeatPSNnoDC21': 2154.69 } ```

Web Interface

Development of a web interface for hazen is in progress.


Contributing to hazen

Users

Please raise an Issue for any of the following reasons: - Problems installing or running hazen - Suggestions for improvements - Requests for new features

We have used hazen with MRI data from a handful of different MRI scanners, including multiple different vendors. If hazen does not perform with your MRI data, or the results are unexpected, please raise an Issue.

Developers

Please see CONTRIBUTING.md for developer guidelines.


Owner

  • Name: Clinical Scientific Computing
  • Login: GSTT-CSC
  • Kind: organization
  • Location: United Kingdom

Clinical Scientific Computing @ Guy's & St. Thomas' NHS Foundation Trust

Citation (CITATION.cff)

# YAML 1.2
---
authors:
  -
    family-names: Jackson
    given-names: Laurence
    orcid: "https://orcid.org/0000-0002-5904-8012"
  -
    family-names: Roberts
    given-names: Thomas
    orcid: "https://orcid.org/0000-0003-0385-1057"
  -
    family-names: Cester
    given-names: Lucrezia
  -
    family-names: Vilic
    given-names: Dika
  -
    family-names: Ratkai
    given-names: Sophie
  -
    family-names: Culley
    given-names: Siân
    orcid: "https://orcid.org/0000-0003-2112-0143"
  -
    family-names: Azma
    given-names: Yassine
  -
    family-names: Gabriel
    given-names: Elizabeth
  -
    family-names: Ansell
    given-names: Jane
  -
    family-names: Heraghty
    given-names: Neil
  -
    family-names: Wilson
    given-names: Paul
  -
    family-names: Buckley
    given-names: Molly
  -
    family-names: Satnarine
    given-names: Ryan
  -
    family-names: Thornley
    given-names: Becky
  -
    family-names: Laureano
    given-names: Beatriz
  -
    family-names: Lowe
    given-names: Melissa
  -
    family-names: Shuaib
    given-names: Haris
    orcid: "https://orcid.org/0000-0001-6975-5960"
cff-version: "1.1.0"
date-released: 2025-01-14
message: "If you use hazen in your work, please cite it using these metadata."
repository-code: "https://github.com/GSTT-CSC/hazen"
title: hazen
version: "1.3.4"
...

GitHub Events

Total
  • Fork event: 1
  • Create event: 20
  • Commit comment event: 25
  • Release event: 1
  • Issues event: 11
  • Watch event: 9
  • Delete event: 8
  • Member event: 4
  • Issue comment event: 45
  • Push event: 36
  • Pull request event: 33
  • Pull request review event: 19
  • Pull request review comment event: 16
Last Year
  • Fork event: 1
  • Create event: 20
  • Commit comment event: 25
  • Release event: 1
  • Issues event: 11
  • Watch event: 9
  • Delete event: 8
  • Member event: 4
  • Issue comment event: 45
  • Push event: 36
  • Pull request event: 33
  • Pull request review event: 19
  • Pull request review comment event: 16

Issues and Pull Requests

Last synced: 6 months ago

All Time
  • Total issues: 25
  • Total pull requests: 56
  • Average time to close issues: 8 months
  • Average time to close pull requests: 24 days
  • Total issue authors: 10
  • Total pull request authors: 9
  • Average comments per issue: 1.24
  • Average comments per pull request: 0.82
  • Merged pull requests: 23
  • Bot issues: 0
  • Bot pull requests: 21
Past Year
  • Issues: 6
  • Pull requests: 19
  • Average time to close issues: N/A
  • Average time to close pull requests: 26 days
  • Issue authors: 3
  • Pull request authors: 7
  • Average comments per issue: 0.0
  • Average comments per pull request: 0.32
  • Merged pull requests: 4
  • Bot issues: 0
  • Bot pull requests: 7
Top Authors
Issue Authors
  • sophie22 (9)
  • abdrysdale (4)
  • RebeccaThornley (4)
  • mollybuckley (2)
  • YassineAzma (2)
  • laurencejackson (1)
  • DrSpacemanMD (1)
  • luissantosHCIT (1)
  • elizaGSTT (1)
  • rs-sprout98 (1)
Pull Request Authors
  • dependabot[bot] (21)
  • sophie22 (12)
  • mollybuckley (11)
  • abdrysdale (5)
  • RebeccaThornley (3)
  • rs-sprout98 (2)
  • xleyn (2)
  • Biaaaaaa12 (1)
  • sadeedwahmad (1)
Top Labels
Issue Labels
bug (12) enhancement (11) mri (4) DICOM (1) documentation (1) medium priority (1)
Pull Request Labels
github_actions (22) dependencies (21) bug (2) tests (1) python (1)

Dependencies

requirements.txt pypi
  • Flask ==1.1.4
  • Flask_Bootstrap4 ==4.0.2
  • Flask_Dropzone ==1.5.3
  • Flask_Login ==0.4.1
  • Flask_Mail ==0.9.1
  • Flask_Migrate ==2.5.1
  • Flask_Moment ==0.7.0
  • Flask_SQLAlchemy ==2.5.1
  • Flask_WTF ==0.14.2
  • MarkupSafe ==2.0.1
  • PyJWT ==1.7.1
  • SQLAlchemy ==1.4.28
  • SQLAlchemy_Utils ==0.37.9
  • WTForms ==2.2.1
  • Werkzeug ==0.16.1
  • alembic ==1.0.10
  • amqp ==5.0.9
  • arrow ==0.13.2
  • celery ==5.1.2
  • colorlog *
  • coverage >=6.0.2
  • docopt ==0.6.2
  • email_validator *
  • flask_bootstrap ==3.3.7.1
  • flask_heroku ==0.1.9
  • gunicorn ==19.9.0
  • imutils ==0.5.3
  • m2r ==0.2.1
  • matplotlib ==3.4.3
  • mistune <2.0.0
  • numpy ==1.21.4
  • opencv-python ==4.5.4.58
  • psycopg2-binary ==2.8.4
  • pydicom ==1.4.1
  • pytest >=6.2
  • python-dateutil *
  • scikit-image ==0.19.0
  • scipy ==1.7.2
  • sphinx_rtd_theme *
  • sphinxcontrib-napoleon *
  • sphinxcontrib-needs ==0.4.3
.github/workflows/publish_docker.yml actions
  • actions/checkout v2 composite
  • docker/build-push-action c56af957549030174b10d6867f20e78cfd7debc5 composite
  • docker/login-action f4ef78c080cd8ba55a85445d5b36e214a81df20a composite
  • docker/metadata-action 57396166ad8aefe6098280995947635806a0e6ea composite
.github/workflows/publish_pypi.yml actions
  • actions/checkout v3 composite
  • actions/setup-python v4 composite
  • pypa/gh-action-pypi-publish 27b31702a0e7fc50959f5ad993c78deac1bdfc29 composite
.github/workflows/test_cli.yml actions
  • actions/checkout v2 composite
  • actions/setup-python v4 composite
.github/workflows/tests_development.yml actions
  • MishaKav/pytest-coverage-comment main composite
  • actions/checkout v2 composite
  • actions/setup-python v4 composite
  • rbialon/flake8-annotations v1 composite
.github/workflows/tests_release.yml actions
  • MishaKav/pytest-coverage-comment main composite
  • actions/checkout v2 composite
  • actions/setup-python v4 composite
  • schneegans/dynamic-badges-action v1.6.0 composite
Dockerfile docker
  • python 3.9 build
pyproject.toml pypi