[ ]:
%matplotlib inline

Tutorial for Leonardo as a complete pipeline#

Open In Colab

This tutorial shows how to apply Leonardo to fuse datasets, specifically with dual-sided illumination, and remove stripe artifacts with optimal processing time.

The data used here is available in zenodo. We use volumes “D2_I0.tif” and “D2_I1.tif” for this tutorial. Here, “I0” and “I1” mean two opposite illumination lenses.

As a normal workflow, stripe removal can be performed on each individual input stack separately, followed by image fusion. However, Leonardo-DeStripes requires much longer processing time than Leonaro-Fuse in practice. Hence, we here propose Leonardo-DeStripe-Fuse, which applies fusion before stripe removal without copromising the performance.

Import packages & data#

[ ]:
# in case Leonardo is not installed yet
!pip install leonardo_toolset
Collecting leonardo_toolset
  Downloading leonardo_toolset-0.1.1-py2.py3-none-any.whl.metadata (5.1 kB)
Collecting lsfm-destripe (from leonardo_toolset)
  Downloading lsfm_destripe-0.2.0-py2.py3-none-any.whl.metadata (9.0 kB)
Collecting lsfm-fuse (from leonardo_toolset)
  Downloading lsfm_fuse-0.1.2-py2.py3-none-any.whl.metadata (17 kB)
Requirement already satisfied: numpy<2.0 in /usr/local/lib/python3.11/dist-packages (from leonardo_toolset) (1.26.4)
Requirement already satisfied: jax[cuda] in /usr/local/lib/python3.11/dist-packages (from lsfm-destripe->leonardo_toolset) (0.4.33)
Requirement already satisfied: scikit-image in /usr/local/lib/python3.11/dist-packages (from lsfm-destripe->leonardo_toolset) (0.25.0)
Requirement already satisfied: torch in /usr/local/lib/python3.11/dist-packages (from lsfm-destripe->leonardo_toolset) (2.5.1+cu121)
Requirement already satisfied: torchvision in /usr/local/lib/python3.11/dist-packages (from lsfm-destripe->leonardo_toolset) (0.20.1+cu121)
Collecting aicsimageio (from lsfm-destripe->leonardo_toolset)
  Downloading aicsimageio-4.14.0-py2.py3-none-any.whl.metadata (20 kB)
Requirement already satisfied: tqdm in /usr/local/lib/python3.11/dist-packages (from lsfm-destripe->leonardo_toolset) (4.67.1)
Requirement already satisfied: matplotlib in /usr/local/lib/python3.11/dist-packages (from lsfm-destripe->leonardo_toolset) (3.10.0)
Collecting dm-haiku (from lsfm-destripe->leonardo_toolset)
  Downloading dm_haiku-0.0.13-py3-none-any.whl.metadata (19 kB)
Collecting SimpleITK (from lsfm-destripe->leonardo_toolset)
  Downloading SimpleITK-2.4.1-cp311-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (7.9 kB)
Collecting jaxwt (from lsfm-destripe->leonardo_toolset)
  Downloading jaxwt-0.1.1-py3-none-any.whl.metadata (7.2 kB)
Collecting ptwt (from lsfm-destripe->leonardo_toolset)
  Downloading ptwt-0.1.9-py3-none-any.whl.metadata (9.3 kB)
Collecting PyWavelets (from lsfm-destripe->leonardo_toolset)
  Downloading pywavelets-1.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (9.0 kB)
Collecting antspyx (from lsfm-fuse->leonardo_toolset)
  Downloading antspyx-0.5.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (6.7 kB)
Requirement already satisfied: opencv-python in /usr/local/lib/python3.11/dist-packages (from lsfm-fuse->leonardo_toolset) (4.10.0.84)
Requirement already satisfied: colour in /usr/local/lib/python3.11/dist-packages (from lsfm-fuse->leonardo_toolset) (0.1.5)
Collecting open3d (from lsfm-fuse->leonardo_toolset)
  Downloading open3d-0.19.0-cp311-cp311-manylinux_2_31_x86_64.whl.metadata (4.3 kB)
Requirement already satisfied: h5py in /usr/local/lib/python3.11/dist-packages (from lsfm-fuse->leonardo_toolset) (3.12.1)
Requirement already satisfied: dask>=2021.4.1 in /usr/local/lib/python3.11/dist-packages (from dask[array]>=2021.4.1->aicsimageio->lsfm-destripe->leonardo_toolset) (2024.10.0)
Collecting fsspec<2023.9.0,>=2022.8.0 (from aicsimageio->lsfm-destripe->leonardo_toolset)
  Downloading fsspec-2023.6.0-py3-none-any.whl.metadata (6.7 kB)
Collecting imagecodecs>=2020.5.30 (from aicsimageio->lsfm-destripe->leonardo_toolset)
  Downloading imagecodecs-2024.12.30-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (19 kB)
Collecting lxml<5,>=4.6 (from aicsimageio->lsfm-destripe->leonardo_toolset)
  Downloading lxml-4.9.4-cp311-cp311-manylinux_2_28_x86_64.whl.metadata (3.7 kB)
Collecting ome-types>=0.3.4 (from aicsimageio->lsfm-destripe->leonardo_toolset)
  Downloading ome_types-0.5.3-py3-none-any.whl.metadata (11 kB)
Collecting ome-zarr>=0.6.1 (from aicsimageio->lsfm-destripe->leonardo_toolset)
  Downloading ome_zarr-0.10.3-py3-none-any.whl.metadata (3.1 kB)
Requirement already satisfied: PyYAML>=6.0 in /usr/local/lib/python3.11/dist-packages (from aicsimageio->lsfm-destripe->leonardo_toolset) (6.0.2)
Requirement already satisfied: wrapt>=1.12 in /usr/local/lib/python3.11/dist-packages (from aicsimageio->lsfm-destripe->leonardo_toolset) (1.17.0)
Collecting resource-backed-dask-array>=0.1.0 (from aicsimageio->lsfm-destripe->leonardo_toolset)
  Downloading resource_backed_dask_array-0.1.0-py2.py3-none-any.whl.metadata (6.5 kB)
Collecting tifffile<2023.3.15,>=2021.8.30 (from aicsimageio->lsfm-destripe->leonardo_toolset)
  Downloading tifffile-2023.2.28-py3-none-any.whl.metadata (30 kB)
Requirement already satisfied: xarray>=0.16.1 in /usr/local/lib/python3.11/dist-packages (from aicsimageio->lsfm-destripe->leonardo_toolset) (2025.1.1)
Collecting xmlschema (from aicsimageio->lsfm-destripe->leonardo_toolset)
  Downloading xmlschema-3.4.3-py3-none-any.whl.metadata (8.3 kB)
Collecting zarr<2.16.0,>=2.6 (from aicsimageio->lsfm-destripe->leonardo_toolset)
  Downloading zarr-2.15.0-py3-none-any.whl.metadata (5.4 kB)
Requirement already satisfied: pandas in /usr/local/lib/python3.11/dist-packages (from antspyx->lsfm-fuse->leonardo_toolset) (2.2.2)
Requirement already satisfied: statsmodels in /usr/local/lib/python3.11/dist-packages (from antspyx->lsfm-fuse->leonardo_toolset) (0.14.4)
Requirement already satisfied: webcolors in /usr/local/lib/python3.11/dist-packages (from antspyx->lsfm-fuse->leonardo_toolset) (24.11.1)
Requirement already satisfied: Pillow in /usr/local/lib/python3.11/dist-packages (from antspyx->lsfm-fuse->leonardo_toolset) (11.1.0)
Requirement already satisfied: requests in /usr/local/lib/python3.11/dist-packages (from antspyx->lsfm-fuse->leonardo_toolset) (2.32.3)
Requirement already satisfied: absl-py>=0.7.1 in /usr/local/lib/python3.11/dist-packages (from dm-haiku->lsfm-destripe->leonardo_toolset) (1.4.0)
Collecting jmp>=0.0.2 (from dm-haiku->lsfm-destripe->leonardo_toolset)
  Downloading jmp-0.0.4-py3-none-any.whl.metadata (8.9 kB)
Requirement already satisfied: tabulate>=0.8.9 in /usr/local/lib/python3.11/dist-packages (from dm-haiku->lsfm-destripe->leonardo_toolset) (0.9.0)
Requirement already satisfied: jaxlib<=0.4.33,>=0.4.33 in /usr/local/lib/python3.11/dist-packages (from jax[cuda]->lsfm-destripe->leonardo_toolset) (0.4.33)
Requirement already satisfied: ml-dtypes>=0.2.0 in /usr/local/lib/python3.11/dist-packages (from jax[cuda]->lsfm-destripe->leonardo_toolset) (0.4.1)
Requirement already satisfied: opt-einsum in /usr/local/lib/python3.11/dist-packages (from jax[cuda]->lsfm-destripe->leonardo_toolset) (3.4.0)
Requirement already satisfied: scipy>=1.10 in /usr/local/lib/python3.11/dist-packages (from jax[cuda]->lsfm-destripe->leonardo_toolset) (1.13.1)
Requirement already satisfied: jax-cuda12-plugin<=0.4.33,>=0.4.33 in /usr/local/lib/python3.11/dist-packages (from jax-cuda12-plugin[with_cuda]<=0.4.33,>=0.4.33; extra == "cuda"->jax[cuda]->lsfm-destripe->leonardo_toolset) (0.4.33)
Requirement already satisfied: contourpy>=1.0.1 in /usr/local/lib/python3.11/dist-packages (from matplotlib->lsfm-destripe->leonardo_toolset) (1.3.1)
Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.11/dist-packages (from matplotlib->lsfm-destripe->leonardo_toolset) (0.12.1)
Requirement already satisfied: fonttools>=4.22.0 in /usr/local/lib/python3.11/dist-packages (from matplotlib->lsfm-destripe->leonardo_toolset) (4.55.3)
Requirement already satisfied: kiwisolver>=1.3.1 in /usr/local/lib/python3.11/dist-packages (from matplotlib->lsfm-destripe->leonardo_toolset) (1.4.8)
Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.11/dist-packages (from matplotlib->lsfm-destripe->leonardo_toolset) (24.2)
Requirement already satisfied: pyparsing>=2.3.1 in /usr/local/lib/python3.11/dist-packages (from matplotlib->lsfm-destripe->leonardo_toolset) (3.2.1)
Requirement already satisfied: python-dateutil>=2.7 in /usr/local/lib/python3.11/dist-packages (from matplotlib->lsfm-destripe->leonardo_toolset) (2.8.2)
Collecting dash>=2.6.0 (from open3d->lsfm-fuse->leonardo_toolset)
  Downloading dash-2.18.2-py3-none-any.whl.metadata (10 kB)
Requirement already satisfied: werkzeug>=3.0.0 in /usr/local/lib/python3.11/dist-packages (from open3d->lsfm-fuse->leonardo_toolset) (3.1.3)
Requirement already satisfied: flask>=3.0.0 in /usr/local/lib/python3.11/dist-packages (from open3d->lsfm-fuse->leonardo_toolset) (3.1.0)
Requirement already satisfied: nbformat>=5.7.0 in /usr/local/lib/python3.11/dist-packages (from open3d->lsfm-fuse->leonardo_toolset) (5.10.4)
Collecting configargparse (from open3d->lsfm-fuse->leonardo_toolset)
  Downloading ConfigArgParse-1.7-py3-none-any.whl.metadata (23 kB)
Collecting ipywidgets>=8.0.4 (from open3d->lsfm-fuse->leonardo_toolset)
  Downloading ipywidgets-8.1.5-py3-none-any.whl.metadata (2.3 kB)
Collecting addict (from open3d->lsfm-fuse->leonardo_toolset)
  Downloading addict-2.4.0-py3-none-any.whl.metadata (1.0 kB)
Requirement already satisfied: scikit-learn>=0.21 in /usr/local/lib/python3.11/dist-packages (from open3d->lsfm-fuse->leonardo_toolset) (1.6.0)
Collecting pyquaternion (from open3d->lsfm-fuse->leonardo_toolset)
  Downloading pyquaternion-0.9.9-py3-none-any.whl.metadata (1.4 kB)
Requirement already satisfied: networkx>=3.0 in /usr/local/lib/python3.11/dist-packages (from scikit-image->lsfm-destripe->leonardo_toolset) (3.4.2)
Requirement already satisfied: imageio!=2.35.0,>=2.33 in /usr/local/lib/python3.11/dist-packages (from scikit-image->lsfm-destripe->leonardo_toolset) (2.36.1)
Requirement already satisfied: lazy-loader>=0.4 in /usr/local/lib/python3.11/dist-packages (from scikit-image->lsfm-destripe->leonardo_toolset) (0.4)
Requirement already satisfied: filelock in /usr/local/lib/python3.11/dist-packages (from torch->lsfm-destripe->leonardo_toolset) (3.16.1)
Requirement already satisfied: typing-extensions>=4.8.0 in /usr/local/lib/python3.11/dist-packages (from torch->lsfm-destripe->leonardo_toolset) (4.12.2)
Requirement already satisfied: jinja2 in /usr/local/lib/python3.11/dist-packages (from torch->lsfm-destripe->leonardo_toolset) (3.1.5)
Requirement already satisfied: nvidia-cuda-nvrtc-cu12==12.1.105 in /usr/local/lib/python3.11/dist-packages (from torch->lsfm-destripe->leonardo_toolset) (12.1.105)
Requirement already satisfied: nvidia-cuda-runtime-cu12==12.1.105 in /usr/local/lib/python3.11/dist-packages (from torch->lsfm-destripe->leonardo_toolset) (12.1.105)
Requirement already satisfied: nvidia-cuda-cupti-cu12==12.1.105 in /usr/local/lib/python3.11/dist-packages (from torch->lsfm-destripe->leonardo_toolset) (12.1.105)
Requirement already satisfied: nvidia-cudnn-cu12==9.1.0.70 in /usr/local/lib/python3.11/dist-packages (from torch->lsfm-destripe->leonardo_toolset) (9.1.0.70)
Requirement already satisfied: nvidia-cublas-cu12==12.1.3.1 in /usr/local/lib/python3.11/dist-packages (from torch->lsfm-destripe->leonardo_toolset) (12.1.3.1)
Requirement already satisfied: nvidia-cufft-cu12==11.0.2.54 in /usr/local/lib/python3.11/dist-packages (from torch->lsfm-destripe->leonardo_toolset) (11.0.2.54)
Requirement already satisfied: nvidia-curand-cu12==10.3.2.106 in /usr/local/lib/python3.11/dist-packages (from torch->lsfm-destripe->leonardo_toolset) (10.3.2.106)
Requirement already satisfied: nvidia-cusolver-cu12==11.4.5.107 in /usr/local/lib/python3.11/dist-packages (from torch->lsfm-destripe->leonardo_toolset) (11.4.5.107)
Requirement already satisfied: nvidia-cusparse-cu12==12.1.0.106 in /usr/local/lib/python3.11/dist-packages (from torch->lsfm-destripe->leonardo_toolset) (12.1.0.106)
Requirement already satisfied: nvidia-nccl-cu12==2.21.5 in /usr/local/lib/python3.11/dist-packages (from torch->lsfm-destripe->leonardo_toolset) (2.21.5)
Requirement already satisfied: nvidia-nvtx-cu12==12.1.105 in /usr/local/lib/python3.11/dist-packages (from torch->lsfm-destripe->leonardo_toolset) (12.1.105)
Requirement already satisfied: triton==3.1.0 in /usr/local/lib/python3.11/dist-packages (from torch->lsfm-destripe->leonardo_toolset) (3.1.0)
Requirement already satisfied: sympy==1.13.1 in /usr/local/lib/python3.11/dist-packages (from torch->lsfm-destripe->leonardo_toolset) (1.13.1)
Requirement already satisfied: nvidia-nvjitlink-cu12 in /usr/local/lib/python3.11/dist-packages (from nvidia-cusolver-cu12==11.4.5.107->torch->lsfm-destripe->leonardo_toolset) (12.6.85)
Requirement already satisfied: mpmath<1.4,>=1.1.0 in /usr/local/lib/python3.11/dist-packages (from sympy==1.13.1->torch->lsfm-destripe->leonardo_toolset) (1.3.0)
Collecting flask>=3.0.0 (from open3d->lsfm-fuse->leonardo_toolset)
  Downloading flask-3.0.3-py3-none-any.whl.metadata (3.2 kB)
Collecting werkzeug>=3.0.0 (from open3d->lsfm-fuse->leonardo_toolset)
  Downloading werkzeug-3.0.6-py3-none-any.whl.metadata (3.7 kB)
Requirement already satisfied: plotly>=5.0.0 in /usr/local/lib/python3.11/dist-packages (from dash>=2.6.0->open3d->lsfm-fuse->leonardo_toolset) (5.24.1)
Collecting dash-html-components==2.0.0 (from dash>=2.6.0->open3d->lsfm-fuse->leonardo_toolset)
  Downloading dash_html_components-2.0.0-py3-none-any.whl.metadata (3.8 kB)
Collecting dash-core-components==2.0.0 (from dash>=2.6.0->open3d->lsfm-fuse->leonardo_toolset)
  Downloading dash_core_components-2.0.0-py3-none-any.whl.metadata (2.9 kB)
Collecting dash-table==5.0.0 (from dash>=2.6.0->open3d->lsfm-fuse->leonardo_toolset)
  Downloading dash_table-5.0.0-py3-none-any.whl.metadata (2.4 kB)
Requirement already satisfied: importlib-metadata in /usr/local/lib/python3.11/dist-packages (from dash>=2.6.0->open3d->lsfm-fuse->leonardo_toolset) (8.5.0)
Collecting retrying (from dash>=2.6.0->open3d->lsfm-fuse->leonardo_toolset)
  Downloading retrying-1.3.4-py3-none-any.whl.metadata (6.9 kB)
Requirement already satisfied: nest-asyncio in /usr/local/lib/python3.11/dist-packages (from dash>=2.6.0->open3d->lsfm-fuse->leonardo_toolset) (1.6.0)
Requirement already satisfied: setuptools in /usr/local/lib/python3.11/dist-packages (from dash>=2.6.0->open3d->lsfm-fuse->leonardo_toolset) (75.1.0)
Requirement already satisfied: click>=8.1 in /usr/local/lib/python3.11/dist-packages (from dask>=2021.4.1->dask[array]>=2021.4.1->aicsimageio->lsfm-destripe->leonardo_toolset) (8.1.8)
Requirement already satisfied: cloudpickle>=3.0.0 in /usr/local/lib/python3.11/dist-packages (from dask>=2021.4.1->dask[array]>=2021.4.1->aicsimageio->lsfm-destripe->leonardo_toolset) (3.1.0)
Requirement already satisfied: partd>=1.4.0 in /usr/local/lib/python3.11/dist-packages (from dask>=2021.4.1->dask[array]>=2021.4.1->aicsimageio->lsfm-destripe->leonardo_toolset) (1.4.2)
Requirement already satisfied: toolz>=0.10.0 in /usr/local/lib/python3.11/dist-packages (from dask>=2021.4.1->dask[array]>=2021.4.1->aicsimageio->lsfm-destripe->leonardo_toolset) (0.12.1)
Requirement already satisfied: itsdangerous>=2.1.2 in /usr/local/lib/python3.11/dist-packages (from flask>=3.0.0->open3d->lsfm-fuse->leonardo_toolset) (2.2.0)
Requirement already satisfied: blinker>=1.6.2 in /usr/local/lib/python3.11/dist-packages (from flask>=3.0.0->open3d->lsfm-fuse->leonardo_toolset) (1.9.0)
Collecting comm>=0.1.3 (from ipywidgets>=8.0.4->open3d->lsfm-fuse->leonardo_toolset)
  Downloading comm-0.2.2-py3-none-any.whl.metadata (3.7 kB)
Requirement already satisfied: ipython>=6.1.0 in /usr/local/lib/python3.11/dist-packages (from ipywidgets>=8.0.4->open3d->lsfm-fuse->leonardo_toolset) (7.34.0)
Requirement already satisfied: traitlets>=4.3.1 in /usr/local/lib/python3.11/dist-packages (from ipywidgets>=8.0.4->open3d->lsfm-fuse->leonardo_toolset) (5.7.1)
Collecting widgetsnbextension~=4.0.12 (from ipywidgets>=8.0.4->open3d->lsfm-fuse->leonardo_toolset)
  Downloading widgetsnbextension-4.0.13-py3-none-any.whl.metadata (1.6 kB)
Requirement already satisfied: jupyterlab-widgets~=3.0.12 in /usr/local/lib/python3.11/dist-packages (from ipywidgets>=8.0.4->open3d->lsfm-fuse->leonardo_toolset) (3.0.13)
Requirement already satisfied: jax-cuda12-pjrt==0.4.33 in /usr/local/lib/python3.11/dist-packages (from jax-cuda12-plugin<=0.4.33,>=0.4.33->jax-cuda12-plugin[with_cuda]<=0.4.33,>=0.4.33; extra == "cuda"->jax[cuda]->lsfm-destripe->leonardo_toolset) (0.4.33)
Requirement already satisfied: nvidia-cuda-nvcc-cu12>=12.1.105 in /usr/local/lib/python3.11/dist-packages (from jax-cuda12-plugin[with_cuda]<=0.4.33,>=0.4.33; extra == "cuda"->jax[cuda]->lsfm-destripe->leonardo_toolset) (12.6.85)
Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.11/dist-packages (from jinja2->torch->lsfm-destripe->leonardo_toolset) (3.0.2)
Requirement already satisfied: fastjsonschema>=2.15 in /usr/local/lib/python3.11/dist-packages (from nbformat>=5.7.0->open3d->lsfm-fuse->leonardo_toolset) (2.21.1)
Requirement already satisfied: jsonschema>=2.6 in /usr/local/lib/python3.11/dist-packages (from nbformat>=5.7.0->open3d->lsfm-fuse->leonardo_toolset) (4.23.0)
Requirement already satisfied: jupyter-core!=5.0.*,>=4.12 in /usr/local/lib/python3.11/dist-packages (from nbformat>=5.7.0->open3d->lsfm-fuse->leonardo_toolset) (5.7.2)
Requirement already satisfied: pydantic!=2.0,!=2.1,!=2.2,!=2.3,>=1.10.16 in /usr/local/lib/python3.11/dist-packages (from ome-types>=0.3.4->aicsimageio->lsfm-destripe->leonardo_toolset) (2.10.5)
Collecting pydantic-compat>=0.1.0 (from ome-types>=0.3.4->aicsimageio->lsfm-destripe->leonardo_toolset)
  Downloading pydantic_compat-0.1.2-py3-none-any.whl.metadata (8.4 kB)
Collecting xsdata<24.4,>=23.6 (from ome-types>=0.3.4->aicsimageio->lsfm-destripe->leonardo_toolset)
  Downloading xsdata-24.3.1-py3-none-any.whl.metadata (6.3 kB)
Collecting distributed (from ome-zarr>=0.6.1->aicsimageio->lsfm-destripe->leonardo_toolset)
  Downloading distributed-2025.1.0-py3-none-any.whl.metadata (3.3 kB)
Requirement already satisfied: aiohttp<4 in /usr/local/lib/python3.11/dist-packages (from ome-zarr>=0.6.1->aicsimageio->lsfm-destripe->leonardo_toolset) (3.11.11)
Requirement already satisfied: pytz>=2020.1 in /usr/local/lib/python3.11/dist-packages (from pandas->antspyx->lsfm-fuse->leonardo_toolset) (2024.2)
Requirement already satisfied: tzdata>=2022.7 in /usr/local/lib/python3.11/dist-packages (from pandas->antspyx->lsfm-fuse->leonardo_toolset) (2024.2)
Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.11/dist-packages (from python-dateutil>=2.7->matplotlib->lsfm-destripe->leonardo_toolset) (1.17.0)
Requirement already satisfied: joblib>=1.2.0 in /usr/local/lib/python3.11/dist-packages (from scikit-learn>=0.21->open3d->lsfm-fuse->leonardo_toolset) (1.4.2)
Requirement already satisfied: threadpoolctl>=3.1.0 in /usr/local/lib/python3.11/dist-packages (from scikit-learn>=0.21->open3d->lsfm-fuse->leonardo_toolset) (3.5.0)
Collecting asciitree (from zarr<2.16.0,>=2.6->aicsimageio->lsfm-destripe->leonardo_toolset)
  Downloading asciitree-0.3.3.tar.gz (4.0 kB)
  Preparing metadata (setup.py) ... done
Collecting fasteners (from zarr<2.16.0,>=2.6->aicsimageio->lsfm-destripe->leonardo_toolset)
  Downloading fasteners-0.19-py3-none-any.whl.metadata (4.9 kB)
Collecting numcodecs>=0.10.0 (from zarr<2.16.0,>=2.6->aicsimageio->lsfm-destripe->leonardo_toolset)
  Downloading numcodecs-0.15.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (2.9 kB)
Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.11/dist-packages (from requests->antspyx->lsfm-fuse->leonardo_toolset) (3.4.1)
Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.11/dist-packages (from requests->antspyx->lsfm-fuse->leonardo_toolset) (3.10)
Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.11/dist-packages (from requests->antspyx->lsfm-fuse->leonardo_toolset) (2.3.0)
Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.11/dist-packages (from requests->antspyx->lsfm-fuse->leonardo_toolset) (2024.12.14)
Requirement already satisfied: patsy>=0.5.6 in /usr/local/lib/python3.11/dist-packages (from statsmodels->antspyx->lsfm-fuse->leonardo_toolset) (1.0.1)
Collecting elementpath<5.0.0,>=4.4.0 (from xmlschema->aicsimageio->lsfm-destripe->leonardo_toolset)
  Downloading elementpath-4.7.0-py3-none-any.whl.metadata (7.0 kB)
Requirement already satisfied: aiohappyeyeballs>=2.3.0 in /usr/local/lib/python3.11/dist-packages (from aiohttp<4->ome-zarr>=0.6.1->aicsimageio->lsfm-destripe->leonardo_toolset) (2.4.4)
Requirement already satisfied: aiosignal>=1.1.2 in /usr/local/lib/python3.11/dist-packages (from aiohttp<4->ome-zarr>=0.6.1->aicsimageio->lsfm-destripe->leonardo_toolset) (1.3.2)
Requirement already satisfied: attrs>=17.3.0 in /usr/local/lib/python3.11/dist-packages (from aiohttp<4->ome-zarr>=0.6.1->aicsimageio->lsfm-destripe->leonardo_toolset) (24.3.0)
Requirement already satisfied: frozenlist>=1.1.1 in /usr/local/lib/python3.11/dist-packages (from aiohttp<4->ome-zarr>=0.6.1->aicsimageio->lsfm-destripe->leonardo_toolset) (1.5.0)
Requirement already satisfied: multidict<7.0,>=4.5 in /usr/local/lib/python3.11/dist-packages (from aiohttp<4->ome-zarr>=0.6.1->aicsimageio->lsfm-destripe->leonardo_toolset) (6.1.0)
Requirement already satisfied: propcache>=0.2.0 in /usr/local/lib/python3.11/dist-packages (from aiohttp<4->ome-zarr>=0.6.1->aicsimageio->lsfm-destripe->leonardo_toolset) (0.2.1)
Requirement already satisfied: yarl<2.0,>=1.17.0 in /usr/local/lib/python3.11/dist-packages (from aiohttp<4->ome-zarr>=0.6.1->aicsimageio->lsfm-destripe->leonardo_toolset) (1.18.3)
Collecting s3fs (from fsspec[s3]!=2021.07.0,!=2023.9.0,>=0.8->ome-zarr>=0.6.1->aicsimageio->lsfm-destripe->leonardo_toolset)
  Downloading s3fs-2024.12.0-py3-none-any.whl.metadata (1.6 kB)
Requirement already satisfied: zipp>=3.20 in /usr/local/lib/python3.11/dist-packages (from importlib-metadata->dash>=2.6.0->open3d->lsfm-fuse->leonardo_toolset) (3.21.0)
Collecting jedi>=0.16 (from ipython>=6.1.0->ipywidgets>=8.0.4->open3d->lsfm-fuse->leonardo_toolset)
  Downloading jedi-0.19.2-py2.py3-none-any.whl.metadata (22 kB)
Requirement already satisfied: decorator in /usr/local/lib/python3.11/dist-packages (from ipython>=6.1.0->ipywidgets>=8.0.4->open3d->lsfm-fuse->leonardo_toolset) (4.4.2)
Requirement already satisfied: pickleshare in /usr/local/lib/python3.11/dist-packages (from ipython>=6.1.0->ipywidgets>=8.0.4->open3d->lsfm-fuse->leonardo_toolset) (0.7.5)
Requirement already satisfied: prompt-toolkit!=3.0.0,!=3.0.1,<3.1.0,>=2.0.0 in /usr/local/lib/python3.11/dist-packages (from ipython>=6.1.0->ipywidgets>=8.0.4->open3d->lsfm-fuse->leonardo_toolset) (3.0.48)
Requirement already satisfied: pygments in /usr/local/lib/python3.11/dist-packages (from ipython>=6.1.0->ipywidgets>=8.0.4->open3d->lsfm-fuse->leonardo_toolset) (2.18.0)
Requirement already satisfied: backcall in /usr/local/lib/python3.11/dist-packages (from ipython>=6.1.0->ipywidgets>=8.0.4->open3d->lsfm-fuse->leonardo_toolset) (0.2.0)
Requirement already satisfied: matplotlib-inline in /usr/local/lib/python3.11/dist-packages (from ipython>=6.1.0->ipywidgets>=8.0.4->open3d->lsfm-fuse->leonardo_toolset) (0.1.7)
Requirement already satisfied: pexpect>4.3 in /usr/local/lib/python3.11/dist-packages (from ipython>=6.1.0->ipywidgets>=8.0.4->open3d->lsfm-fuse->leonardo_toolset) (4.9.0)
Requirement already satisfied: jsonschema-specifications>=2023.03.6 in /usr/local/lib/python3.11/dist-packages (from jsonschema>=2.6->nbformat>=5.7.0->open3d->lsfm-fuse->leonardo_toolset) (2024.10.1)
Requirement already satisfied: referencing>=0.28.4 in /usr/local/lib/python3.11/dist-packages (from jsonschema>=2.6->nbformat>=5.7.0->open3d->lsfm-fuse->leonardo_toolset) (0.35.1)
Requirement already satisfied: rpds-py>=0.7.1 in /usr/local/lib/python3.11/dist-packages (from jsonschema>=2.6->nbformat>=5.7.0->open3d->lsfm-fuse->leonardo_toolset) (0.22.3)
Requirement already satisfied: platformdirs>=2.5 in /usr/local/lib/python3.11/dist-packages (from jupyter-core!=5.0.*,>=4.12->nbformat>=5.7.0->open3d->lsfm-fuse->leonardo_toolset) (4.3.6)
Requirement already satisfied: deprecated in /usr/local/lib/python3.11/dist-packages (from numcodecs>=0.10.0->zarr<2.16.0,>=2.6->aicsimageio->lsfm-destripe->leonardo_toolset) (1.2.15)
Requirement already satisfied: locket in /usr/local/lib/python3.11/dist-packages (from partd>=1.4.0->dask>=2021.4.1->dask[array]>=2021.4.1->aicsimageio->lsfm-destripe->leonardo_toolset) (1.0.0)
Requirement already satisfied: tenacity>=6.2.0 in /usr/local/lib/python3.11/dist-packages (from plotly>=5.0.0->dash>=2.6.0->open3d->lsfm-fuse->leonardo_toolset) (9.0.0)
Requirement already satisfied: annotated-types>=0.6.0 in /usr/local/lib/python3.11/dist-packages (from pydantic!=2.0,!=2.1,!=2.2,!=2.3,>=1.10.16->ome-types>=0.3.4->aicsimageio->lsfm-destripe->leonardo_toolset) (0.7.0)
Requirement already satisfied: pydantic-core==2.27.2 in /usr/local/lib/python3.11/dist-packages (from pydantic!=2.0,!=2.1,!=2.2,!=2.3,>=1.10.16->ome-types>=0.3.4->aicsimageio->lsfm-destripe->leonardo_toolset) (2.27.2)
INFO: pip is looking at multiple versions of distributed to determine which version is compatible with other requirements. This could take a while.
Collecting distributed (from ome-zarr>=0.6.1->aicsimageio->lsfm-destripe->leonardo_toolset)
  Downloading distributed-2024.12.1-py3-none-any.whl.metadata (3.3 kB)
  Downloading distributed-2024.12.0-py3-none-any.whl.metadata (3.3 kB)
  Downloading distributed-2024.11.2-py3-none-any.whl.metadata (3.3 kB)
  Downloading distributed-2024.11.1-py3-none-any.whl.metadata (3.3 kB)
  Downloading distributed-2024.11.0-py3-none-any.whl.metadata (3.3 kB)
  Downloading distributed-2024.10.0-py3-none-any.whl.metadata (3.3 kB)
Requirement already satisfied: msgpack>=1.0.2 in /usr/local/lib/python3.11/dist-packages (from distributed->ome-zarr>=0.6.1->aicsimageio->lsfm-destripe->leonardo_toolset) (1.1.0)
Requirement already satisfied: psutil>=5.8.0 in /usr/local/lib/python3.11/dist-packages (from distributed->ome-zarr>=0.6.1->aicsimageio->lsfm-destripe->leonardo_toolset) (5.9.5)
Collecting sortedcontainers>=2.0.5 (from distributed->ome-zarr>=0.6.1->aicsimageio->lsfm-destripe->leonardo_toolset)
  Downloading sortedcontainers-2.4.0-py2.py3-none-any.whl.metadata (10 kB)
Collecting tblib>=1.6.0 (from distributed->ome-zarr>=0.6.1->aicsimageio->lsfm-destripe->leonardo_toolset)
  Downloading tblib-3.0.0-py3-none-any.whl.metadata (25 kB)
Requirement already satisfied: tornado>=6.2.0 in /usr/local/lib/python3.11/dist-packages (from distributed->ome-zarr>=0.6.1->aicsimageio->lsfm-destripe->leonardo_toolset) (6.3.3)
Collecting zict>=3.0.0 (from distributed->ome-zarr>=0.6.1->aicsimageio->lsfm-destripe->leonardo_toolset)
  Downloading zict-3.0.0-py2.py3-none-any.whl.metadata (899 bytes)
Requirement already satisfied: parso<0.9.0,>=0.8.4 in /usr/local/lib/python3.11/dist-packages (from jedi>=0.16->ipython>=6.1.0->ipywidgets>=8.0.4->open3d->lsfm-fuse->leonardo_toolset) (0.8.4)
Requirement already satisfied: ptyprocess>=0.5 in /usr/local/lib/python3.11/dist-packages (from pexpect>4.3->ipython>=6.1.0->ipywidgets>=8.0.4->open3d->lsfm-fuse->leonardo_toolset) (0.7.0)
Requirement already satisfied: wcwidth in /usr/local/lib/python3.11/dist-packages (from prompt-toolkit!=3.0.0,!=3.0.1,<3.1.0,>=2.0.0->ipython>=6.1.0->ipywidgets>=8.0.4->open3d->lsfm-fuse->leonardo_toolset) (0.2.13)
Collecting aiobotocore<3.0.0,>=2.5.4 (from s3fs->fsspec[s3]!=2021.07.0,!=2023.9.0,>=0.8->ome-zarr>=0.6.1->aicsimageio->lsfm-destripe->leonardo_toolset)
  Downloading aiobotocore-2.19.0-py3-none-any.whl.metadata (23 kB)
INFO: pip is looking at multiple versions of s3fs to determine which version is compatible with other requirements. This could take a while.
Collecting s3fs (from fsspec[s3]!=2021.07.0,!=2023.9.0,>=0.8->ome-zarr>=0.6.1->aicsimageio->lsfm-destripe->leonardo_toolset)
  Downloading s3fs-2024.10.0-py3-none-any.whl.metadata (1.7 kB)
  Downloading s3fs-2024.9.0-py3-none-any.whl.metadata (1.6 kB)
  Downloading s3fs-2024.6.1-py3-none-any.whl.metadata (1.6 kB)
  Downloading s3fs-2024.6.0-py3-none-any.whl.metadata (1.6 kB)
  Downloading s3fs-2024.5.0-py3-none-any.whl.metadata (1.6 kB)
  Downloading s3fs-2024.3.1-py3-none-any.whl.metadata (1.6 kB)
  Downloading s3fs-2024.3.0-py3-none-any.whl.metadata (1.6 kB)
INFO: pip is still looking at multiple versions of s3fs to determine which version is compatible with other requirements. This could take a while.
  Downloading s3fs-2024.2.0-py3-none-any.whl.metadata (1.6 kB)
  Downloading s3fs-2023.12.2-py3-none-any.whl.metadata (1.6 kB)
  Downloading s3fs-2023.12.1-py3-none-any.whl.metadata (1.6 kB)
  Downloading s3fs-2023.10.0-py3-none-any.whl.metadata (1.6 kB)
Collecting aiobotocore~=2.7.0 (from s3fs->fsspec[s3]!=2021.07.0,!=2023.9.0,>=0.8->ome-zarr>=0.6.1->aicsimageio->lsfm-destripe->leonardo_toolset)
  Downloading aiobotocore-2.7.0-py3-none-any.whl.metadata (20 kB)
Collecting s3fs (from fsspec[s3]!=2021.07.0,!=2023.9.0,>=0.8->ome-zarr>=0.6.1->aicsimageio->lsfm-destripe->leonardo_toolset)
  Downloading s3fs-2023.9.2-py3-none-any.whl.metadata (1.6 kB)
Collecting aiobotocore~=2.5.4 (from s3fs->fsspec[s3]!=2021.07.0,!=2023.9.0,>=0.8->ome-zarr>=0.6.1->aicsimageio->lsfm-destripe->leonardo_toolset)
  Downloading aiobotocore-2.5.4-py3-none-any.whl.metadata (19 kB)
INFO: This is taking longer than usual. You might need to provide the dependency resolver with stricter constraints to reduce runtime. See https://pip.pypa.io/warnings/backtracking for guidance. If you want to abort this run, press Ctrl + C.
Collecting s3fs (from fsspec[s3]!=2021.07.0,!=2023.9.0,>=0.8->ome-zarr>=0.6.1->aicsimageio->lsfm-destripe->leonardo_toolset)
  Downloading s3fs-2023.9.1-py3-none-any.whl.metadata (1.6 kB)
  Downloading s3fs-2023.9.0-py3-none-any.whl.metadata (1.6 kB)
  Downloading s3fs-2023.6.0-py3-none-any.whl.metadata (1.6 kB)
Collecting botocore<1.31.18,>=1.31.17 (from aiobotocore~=2.5.4->s3fs->fsspec[s3]!=2021.07.0,!=2023.9.0,>=0.8->ome-zarr>=0.6.1->aicsimageio->lsfm-destripe->leonardo_toolset)
  Downloading botocore-1.31.17-py3-none-any.whl.metadata (5.9 kB)
Collecting aioitertools<1.0.0,>=0.5.1 (from aiobotocore~=2.5.4->s3fs->fsspec[s3]!=2021.07.0,!=2023.9.0,>=0.8->ome-zarr>=0.6.1->aicsimageio->lsfm-destripe->leonardo_toolset)
  Downloading aioitertools-0.12.0-py3-none-any.whl.metadata (3.8 kB)
Collecting jmespath<2.0.0,>=0.7.1 (from botocore<1.31.18,>=1.31.17->aiobotocore~=2.5.4->s3fs->fsspec[s3]!=2021.07.0,!=2023.9.0,>=0.8->ome-zarr>=0.6.1->aicsimageio->lsfm-destripe->leonardo_toolset)
  Downloading jmespath-1.0.1-py3-none-any.whl.metadata (7.6 kB)
Collecting urllib3<3,>=1.21.1 (from requests->antspyx->lsfm-fuse->leonardo_toolset)
  Downloading urllib3-1.26.20-py2.py3-none-any.whl.metadata (50 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 50.1/50.1 kB 5.2 MB/s eta 0:00:00
Downloading leonardo_toolset-0.1.1-py2.py3-none-any.whl (6.1 kB)
Downloading lsfm_destripe-0.2.0-py2.py3-none-any.whl (33 kB)
Downloading lsfm_fuse-0.1.2-py2.py3-none-any.whl (50 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 50.5/50.5 kB 5.6 MB/s eta 0:00:00
Downloading aicsimageio-4.14.0-py2.py3-none-any.whl (138 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 138.7/138.7 kB 12.3 MB/s eta 0:00:00
Downloading antspyx-0.5.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (22.2 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 22.2/22.2 MB 79.1 MB/s eta 0:00:00
Downloading dm_haiku-0.0.13-py3-none-any.whl (373 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 373.9/373.9 kB 30.0 MB/s eta 0:00:00
Downloading jaxwt-0.1.1-py3-none-any.whl (26 kB)
Downloading open3d-0.19.0-cp311-cp311-manylinux_2_31_x86_64.whl (447.7 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 447.7/447.7 MB 3.3 MB/s eta 0:00:00
Downloading ptwt-0.1.9-py3-none-any.whl (63 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 63.6/63.6 kB 5.1 MB/s eta 0:00:00
Downloading pywavelets-1.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.5 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.5/4.5 MB 48.3 MB/s eta 0:00:00
Downloading SimpleITK-2.4.1-cp311-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (52.3 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 52.3/52.3 MB 14.7 MB/s eta 0:00:00
Downloading dash-2.18.2-py3-none-any.whl (7.8 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 7.8/7.8 MB 99.6 MB/s eta 0:00:00
Downloading dash_core_components-2.0.0-py3-none-any.whl (3.8 kB)
Downloading dash_html_components-2.0.0-py3-none-any.whl (4.1 kB)
Downloading dash_table-5.0.0-py3-none-any.whl (3.9 kB)
Downloading flask-3.0.3-py3-none-any.whl (101 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 101.7/101.7 kB 9.8 MB/s eta 0:00:00
Downloading fsspec-2023.6.0-py3-none-any.whl (163 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 163.8/163.8 kB 17.1 MB/s eta 0:00:00
Downloading imagecodecs-2024.12.30-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (45.5 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 45.5/45.5 MB 14.0 MB/s eta 0:00:00
Downloading ipywidgets-8.1.5-py3-none-any.whl (139 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 139.8/139.8 kB 13.7 MB/s eta 0:00:00
Downloading jmp-0.0.4-py3-none-any.whl (18 kB)
Downloading lxml-4.9.4-cp311-cp311-manylinux_2_28_x86_64.whl (7.9 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 7.9/7.9 MB 94.1 MB/s eta 0:00:00
Downloading ome_types-0.5.3-py3-none-any.whl (248 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 248.4/248.4 kB 23.6 MB/s eta 0:00:00
Downloading ome_zarr-0.10.3-py3-none-any.whl (37 kB)
Downloading resource_backed_dask_array-0.1.0-py2.py3-none-any.whl (8.0 kB)
Downloading tifffile-2023.2.28-py3-none-any.whl (216 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 216.4/216.4 kB 22.2 MB/s eta 0:00:00
Downloading werkzeug-3.0.6-py3-none-any.whl (227 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 228.0/228.0 kB 24.6 MB/s eta 0:00:00
Downloading zarr-2.15.0-py3-none-any.whl (206 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 206.1/206.1 kB 21.1 MB/s eta 0:00:00
Downloading addict-2.4.0-py3-none-any.whl (3.8 kB)
Downloading ConfigArgParse-1.7-py3-none-any.whl (25 kB)
Downloading pyquaternion-0.9.9-py3-none-any.whl (14 kB)
Downloading xmlschema-3.4.3-py3-none-any.whl (417 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 417.8/417.8 kB 39.3 MB/s eta 0:00:00
Downloading comm-0.2.2-py3-none-any.whl (7.2 kB)
Downloading elementpath-4.7.0-py3-none-any.whl (240 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 240.6/240.6 kB 25.7 MB/s eta 0:00:00
Downloading numcodecs-0.15.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (8.9 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.9/8.9 MB 107.0 MB/s eta 0:00:00
Downloading pydantic_compat-0.1.2-py3-none-any.whl (13 kB)
Downloading widgetsnbextension-4.0.13-py3-none-any.whl (2.3 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.3/2.3 MB 64.9 MB/s eta 0:00:00
Downloading xsdata-24.3.1-py3-none-any.whl (224 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 224.1/224.1 kB 22.2 MB/s eta 0:00:00
Downloading distributed-2024.10.0-py3-none-any.whl (1.0 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.0/1.0 MB 68.4 MB/s eta 0:00:00
Downloading fasteners-0.19-py3-none-any.whl (18 kB)
Downloading retrying-1.3.4-py3-none-any.whl (11 kB)
Downloading jedi-0.19.2-py2.py3-none-any.whl (1.6 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.6/1.6 MB 67.0 MB/s eta 0:00:00
Downloading sortedcontainers-2.4.0-py2.py3-none-any.whl (29 kB)
Downloading tblib-3.0.0-py3-none-any.whl (12 kB)
Downloading zict-3.0.0-py2.py3-none-any.whl (43 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 43.3/43.3 kB 4.8 MB/s eta 0:00:00
Downloading s3fs-2023.6.0-py3-none-any.whl (28 kB)
Downloading aiobotocore-2.5.4-py3-none-any.whl (73 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 73.4/73.4 kB 8.6 MB/s eta 0:00:00
Downloading aioitertools-0.12.0-py3-none-any.whl (24 kB)
Downloading botocore-1.31.17-py3-none-any.whl (11.1 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 11.1/11.1 MB 98.3 MB/s eta 0:00:00
Downloading urllib3-1.26.20-py2.py3-none-any.whl (144 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 144.2/144.2 kB 15.0 MB/s eta 0:00:00
Downloading jmespath-1.0.1-py3-none-any.whl (20 kB)
Building wheels for collected packages: asciitree
  Building wheel for asciitree (setup.py) ... done
  Created wheel for asciitree: filename=asciitree-0.3.3-py3-none-any.whl size=5034 sha256=d7e96dc6c79f381341cbc218f6eda60adf2ac84a5e3b12b1f8e3a0d4120469b7
  Stored in directory: /root/.cache/pip/wheels/71/c1/da/23077eb3b87d24d6f3852ed1ed1a1ac2d3c885ad6ebd2b4a07
Successfully built asciitree
Installing collected packages: sortedcontainers, SimpleITK, dash-table, dash-html-components, dash-core-components, asciitree, addict, zict, xsdata, widgetsnbextension, werkzeug, urllib3, tifffile, tblib, retrying, PyWavelets, pyquaternion, lxml, jmp, jmespath, jedi, imagecodecs, fsspec, fasteners, elementpath, configargparse, comm, aioitertools, xmlschema, numcodecs, flask, dm-haiku, botocore, zarr, pydantic-compat, ipywidgets, distributed, dash, aiobotocore, s3fs, resource-backed-dask-array, ptwt, ome-types, jaxwt, antspyx, open3d, ome-zarr, aicsimageio, lsfm-fuse, lsfm-destripe, leonardo_toolset
  Attempting uninstall: widgetsnbextension
    Found existing installation: widgetsnbextension 3.6.10
    Uninstalling widgetsnbextension-3.6.10:
      Successfully uninstalled widgetsnbextension-3.6.10
  Attempting uninstall: werkzeug
    Found existing installation: Werkzeug 3.1.3
    Uninstalling Werkzeug-3.1.3:
      Successfully uninstalled Werkzeug-3.1.3
  Attempting uninstall: urllib3
    Found existing installation: urllib3 2.3.0
    Uninstalling urllib3-2.3.0:
      Successfully uninstalled urllib3-2.3.0
  Attempting uninstall: tifffile
    Found existing installation: tifffile 2024.12.12
    Uninstalling tifffile-2024.12.12:
      Successfully uninstalled tifffile-2024.12.12
  Attempting uninstall: lxml
    Found existing installation: lxml 5.3.0
    Uninstalling lxml-5.3.0:
      Successfully uninstalled lxml-5.3.0
  Attempting uninstall: fsspec
    Found existing installation: fsspec 2024.10.0
    Uninstalling fsspec-2024.10.0:
      Successfully uninstalled fsspec-2024.10.0
  Attempting uninstall: flask
    Found existing installation: Flask 3.1.0
    Uninstalling Flask-3.1.0:
      Successfully uninstalled Flask-3.1.0
  Attempting uninstall: ipywidgets
    Found existing installation: ipywidgets 7.7.1
    Uninstalling ipywidgets-7.7.1:
      Successfully uninstalled ipywidgets-7.7.1
ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.
gcsfs 2024.10.0 requires fsspec==2024.10.0, but you have fsspec 2023.6.0 which is incompatible.
Successfully installed PyWavelets-1.8.0 SimpleITK-2.4.1 addict-2.4.0 aicsimageio-4.14.0 aiobotocore-2.5.4 aioitertools-0.12.0 antspyx-0.5.4 asciitree-0.3.3 botocore-1.31.17 comm-0.2.2 configargparse-1.7 dash-2.18.2 dash-core-components-2.0.0 dash-html-components-2.0.0 dash-table-5.0.0 distributed-2024.10.0 dm-haiku-0.0.13 elementpath-4.7.0 fasteners-0.19 flask-3.0.3 fsspec-2023.6.0 imagecodecs-2024.12.30 ipywidgets-8.1.5 jaxwt-0.1.1 jedi-0.19.2 jmespath-1.0.1 jmp-0.0.4 leonardo_toolset-0.1.1 lsfm-destripe-0.2.0 lsfm-fuse-0.1.2 lxml-4.9.4 numcodecs-0.15.0 ome-types-0.5.3 ome-zarr-0.10.3 open3d-0.19.0 ptwt-0.1.9 pydantic-compat-0.1.2 pyquaternion-0.9.9 resource-backed-dask-array-0.1.0 retrying-1.3.4 s3fs-2023.6.0 sortedcontainers-2.4.0 tblib-3.0.0 tifffile-2023.2.28 urllib3-1.26.20 werkzeug-3.0.6 widgetsnbextension-4.0.13 xmlschema-3.4.3 xsdata-24.3.1 zarr-2.15.0 zict-3.0.0
[2]:
# load sample dataset
import pooch
from pathlib import Path
import tifffile

data_path = "./"

source_part1 = pooch.retrieve(
    url="https://zenodo.org/records/14215090/files/D2_I0.tif",
    known_hash="md5:83ad8c084f3e8f6d5753ee05a4378bdd",
    fname="D2_I0.tif",
    path=data_path / Path("download"),
)

source_part2 = pooch.retrieve(
    url="https://zenodo.org/records/14215090/files/D2_I1.tif",
    known_hash="md5:859a680fad7f86b61636a04d1971e787",
    fname="D2_I1.tif",
    path=data_path / Path("download"),
)

X_D2_I0 = tifffile.imread(source_part1)
X_D2_I1 = tifffile.imread(source_part2)
Downloading data from 'https://zenodo.org/records/14215090/files/D2_I0.tif' to file '/content/download/D2_I0.tif'.
Downloading data from 'https://zenodo.org/records/14215090/files/D2_I1.tif' to file '/content/download/D2_I1.tif'.

Start Leonardo-DeStripe-Fuse#

Step 1: Leonardo-Fuse#

Same as normal use of Leonardo-Fuse. The only difference is to turn save_separate_results to be True, to save some intermediate results useful for the later DeStripe:

[3]:
from leonardo_toolset import FUSE_illu

save_path = "./"
save_folder = "fuse_illu_result"

model = FUSE_illu()
out = model.train(top_illu_data = X_D2_I1,
                  bottom_illu_data = X_D2_I0,
                  save_path = save_path,
                  save_folder = save_folder,
                  save_separate_results = True,
                  )
[Leonardo-Fuse] Backend: PyTorch | Device: cuda
Read in...

Localize sample...
           startX    endX startY    endY         maxv
top             0    1024      0    1024  3473.999756
bottom          0    1024      0    1024  5689.999023
in summary    0.0  1024.0    0.0  1024.0  5689.999023
../../_images/tutorials_notebook_Leonardo_DeStripe_Fuse_9_1.png

Calculate volumetric measurements...
top/left view: minimum intensity = 60.0, maximum intensity = 2189.0, OTSU threshold = 148.0
bottom/right view: minimum intensity = 53.0, maximum intensity = 4757.0, OTSU threshold = 151.0

Extract features...
NSCT: 100%|██████████| 250/250 [00:10<00:00, 23.91it/s]

Segment sample...
watershed (23): 100%|██████████| 250/250 [00:13<00:00, 18.89it/s]
refine pair-wise segmentation result: 100%|██████████| 250/250 [00:05<00:00, 41.88it/s]
refine along z: 100%|██████████| 2704/2704 [00:02<00:00, 1280.73it/s]

Dual-illumination fusion...
to GPU...
No.049 iteration EM: maximum changes = 1.0
Stitching...
fusion: 100%|██████████| 250/250 [00:47<00:00,  5.24it/s]
../../_images/tutorials_notebook_Leonardo_DeStripe_Fuse_9_8.png
Save...

Step 2: Leonardo-DeStripe

Initialize DeStripe in the same way, but when training the model, input the corresponding two slices for X_D2_I1 and X_D2_I0, respectively, instead of the fusion result, togetheer with the corresponding fusion_illu_mask saved under save_path/save_folder/top_illu/fuse_illu_mask. Here, we only use slice 206 for demostration, but of course can also do the same thing for the whole stack:

[4]:
from leonardo_toolset import DeStripe
import numpy as np
import matplotlib.pyplot as plt


model = DeStripe()

recon = model.train(is_vertical = True,
                    display = True,
                    angle_offset_0 = [0],
                    angle_offset_1 = [-3],
                    x_0 = X_D2_I1[206],
                    x_1 = X_D2_I0[206],
                    fusion_mask = np.load("/content/fuse_illu_result/top_illu/fuse_illu_mask/00206.npz")["mask"],
                    )

fig, (ax1, ax2, ax3) = plt.subplots(1, 3, dpi=300)
ax1.imshow(X_D2_I1[206], vmax = 500)
ax1.set_title("Input1", fontsize=8, pad=1)
ax1.axis("off")
ax2.imshow(X_D2_I0[206], vmax = 500)
ax2.set_title("Input2", fontsize=8, pad=1)
ax2.axis("off")
ax3.imshow(recon[0], vmax = 500)
ax3.set_title("Output", fontsize=8, pad=1)
ax3.axis("off")
[Leonardo-DeStripe] Backend: JAX | Device: gpu
Start DeStripe-Fuse...

warning: illumination orientation is not given. post-processing will be ignored.

../../_images/tutorials_notebook_Leonardo_DeStripe_Fuse_11_2.png
Done
[4]:
(np.float64(-0.5), np.float64(1023.5), np.float64(1023.5), np.float64(-0.5))
../../_images/tutorials_notebook_Leonardo_DeStripe_Fuse_11_5.png

In summary, use x_0, x_1, instead of x for feeding the data-to-be-processed. Correspondinly, use angle_offset_0 and angle_offset_1 for indicating stripe orientations. Make sure that x_0 and x_1 shoud be consistent with fusion_mask. In this case, x_0 should be the dataset with illumiation from the top, whereas x_1 is the stack with illumnation from the bottom.

As discussed under Leonardo-DeStripe section, post-processing for sample structure preservation is also available for Leonardo-DeStripe-Fuse, by simply using illu_orient_0, illu_orient_1…corresponding to x_0, x_1 and so on:

[5]:
from leonardo_toolset import DeStripe
import numpy as np
import matplotlib.pyplot as plt

model = DeStripe()

recon = model.train(is_vertical = True,
                    display = True,
                    angle_offset_0 = [0],
                    angle_offset_1 = [-3],
                    x_0 = X_D2_I1[206],
                    x_1 = X_D2_I0[206],
                    illu_orient_0 = "top",
                    illu_orient_1 = "bottom",
                    fusion_mask = np.load("/content/fuse_illu_result/top_illu/fuse_illu_mask/00206.npz")["mask"],
                    )

fig, (ax1, ax2, ax3) = plt.subplots(1, 3, dpi=300)
ax1.imshow(X_D2_I1[206], vmax = 500)
ax1.set_title("Input1", fontsize=8, pad=1)
ax1.axis("off")
ax2.imshow(X_D2_I0[206], vmax = 500)
ax2.set_title("Input2", fontsize=8, pad=1)
ax2.axis("off")
ax3.imshow(recon[0], vmax = 500)
ax3.set_title("Output", fontsize=8, pad=1)
ax3.axis("off")
[Leonardo-DeStripe] Backend: JAX | Device: gpu
Start DeStripe-Fuse...


../../_images/tutorials_notebook_Leonardo_DeStripe_Fuse_14_2.png
Done
[5]:
(np.float64(-0.5), np.float64(1023.5), np.float64(1023.5), np.float64(-0.5))
../../_images/tutorials_notebook_Leonardo_DeStripe_Fuse_14_5.png