Registration and fusion of large imaging datasets in 2D and 3D.
Project description
Documentation available here.
multiview-stitcher
multiview-stitcher is an open-source modular toolbox for distributed and tiled stitching of 2-3D image data in python. It is a collection of algorithms (under development) to register and fuse small and large datasets from multi-positioning and multi-view light sheet microscopy, as well as other modalities such as correlative cryo-EM datasets.
For visualization, the associated napari-stitcher provides visualization functionality using the Napari viewer, including a standalone widget.
With a focus on interoperability and integration with existing tools and the ecosystem, the package intends to integrate as tightly as possible with the NGFF specification.
It leverages xarray in combination with spatial-image and multiscale-spatial-image for image handling and dask and dask-image for chunked and distributed image processing.
Quickstart
- Documentation and code example
- Check out the example notebooks.
Code example
These code snippets walk you through a small stitching workflow consisting of
- Preparing the input image data and metadata (tile positions, spacing, channels)
- Registering the tiles
- Stitching / fusing the tiles
1) Prepare data for stitching
import numpy as np
from multiview_stitcher import msi_utils
from multiview_stitcher import spatial_image_utils as si_utils
# input data (can be any numpy compatible array: numpy, dask, cupy, etc.)
tile_arrays = [np.random.randint(0, 100, (2, 10, 100, 100)) for _ in range(3)]
# indicate the tile offsets and spacing
tile_translations = [
{"z": 2.5, "y": -10, "x": 30},
{"z": 2.5, "y": 30, "x": 10},
{"z": 2.5, "y": 30, "x": 50},
]
spacing = {"z": 2, "y": 0.5, "x": 0.5}
channels = ["DAPI", "GFP"]
# build input for stitching
msims = []
for tile_array, tile_translation in zip(tile_arrays, tile_translations):
sim = si_utils.get_sim_from_array(
tile_array,
dims=["c", "z", "y", "x"],
scale=spacing,
translation=tile_translation,
transform_key="stage_metadata",
c_coords=channels,
)
msims.append(msi_utils.get_msim_from_sim(sim, scale_factors=[]))
# plot the tile configuration
# from multiview_stitcher import vis_utils
# fig, ax = vis_utils.plot_positions(msims, transform_key='stage_metadata', use_positional_colors=False)
2) Register the tiles
from dask.diagnostics import ProgressBar
from multiview_stitcher import registration
with ProgressBar():
params = registration.register(
msims,
reg_channel="DAPI", # channel to use for registration
transform_key="stage_metadata",
new_transform_key="translation_registered",
)
# plot the tile configuration after registration
# vis_utils.plot_positions(msims, transform_key='translation_registered', use_positional_colors=False)
3) Stitch / fuse the tiles
from multiview_stitcher import fusion
fused_sim = fusion.fuse(
[msi_utils.get_sim_from_msim(msim) for msim in msims],
transform_key="translation_registered",
)
# get fused array as a dask array
fused_sim.data
# get fused array as a numpy array
fused_sim.data.compute()
Napari plugin
There's an associated napari plugin: napari-stitcher.
Image data by Arthur Michaut @ Jérôme Gros Lab @ Institut Pasteur.
Installation
You can install multiview-stitcher via pip from PyPI:
pip install multiview-stitcher
or from the source code in this github repository:
pip install git+https://github.com/multiview-stitcher/multiview-stitcher.git
Citing multiview-stitcher
If you find multiview-stitcher useful please cite this repository using the following DOI (all versions): https://doi.org/10.5281/zenodo.13151252.
Stitching in the browser
multiview-stitcher can run without installation in your browser.
Try it out
- open JupyterLite in a private browser window
- upload this notebook into the jupyter lab window: notebooks/stitching_in_the_browser.ipynb
- upload files to stitch into a 'data' folder in the jupyter lab window
- follow the notebook
Limitations
- stitching will run with a single thread
- while the code runs locally, your local file system is not directly accessible from within the browser environment
Work in progress
WARNING: THIS IS WORK IN PROGRESS. multiview-stitcher is being developed in the open and has not reached a stable release yet. The API is subject to change.
Previous work
multiview-stitcher improves and replaces MVRegFUS.
Issues
If you encounter any problems, please file an issue along with a detailed description.
Contributing
Contributions are welcome.
License
Distributed under the terms of the BSD-3 license, "multiview-stitcher" is free and open source software.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file multiview_stitcher-0.1.34.tar.gz.
File metadata
- Download URL: multiview_stitcher-0.1.34.tar.gz
- Upload date:
- Size: 4.3 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d076eaea58fc6c942ad5af1a52db15bc2f490dfaf8f91a09d4346548558fcd28
|
|
| MD5 |
ccdb550d28e9a3561a01ece78babe4af
|
|
| BLAKE2b-256 |
a457145a89b541a273ffcb7cf2b00637d8823e0f96492713ba038adacc61bfa7
|
File details
Details for the file multiview_stitcher-0.1.34-py3-none-any.whl.
File metadata
- Download URL: multiview_stitcher-0.1.34-py3-none-any.whl
- Upload date:
- Size: 2.1 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e1c46b7ed2e6efcb86a499ce76b927a317ee9f1c22936995fd40353f918390e3
|
|
| MD5 |
2061c1417c690cc0a4a7c7a1e22d902c
|
|
| BLAKE2b-256 |
5bc0c08e9b1fabc5cad158ee564fa78da592720d94aac10412b5bcb26f0ce380
|