Skip to main content

A toolbox for fundus image analysis

Project description

Fundus Image Toolbox

Logo
Fundus quality prediction A quality prediction model for fundus images (gradeable vs. ungradeable) based on an ensemble of 10 models (ResNets and EfficientNets) trained on DeepDRiD and DrimDB data. Can be just used for prediction or retrained.
Read more.
Example image
Fundus fovea and optic disc localization A model to predict the center coordinates of the fovea and the optic disc in fundus images based on a multi-task EfficientNet trained on ADAM, REFUGE and IDRID datasets. Can be just used for prediction or retrained.
Read more.
Example image
Example predictions from the external dataset "DeepDRiD".
Fundus registration Align a fundus photograph to another fundus photograph from the same eye using SuperRetina (Liu et al., 2022). Image registration also goes by the terms image alignment and image matching.
Read more.
Example image
Fundus vessel segmentation Segment the blood vessels in a fundus image using an ensemble of FR-U-Nets trained on the FIVES dataset (Köhler et al., 2024).
Read more.
Example image
Fundus circle crop Fastly crop fundus images to a circle and center it (Fu et al., 2019).
Read more.
Example image
Fundus utilities A collection of additional utilities that can come in handy when working with fundus images.
Read more.
  • ImageTorchUtils: Image manipulation based on Pytorch tensors.
  • Balancing: A script to balance a torch dataset by both oversampling the minority class and undersampling the majority class from imbalanced-dataset-sampler.
  • Fundus transforms: A collection of torchvision data augmentation transforms to apply to fundus images adapted from pytorch-classification.
  • Get pixel mean std: A script to calculate the mean and standard deviation of the pixel values of a dataset by channel.
  • Get efficientnet resnet: Getter for torchvision models with efficientnet and resnet architectures initialized with ImageNet weights.
  • Lr scheduler: Get a pytorch learning rate scheduler (plus a warmup scheduler) for a given optimizer: OneCycleLR, CosineAnnealingLR, CosineAnnealingWarmRestarts.
  • Multilevel 3-way split: Split a pandas dataframe into train, validation and test splits with the options to split by group (i.e. keep groups together) and stratify by label. Wrapper for multi_level_split.
  • Seed everything: Set seed for reproducibility in python, numpy and torch.

Usage

The following code summarises the usage of the toolbox. See the usage_all.ipynb for a tutorial notebook and examples directory for more detailed usage examples information on the respective packages.

# Get sample images. All methods work on path(s) to image(s) or on image(s) as numpy arrays, tensors or PIL images.
fundus1, fundus2 = "path/to/fundus1.jpg", "path/to/fundus2.jpg"
import fundus_image_toolbox as fit
fundus1_cropped = fit.crop(fundus1, size=(512,512)) # > np.ndarray (512, 512, 3) uint8
import fundus_image_toolbox as fit
model, _ = fit.load_fovea_od_model(device="cuda:0")
coordinates = model.predict([fundus1, fundus2]) # > List[np.ndarray[fovea_x,fovea_y,od_x,od_y], ...]
fit.plot_coordinates([fundus1, fundus2], coordinates)
import fundus_image_toolbox as fit
ensemble = fit.load_quality_ensemble(device="cuda:0")
confs, labels = fit.ensemble_predict_quality(ensemble, [fundus1, fundus2], threshold=0.5) # > np.ndarray[conf1, conf2], np.ndarray[label1, label2]
for img, conf, label in zip([fundus1, fundus2], confs, labels):
    fit.plot_quality(img, conf, label, threshold=0.5)
import fundus_image_toolbox as fit

config = fit.get_registration_config()
# if wanted, change the config dictionary
model, matcher = fit.load_registration_model(config)

moving_image_aligned = fit.register(
    fundus1, 
    fundus2, 
    show=True, 
    show_mapping=False, 
    config=config, 
    model=model, 
    matcher=matcher
) # > np.ndarray (h_in, w_in, 3) uint8
import fundus_image_toolbox as fit
ensemble = fit.load_segmentation_ensemble(device=device)
vessel_masks = fit.ensemble_predict_segmentation(ensemble, [fundus1, fundus2], threshold=0.5, size=(512, 512)) # > np.ndarray[np.ndarray[h_in, w_in], ...] float64
fit.plot_masks([fundus1, fundus2], vessel_masks)

Installation

Install the toolbox

You can install the latest tagged version of the toolbox by running:

pip install fundus_image_toolbox

or the development version by running:

pip install git+https://github.com/berenslab/fundus_image_toolbox

Create a virtual environment

Alternatively, you can create a new conda environment and install the toolbox there:

conda create --name fundus_image_toolbox python=3.9.19 pip
conda activate fundus_image_toolbox

And then pip install fundus_image_toolbox or pip install . within the new environment.
Or create a new virtual environment including the toolbox with uv:

uv venv
source .venv/bin/activate

Contribute

You are very welcome to contribute to the toolbox. Please raise an issue or create a pull request to do so. Please feel free to contact us if you have any questions or need help via julius.gervelmeyer [at] uni-tuebingen.de.

Cite

If you use this toolbox in your research, please consider citing it:

TODO: Have a doi to cite. Currently, this work is under review.

If you use external parts of the toolbox that this toolbox provides an interface for, please consider citing the respective papers:

License

The toolbox is licensed under the MIT License. See the license file for more information.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

fundus_image_toolbox-0.1.0.tar.gz (4.8 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

fundus_image_toolbox-0.1.0-py3-none-any.whl (4.8 MB view details)

Uploaded Python 3

File details

Details for the file fundus_image_toolbox-0.1.0.tar.gz.

File metadata

  • Download URL: fundus_image_toolbox-0.1.0.tar.gz
  • Upload date:
  • Size: 4.8 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for fundus_image_toolbox-0.1.0.tar.gz
Algorithm Hash digest
SHA256 9da01125e06918047ad44eb16cb974bdf6380d8c079c1047ee67708b02ebbe14
MD5 0967ea6532593f6eee51e8822d3ff5f4
BLAKE2b-256 5b7b26d566aaa90cc0f57376d6f7772119a4c7cc8e31e02f7a6eeec04f5ad508

See more details on using hashes here.

File details

Details for the file fundus_image_toolbox-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for fundus_image_toolbox-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 23777cf8bd68b2efea8cb4bc8a5753e4ed54ae0cbee875e33b8e9bb2f4fc7eee
MD5 93a85505dfff8a02657d314a61480caf
BLAKE2b-256 80e1cf04b750bc4febf8a53357b6b89c5c0cccdd953b258a15fc85561fda6be4

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page