{ "cells": [ { "cell_type": "markdown", "id": "500b07b7-5f43-40c0-ba80-bc6cd759f9f4", "metadata": {}, "source": [ "# Map area of objects in tiles\n", "\n", "In this notebook, we will segment nuclei in tiles and measure their area. We will then save the resulting are area map again as tiles in a zarr file. This strategy can be used to process data that as a whole does not fit in computer memory." ] }, { "cell_type": "code", "execution_count": 1, "id": "e6a9300d-1f11-4a3b-94bb-a136ba69f09d", "metadata": {}, "outputs": [], "source": [ "import zarr\n", "import dask.array as da\n", "import numpy as np\n", "from skimage.io import imread\n", "import pyclesperanto_prototype as cle\n", "from pyclesperanto_prototype import imshow\n", "from numcodecs import Blosc" ] }, { "cell_type": "markdown", "id": "8959f8d4-a6d6-4a2d-b4b7-9378d2ceec01", "metadata": {}, "source": [ "For demonstration purposes, we use a dataset that is provided by Theresa Suckert, OncoRay, University Hospital Carl Gustav Carus, TU Dresden. The dataset is licensed [License: CC-BY 4.0](https://creativecommons.org/licenses/by/4.0/). We are using a cropped version here that was resaved a 8-bit image to be able to provide it with the notebook. You find the full size 16-bit image in CZI file format [online](https://zenodo.org/record/4276076#.YX1F-55BxaQ)." ] }, { "cell_type": "code", "execution_count": 2, "id": "cc2eeeb8-eb5e-49fc-8569-cdff5e143e5e", "metadata": {}, "outputs": [], "source": [ "image = imread('../../data/P1_H_C3H_M004_17-cropped.tif')[1]\n", "\n", "# for testing purposes, we crop the image even more.\n", "# comment out the following line to run on the whole 5000x2000 pixels\n", "image = image[1000:1500, 1000:1500]\n", "\n", "#compress AND change the numpy array into a zarr array\n", "compressor = Blosc(cname='zstd', clevel=3, shuffle=Blosc.BITSHUFFLE)\n", "\n", "# Convert image into zarr array\n", "chunk_size = (100, 100)\n", "zarray = zarr.array(image, chunks=chunk_size, compressor=compressor)\n", "\n", "# save zarr to disk\n", "zarr_filename = '../../data/P1_H_C3H_M004_17-cropped.zarr'\n", "zarr.convenience.save(zarr_filename, zarray)" ] }, { "cell_type": "markdown", "id": "d76246fe-7358-4e0c-8112-1f1fd0af4108", "metadata": {}, "source": [ "## Object area maps in tiles\n", "Dask brings built-in support for the zarr file format. We can create dask arrays directly from a zarr file." ] }, { "cell_type": "code", "execution_count": 3, "id": "2132d10e-1ec5-43eb-9c3c-a4d9358919cc", "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " \n", " \n", " \n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Array Chunk
Bytes 244.14 kiB 9.77 kiB
Shape (500, 500) (100, 100)
Count 26 Tasks 25 Chunks
Type uint8 numpy.ndarray
\n", "
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", "\n", " \n", " 500\n", " 500\n", "\n", "
" ], "text/plain": [ "dask.array" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "zarr_image = da.from_zarr(zarr_filename)\n", "zarr_image" ] }, { "cell_type": "markdown", "id": "c2721aa7-947e-4855-9325-c3e2b4746226", "metadata": {}, "source": [ "We can apply image processing to this tiled dataset directly." ] }, { "cell_type": "code", "execution_count": 4, "id": "cba0b2e9-c7ac-43dc-b5b3-b0aadb43b425", "metadata": {}, "outputs": [], "source": [ "def area_map(image):\n", " \"\"\"\n", " Label objects in a binary image and produce a pixel-count-map image.\n", " \"\"\"\n", " print(\"Processing image of size\", image.shape)\n", " \n", " labels = cle.voronoi_otsu_labeling(image, spot_sigma=3.5)\n", " result = cle.pixel_count_map(labels)\n", " \n", " print(result.shape)\n", " \n", " return np.asarray(result)" ] }, { "cell_type": "markdown", "id": "40c716df-6dbf-4b94-a1e6-a090d142a395", "metadata": {}, "source": [ "## Testing tiled image processing\n", "We should test our area mapping algorithm on a single tile. Actually, in a real scenario, the image processing workflow is developed on individual tiles, e.g. in a notebook like this one. As soon as we are sure that the algorithm works, we can apply it to all tiles." ] }, { "cell_type": "code", "execution_count": 5, "id": "697eb25f-e546-48e2-a744-a63e8db189bb", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Processing image of size (100, 100)\n", "(100, 100)\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "test_image = image[100:200,100:200]\n", "\n", "imshow(test_image)\n", "\n", "test_result = area_map(test_image)\n", "\n", "imshow(test_result, colorbar=True)" ] }, { "cell_type": "markdown", "id": "06b8f44e-d521-4d74-9f57-465c447b6d20", "metadata": {}, "source": [ "## Applying the tiled image processing to a zarr-backed dataset\n", "\n", "Applying the function to our zarr dataset will also result in a dask array." ] }, { "cell_type": "code", "execution_count": 6, "id": "84842017-8acd-466b-b344-5c5b0dc2082c", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Processing image of size (0, 0)\n", "Processing image of size (1, 1)\n", "(1, 1)\n", "Processing image of size (0, 0)\n" ] }, { "data": { "text/html": [ "\n", " \n", " \n", " \n", " \n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Array Chunk
Bytes 0.95 MiB 39.06 kiB
Shape (500, 500) (100, 100)
Count 632 Tasks 25 Chunks
Type float32 numpy.ndarray
\n", "
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", "\n", " \n", " 500\n", " 500\n", "\n", "
" ], "text/plain": [ "dask.array<_trim, shape=(500, 500), dtype=float32, chunksize=(100, 100), chunktype=numpy.ndarray>" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "overlap_width = 30\n", "\n", "tile_map = da.map_overlap(area_map, zarr_image, depth=overlap_width, boundary=0)\n", "\n", "tile_map" ] }, { "cell_type": "markdown", "id": "2743263e-87d7-4f1e-98e4-1d91001a26db", "metadata": {}, "source": [ "Before we can start the computation, we need to deactivate asynchronous execution of operations in pyclesperanto. [See also related issue](https://github.com/clEsperanto/pyclesperanto_prototype/issues/163)." ] }, { "cell_type": "code", "execution_count": 7, "id": "62da18c5-4023-45ea-8c5f-9ec47588e3ef", "metadata": {}, "outputs": [], "source": [ "cle.set_wait_for_kernel_finish(True)" ] }, { "cell_type": "markdown", "id": "95b44846-7b72-4ed2-96cc-11c03e16c800", "metadata": {}, "source": [ "When we invoke saving the results to disk, the processing will happen on individual tiles." ] }, { "cell_type": "code", "execution_count": 8, "id": "4166a08a-b7be-4bf5-b861-c166779f796f", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Processing image of size (160, 160)\n", "Processing image of size (160, 160)\n", "Processing image of size (160, 160)\n", "Processing image of size (160, 160)\n", "Processing image of size (160, 160)\n", "Processing image of size Processing image of size (160, 160)\n", "(160, 160)\n", "Processing image of size (160, 160)\n", "Processing image of size (160, 160)\n", "Processing image of size (160, 160)\n", "(160, 160)\n", "Processing image of size (160, 160)\n", "(160, 160)\n", "(160, 160)\n", "(160, 160)\n", "Processing image of size Processing image of size (160, 160)\n", "(160, 160)\n", "(160, 160)\n", "(160, 160)\n", "(160, 160)\n", "Processing image of size (160, 160)\n", "Processing image of size(160, 160) \n", "(160, 160)\n", "Processing image of size (160, 160)\n", "(160, 160)\n", "Processing image of size (160, 160)\n", "Processing image of size (160, 160)\n", "Processing image of size (160, 160)\n", "(160, 160)\n", "Processing image of size (160, 160)\n", "(160, 160)\n", "Processing image of size (160, 160)\n", "(160, 160)\n", "(160, 160)\n", "(160, 160)\n", "(160, 160)Processing image of sizeProcessing image of size(160, 160)\n", " (160, 160)\n", " \n", "(160, 160)\n", "Processing image of size (160, 160)\n", "Processing image of size (160, 160)\n", "(160, 160)\n", "(160, 160)\n", "(160, 160)\n", "(160, 160)\n", "(160, 160)\n", "(160, 160)\n", "(160, 160)\n", "(160, 160)\n", "(160, 160)\n" ] } ], "source": [ "processed_zarr_filename = '../../data/P1_H_C3H_M004_17-processed.zarr'\n", "\n", "tile_map.to_zarr(processed_zarr_filename, overwrite=True)" ] }, { "cell_type": "markdown", "id": "0d2ef602-739d-4496-8279-29ad87587b54", "metadata": {}, "source": [ "## Loading zarr\n", "Just for demonstration purposes, we will load the zarr backed tiled image and visualize it. When working with big data, this step might not be possible." ] }, { "cell_type": "code", "execution_count": 9, "id": "a3cc5730-0ce5-4b62-95cc-e75bdd4f334e", "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " \n", " \n", " \n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Array Chunk
Bytes 0.95 MiB 39.06 kiB
Shape (500, 500) (100, 100)
Count 26 Tasks 25 Chunks
Type float32 numpy.ndarray
\n", "
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", "\n", " \n", " 500\n", " 500\n", "\n", "
" ], "text/plain": [ "dask.array" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "zarr_result = da.from_zarr(processed_zarr_filename)\n", "zarr_result" ] }, { "cell_type": "code", "execution_count": 10, "id": "d46694cc-4f11-4960-a1cc-d0248916e567", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "result = zarr_result.compute()\n", "\n", "cle.imshow(result)" ] }, { "cell_type": "code", "execution_count": null, "id": "b567b6ad-7307-42d2-924d-54caf1ec4396", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.0" } }, "nbformat": 4, "nbformat_minor": 5 }