Skip to content

ar90n/vanilla-roll

This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Folders and files

NameName
Last commit message
Last commit date
Oct 28, 2022
Oct 28, 2022
Oct 28, 2022
Apr 9, 2023
May 28, 2022
May 28, 2022
Apr 9, 2023
May 28, 2022
Apr 20, 2023
May 28, 2022
Apr 24, 2024
Sep 30, 2023
May 28, 2022
Jan 8, 2023

Repository files navigation

vanilla-roll

Build Version Downloads Contributors Issues Codecov Apache License 2.0 License

vanilla-roll is volume renderer using array-api as backend.

Why vanilla-roll ?

VTK is one of the most excellent volume renderers in the world. It has good performance and many features. But I think that the installation process is not easy. So vanilla-roll is motivated to solve this problem.

Features

  • IO
    • MRA
    • NIFTI
    • DICOM
    • NRRD
  • Rendering Algorithm
    • Sampling
    • Shear-Warp
    • Raycast
  • Rendering Mode
    • MIP
    • MinP
    • Average
    • VolumeRendering
      • Ambient
      • Shading
  • Backend
    • numpy
    • pytorch
    • cupy
    • jax
    • numba

Installation

$ pip install vanilla-roll

vanilla-roll supports following extras

  • torch
  • dicom
  • mha
  • nifti

Example

Code

import urllib.request
from pathlib import Path
from tempfile import TemporaryDirectory

import numpy as np
import skimage.io

import vanilla_roll as vr

# from A high-resolution 7-Tesla fMRI dataset from complex natural stimulation with an audio movie
# https://www.openfmri.org/dataset/ds000113/
MRA_FILE_URL = "https://s3.amazonaws.com/openneuro/ds000113/ds000113_unrevisioned/uncompressed/sub003/angio/angio001.nii.gz"  # noqa: E501


def fetch_mra_volume() -> vr.volume.Volume:
    with TemporaryDirectory() as tmpdir:
        mra_file = Path(tmpdir) / "mra.nii.gz"
        urllib.request.urlretrieve(MRA_FILE_URL, mra_file)
        return vr.io.read_nifti(mra_file)


def save_result(ret: vr.rendering.types.RenderingResult, path: str):
    img_array = vr.rendering.convert_image_to_array(ret.image)
    skimage.io.imsave(path, np.from_dlpack(img_array))  # type: ignore


def main():
    volume = fetch_mra_volume()
    ret = vr.render(volume, mode=vr.rendering.mode.MIP())
    save_result(ret, f"result.png")


if __name__ == "__main__":
    main()

Output

output

If you need more exmplaes, please check the examples.

For development

Install Poery plugins

$ poetry self add 'poethepoet[poetry_plugin]'

Install all extra packages

$ poetry poe install-all-extras

Run tests

$ poetry poe test

Run linter and formatter

$ poetry poe check

See Also

License

Apache-2.0