Skip to main content

A simple array based volume renderer

Project description

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
    • numbda

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

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

vanilla_roll-0.3.0.tar.gz (31.8 kB view hashes)

Uploaded Source

Built Distribution

vanilla_roll-0.3.0-py3-none-any.whl (41.0 kB view hashes)

Uploaded Python 3

Supported by

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