{
"cells": [
{
"cell_type": "markdown",
"id": "500b07b7-5f43-40c0-ba80-bc6cd759f9f4",
"metadata": {},
"source": [
"# Z\u00e4hlen von Zellkernen in Kacheln\n",
"\n",
"In diesem Notebook werden wir einen gro\u00dfen Datensatz verarbeiten, der im Zarr-Format gespeichert wurde, um Zellen in einzelnen Kacheln zu z\u00e4hlen. F\u00fcr jede Kachel werden wir einen Pixel in ein Ausgabebild schreiben. Somit erzeugen wir ein Zellz\u00e4hlungsbild, das um einen Faktor kleiner ist als das Originalbild, der der Kachelgr\u00f6\u00dfe entspricht."
]
},
{
"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": [
"Zu Demonstrationszwecken verwenden wir einen Datensatz, der von Theresa Suckert, OncoRay, Universit\u00e4tsklinikum Carl Gustav Carus, TU Dresden, zur Verf\u00fcgung gestellt wurde. Der Datensatz ist unter der [Lizenz: CC-BY 4.0](https://creativecommons.org/licenses/by/4.0/) lizenziert. Wir verwenden hier eine zugeschnittene Version, die als 8-Bit-Bild neu gespeichert wurde, um sie mit dem Notebook bereitstellen zu k\u00f6nnen. Das vollst\u00e4ndige 16-Bit-Bild im CZI-Dateiformat finden Sie [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": [
"## Laden des zarr-basierten Bildes\n",
"Dask bietet integrierte Unterst\u00fctzung f\u00fcr das Zarr-Dateiformat. Wir k\u00f6nnen Dask-Arrays direkt aus einer Zarr-Datei erstellen."
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "2132d10e-1ec5-43eb-9c3c-a4d9358919cc",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"
\n",
"
\n",
"
\n",
" \n",
"
\n",
"
\n",
"
Array
\n",
"
Chunk
\n",
"
\n",
" \n",
" \n",
" \n",
"
\n",
"
Bytes
\n",
"
244.14 kiB
\n",
"
9.77 kiB
\n",
"
\n",
" \n",
"
\n",
"
Shape
\n",
"
(500, 500)
\n",
"
(100, 100)
\n",
"
\n",
"
\n",
"
Count
\n",
"
26 Tasks
\n",
"
25 Chunks
\n",
"
\n",
"
\n",
"
Type
\n",
"
uint8
\n",
"
numpy.ndarray
\n",
"
\n",
" \n",
"
\n",
"
\n",
"
\n",
" \n",
"
\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": [
"Wir k\u00f6nnen die Bildverarbeitung direkt auf diesen gekachelten Datensatz anwenden."
]
},
{
"cell_type": "markdown",
"id": "84fd34c2-68fe-4eeb-8f2b-d213226086e0",
"metadata": {},
"source": [
"## Z\u00e4hlen von Zellkernen\n",
"Um die Zellkerne zu z\u00e4hlen, richten wir einen einfachen Bildverarbeitungs-Workflow ein, der Voronoi-Otsu-Labeling auf den Datensatz anwendet. Anschlie\u00dfend z\u00e4hlen wir die segmentierten Objekte. Da Zellkerne, die die Kachelgrenze ber\u00fchren, m\u00f6glicherweise doppelt gez\u00e4hlt werden, m\u00fcssen wir die Z\u00e4hlung f\u00fcr jede Kachel korrigieren. Technisch gesehen k\u00f6nnten wir die Objekte entfernen, die eine der vertikalen oder horizontalen Kachelgrenzen ber\u00fchren. Es gibt jedoch einen einfacheren Weg, diesen Fehler zu korrigieren: Wir z\u00e4hlen die Anzahl der Zellkerne nach der Segmentierung. Dann entfernen wir alle Zellkerne, die einen Bildrand ber\u00fchren, und z\u00e4hlen die verbleibenden Zellkerne erneut. Wir k\u00f6nnen dann davon ausgehen, dass die H\u00e4lfte der entfernten Zellkerne gez\u00e4hlt werden sollte. Daher addieren wir die beiden Z\u00e4hlungen vor und nach der Randentfernung und berechnen den Durchschnitt dieser beiden Messungen. Besonders bei gro\u00dfen Kacheln mit vielen Zellkernen sollte der verbleibende Fehler vernachl\u00e4ssigbar sein. Es wird nicht empfohlen, eine solche sch\u00e4tzende Zellz\u00e4hlmethode anzuwenden, wenn jede Kachel nur wenige Zellkerne enth\u00e4lt."
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "713fcb46-9e8c-4090-a73e-a4d3b60dae24",
"metadata": {},
"outputs": [],
"source": [
"def count_nuclei(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",
" # Count nuclei including those which touch the image border\n",
" labels = cle.voronoi_otsu_labeling(image, spot_sigma=3.5)\n",
" label_intensity_map = cle.mean_intensity_map(image, labels)\n",
" \n",
" high_intensity_labels = cle.exclude_labels_with_map_values_within_range(label_intensity_map, labels, maximum_value_range=20)\n",
" nuclei_count = high_intensity_labels.max()\n",
" \n",
" # Count nuclei including those which touch the image border\n",
" labels_without_borders = cle.exclude_labels_on_edges(high_intensity_labels)\n",
" nuclei_count_excluding_borders = labels_without_borders.max()\n",
" \n",
" # Both nuclei-count including and excluding nuclei at image borders \n",
" # are no good approximation. We should exclude the nuclei only on \n",
" # half of the borders to get a good estimate.\n",
" # Alternatively, we just take the average of both counts.\n",
" result = np.asarray([[(nuclei_count + nuclei_count_excluding_borders) / 2]])\n",
" \n",
" print(result.shape)\n",
" \n",
" return result"
]
},
{
"cell_type": "markdown",
"id": "6b5420e4-f405-4ab9-b385-87be0b0750ce",
"metadata": {},
"source": [
"Bevor wir mit der Berechnung beginnen k\u00f6nnen, m\u00fcssen wir die asynchrone Ausf\u00fchrung von Operationen in pyclesperanto deaktivieren. [Siehe auch das zugeh\u00f6rige Problem](https://github.com/clEsperanto/pyclesperanto_prototype/issues/163)."
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "00cf9b77-0baa-492a-bc63-edf5e798c636",
"metadata": {},
"outputs": [],
"source": [
"cle.set_wait_for_kernel_finish(True)"
]
},
{
"cell_type": "markdown",
"id": "251e38da-f93f-4e1b-85bc-d4fb9181c680",
"metadata": {},
"source": [
"Diesmal verwenden wir keine Kachel\u00fcberlappung, da wir keine Eigenschaften der Zellkerne messen und daher keine perfekte Segmentierung ben\u00f6tigen."
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "eeba9ded-3fb3-4dba-81f3-6212c1251cbc",
"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",
"
Array
\n",
"
Chunk
\n",
"
\n",
" \n",
" \n",
" \n",
"
\n",
"
Bytes
\n",
"
1.91 MiB
\n",
"
78.12 kiB
\n",
"
\n",
" \n",
"
\n",
"
Shape
\n",
"
(500, 500)
\n",
"
(100, 100)
\n",
"
\n",
"
\n",
"
Count
\n",
"
51 Tasks
\n",
"
25 Chunks
\n",
"
\n",
"
\n",
"
Type
\n",
"
float64
\n",
"
numpy.ndarray
\n",
"
\n",
" \n",
"
\n",
"
\n",
"
\n",
" \n",
"
\n",
"
\n",
"
"
],
"text/plain": [
"dask.array"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"tile_map = da.map_blocks(count_nuclei, zarr_image)\n",
"\n",
"tile_map"
]
},
{
"cell_type": "markdown",
"id": "08cbf9c0-7fe7-4eb7-b104-907cc62cb03b",
"metadata": {},
"source": [
"Da das Ergebnisbild viel kleiner ist als das Original, k\u00f6nnen wir die gesamte Ergebniskarte berechnen."
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "c32f321d-90a0-4f3e-90fe-0f876761ea89",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Processing image of size (100, 100)\n",
"Processing image of sizeProcessing image of size (100, 100)\n",
"Processing image of size (100, 100)\n",
" (100, 100)\n",
"Processing image of size (100, 100)\n",
"Processing image of size (100, 100)\n",
"Processing image of sizeProcessing image of size (100, 100)\n",
" Processing image of size(100, 100)\n",
" (100, 100)\n",
"Processing image of size (100, 100)\n",
"(1, 1)\n",
"(1, 1)\n",
"Processing image of size (100, 100)\n",
"(1, 1)\n",
"Processing image of size (100, 100)\n",
"Processing image of size (100, 100)\n",
"(1, 1)(1, 1)\n",
"\n",
"Processing image of size (100, 100)\n",
"Processing image of size(1, 1)\n",
" (100, 100)\n",
"Processing image of size (100, 100)\n",
"(1, 1)\n",
"(1, 1)\n",
"Processing image of size (100, 100)\n",
"Processing image of size (100, 100)\n",
"(1, 1)\n",
"Processing image of size (100, 100)\n",
"(1, 1)\n",
"Processing image of size (100, 100)\n",
"(1, 1)\n",
"Processing image of size (100, 100)\n",
"(1, 1)\n",
"(1, 1)\n",
"Processing image of sizeProcessing image of size (100, 100)\n",
"(100, 100)\n",
"(1, 1)(1, 1)\n",
"\n",
"(1, 1)\n",
"Processing image of size Processing image of size(100, 100) (1, 1)\n",
"\n",
"(100, 100)\n",
"(1, 1)\n",
"(1, 1)\n",
"(1, 1)\n",
"(1, 1)\n",
"(1, 1)\n",
"(1, 1)\n",
"(1, 1)\n",
"(1, 1)\n"
]
}
],
"source": [
"result = tile_map.compute()"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "d49be008-f92f-4eef-891a-d9a9a883eb21",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(5, 5)"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"result.shape"
]
},
{
"cell_type": "markdown",
"id": "b51ff80c-79f6-497c-a8df-3dfe4fee89ce",
"metadata": {},
"source": [
"Da die Ergebniskarte klein ist, k\u00f6nnen wir sie einfach visualisieren."
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "64dbfdf3-6663-4949-9446-eb393ecdc288",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"cle.imshow(result, colorbar=True)"
]
},
{
"cell_type": "markdown",
"id": "58e69505-e192-4256-b8d7-a2267ba03ce9",
"metadata": {},
"source": [
"Mit einer schnellen visuellen \u00dcberpr\u00fcfung im Originalbild k\u00f6nnen wir sehen, dass in der unteren linken Ecke des Bildes tats\u00e4chlich mehr Zellen sind als in der oberen rechten."
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "47821e67-f35a-431e-a1bc-1800f63b0010",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"cle.imshow(cle.voronoi_otsu_labeling(image, spot_sigma=3.5), labels=True)"
]
}
],
"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
}