Skip to content

Python version of the "A quality control system for automated prostate segmentation on T2-weighted MRI"

License

Notifications You must be signed in to change notification settings

ntnu-mr-cancer/pyPSQC

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PyPI

pyPSQC

Prostate Segmentation Quality Control System

A quality control system for automated prostate segmentation on T2-weighted MRI This is the python version of the "A quality control system for automated prostate segmentation on T2-weighted MRI"

This is a fully automated quality control system that generate a quality score and class for assessing the accuracy of automated prostate segmentations on T2W MR imagese.

This fully automated quality control system employs radiomics features for estimating the quality of deep-learning based prostate segmentation on T2W MR images. The performance of our system is developed and tested using two data cohorts and 4 different deep-learning based segmentation algorithms.

The method was developed at the CIMORe group at the Norwegian University of Science and Technology (NTNU) in Trondheim, Norway. https://www.ntnu.edu/isb/cimore

For detailed information about this method, please read our paper: https://www.mdpi.com/2075-4418/10/9/714

Note

The provided algorithm was developed for research use and was NOT meant to be used in clinic.

Structure

pyPSQC/
├── LICENSE
├── pyproject.toml
├── README.md
├── setup.cfg
├── src/
│   └── pyPSQC/
│       ├── __init__.py
│       ├── psqc.py
│       ├── prepare_data.py
│       ├── feature_extraction.py
│       ├── quality_prediction.py
│       ├── utils.py
│       ├── MANIFEST.in
│       └── model_coef.json

Installation

You can install the package either from pip or using pip or the files in GitHub repository https://github.com/MohammedSunoqrot/pyPSQC

pip

Simply type:

pip install pyPSQC

GitHub

  • Clone the GitHub repository

    From command line

    git clone https://github.com/MohammedSunoqrot/pyPSQC.git
    
  • Change directory to the clones folder (unzip if needed) and type

    pip install . 
    

MATLAB version

This python version is translation the originally published MATLAB® version [https://github.com/ntnu-mr-cancer/SegmentationQualityControl]. If you want to use it in MATLAB®, check the repository.

How to cite the system/pyPSQC

In case of using or refering to this system/package, please cite it as:

Sunoqrot, M.R.S.; Selnæs, K.M.; Sandsmark, E.; Nketiah, G.A.; Zavala-Romero, O.; Stoyanova, R.; Bathen, T.F.; Elschot, M. A Quality Control System for Automated Prostate Segmentation on T2-Weighted MRI. Diagnostics 2020,10, 714. https://doi.org/10.3390/diagnostics10090714

How to use pyPSQC

To use the system to predict a segmentation/mask quality score and class, you first need to import the psqc function. You can do it by calling from pyPSQC import psqc

psqc Function

  • Parameters:

    • input_image_path (str): The file path to the input 3D image (any supported SimpleITK format) or to the DICOM folder.
    • input_mask_path (str): Path to the corresponding mask of the input 3D image. Any supported SimpleITK format or DICOM folder.
    • input_normalized (bool, optional): Whether the input image is normalized. Default is False.
    • quality_class_threshold (float, optional): Threshold for classifying quality. It can be between [0 - 100]. Default is 85.
  • Returns:

    • quality_score (float): Calculated and capped quality score. It represents a perecentage [min = 0%, max 100%].
    • quality_class (str): Classification result ("Acceptable" or "NOT Acceptable").

Important notes

  • The quality_score represents a perecentage [min = 0%, max 100%]
  • If the input image normalized (the method deigned to get images normalized with AutoRef), Set input_normalizedto True, otherwise skip it or set it to False
  • The quality_class_threshold must be between 0-100. Ny default set to 85

Supported input/output formats

DICOM Series is recognized when there is no file extension

Examples of usage:

Example (image: medical image format, mask: medical image format):

from pyPSQC import psqc

input_image_path = r"C:\Data\Case10_t2.nii.gz"
input_mask_path = r"C:\Data\Case10_t2_normalized_segmentation.nii.gz"
input_normalized = False
quality_class_threshold = 85

quality_score, quality_class = psqc(input_image_path, input_mask_path, input_normalized, quality_class_threshold)

Example (image: medical image format, mask: DICOM Series):

from pyPSQC import psqc

input_image_path = r"C:\Data\Case10_t2.nii.gz"
input_mask_path = r"C:\Data\Case10_t2_segmentation"
input_normalized = False
quality_class_threshold = 85

quality_score, quality_class = psqc(input_image_path, input_mask_path, input_normalized, quality_class_threshold)

Example (image: DICOM Series, mask: medical image format):

from pyPSQC import psqc

input_image_path = r"C:\Data\Case10_t2"
input_mask_path = r"C:\Data\Case10_t2_segmentation.nii.gz"
input_normalized = True
quality_class_threshold = 88

quality_score, quality_class = psqc(input_image_path, input_mask_path, input_normalized, quality_class_threshold)

Example (image: DICOM Series, mask: DICOM Series):

from pyPSQC import psqc

input_image_path = r"C:\Data\Case10_t2"
input_mask_path = r"C:\Data\Case10_t2_segmentation"
input_normalized = False
quality_class_threshold = 87

quality_score, quality_class = psqc(input_image_path, input_mask_path, input_normalized, quality_class_threshold)

Retrain the system

If you want to retrain the sytem to fit your data better, you need to do it in MATLAB®.

Follow the instructions in "Retrain". [https://github.com/ntnu-mr-cancer/SegmentationQualityControl/tree/master/Retrain] There you will find a detailed desctiotion and all the codes you need to do the training.

To update thi python package after retraining the system:

  • Export trainedModel.coef to model_coef.json and replace this packge file pyPSQC/src/pyPSQC/model_coef.json with your new file.
    • This code can help you in the exportation:
    % Save the coefficients array as a JSON file
    jsonStr = jsonencode(trainedModel.coef);
    jsonFileName = 'model_coef.json';
    fid = fopen(jsonFileName, 'w');
    fprintf(fid, '%s', jsonStr);
    fclose(fid);
    disp(['Coefficients array saved as ' jsonFileName]);
    
  • Get the trainedModel.Intercept value and replace the value of intercept in pyPSQC/src/pyPSQC/quality_prediction.py with it.

Contact us

Feel free to contact us: [email protected]

About

Python version of the "A quality control system for automated prostate segmentation on T2-weighted MRI"

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 100.0%