{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Shape descriptors based on neighborhood graphs\n", "This notebook demonstrates how to determine shape descriptors of cells in case they cannot be segmented exactly but their centers can be detected." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n" ] } ], "source": [ "import pyclesperanto_prototype as cle\n", "\n", "print(cle.get_device())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We generate a label image of cells with given sizes in x and y and a size ratio of 1:1.5.\n", "\n", "Assume this is the result of some cell segmentation algorithm." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "cell_size_x = 10\n", "cell_size_y = 15\n", "\n", "# generate and show tissue\n", "tissue_labels = cle.artificial_tissue_2d(width=100, height=100, delta_x=cell_size_x, delta_y=cell_size_y, random_sigma_x=1, random_sigma_y=1)\n", "cle.imshow(tissue_labels, labels=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Classical shape descriptors: minor and major axis\n", "We can measure the minor and major axis of those cells using scikit-image" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Average minor axis length 10.634312989303798\n", "Average major axis length 15.752965696328484\n" ] } ], "source": [ "from skimage.measure import regionprops\n", "import numpy as np\n", "\n", "label_image = cle.pull_zyx(tissue_labels).astype(int)\n", "\n", "stats = regionprops(label_image)\n", "\n", "avg_minor_axis_length = np.mean([s.minor_axis_length for s in stats])\n", "print(\"Average minor axis length\", avg_minor_axis_length)\n", "\n", "avg_major_axis_length = np.mean([s.major_axis_length for s in stats])\n", "print(\"Average major axis length\", avg_major_axis_length)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Shape descriptors based on neighbor meshes\n", "In some cases, we can't segment the cells properly, we can just do spot detection and visulize the centers of the cells.\n", "\n", "Assume this is the result of a cell detection algorithm." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "centroids = cle.centroids_of_labels(tissue_labels)\n", "\n", "spot_image = cle.create_like(tissue_labels)\n", "cle.pointlist_to_labelled_spots(centroids, spot_image)\n", "\n", "cle.imshow(spot_image)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "From such an image of labelled spots, we can make a voronoi diagram, were we can analyse wich cells (expanded spots) are close by each other.\n", "\n", "The result is an approximation of cell segmentation." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "voronoi_diagram = cle.extend_labeling_via_voronoi(spot_image)\n", "\n", "cle.imshow(voronoi_diagram, labels=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "From such a pair of spots-image and voronoi diagram, we can dermine to matrices, a touch-matrix (also known as adjaceny-graph matrix) and a distance matrix." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPsAAAD7CAYAAACscuKmAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAANDklEQVR4nO3db4hl9X3H8fcn65+tBjGmareurZGKiRRc08U/2ILVrrWJaJ9YFFJCCF0otihNSWKehBYC+ygkD0roYkwtSZNaU2mQoIiJtIHUatCQ6rpVTNBF49rEohhqY/LtgznrXiYzs+fO/TPn3t/7BcO959yZ+Z3D7nfO55z7O/ebqkLS8nvbVm+ApPmw2KVGWOxSIyx2qREWu9QIi11qxETFnuSaJAeTPJPk49PaKEnTl82+z55kG/BfwB7gEPAIcFNVPTm9zZM0LcdN8LMXA89U1bMASb4CXA+sW+wn5MTazskTDClpI//L6/xfvZG1Xpuk2M8Cnh9ZPgRcstEPbOdkLslVEwwpaSMP14PrvjZJsa/11+MXzgmS7AX2AmznpAmGkzSJSS7QHQLOHlneCbyw+puqan9V7a6q3cdz4gTDSZrEJMX+CHBeknclOQG4EfjadDZL0rRtOsZX1ZtJ/gy4H9gG3FFVT0xtyyRN1STn7FTV14Gvb+Zn73/h8bee//6v7ppkMyT14Aw6qREWu9SIiWL8JEaju5Femj2P7FIjLHapEVsW40cZ6aXZ88guNcJilxoxiBg/ykgvzYZHdqkRFrvUiMHF+FFGeml6PLJLjbDYpUYMOsaPMtJLk/HILjXCYpcaYbFLjViYc/ZR652/r35N0lEe2aVGWOxSIxYyxo9aHdt9W05a2zGP7EnuSHI4yX+OrDstyQNJnu4e3zHbzZQ0qT4x/u+Aa1at+zjwYFWdBzzYLUsasGPG+Kr61yTnrFp9PXBF9/xO4CHgY9PcsM1ypp20ts1eoDuzql4E6B7PmN4mSZqFmV+gs2WzNAybLfaXkuyoqheT7AAOr/eNVbUf2A9wSk57q3/76skwR0wzbhvdpaM2G+O/Bnywe/5B4F+mszmSZqXPW29fBr4NnJ/kUJIPA/uAPUmeBvZ0y5IGLFV17O+aklNyWl2Sq35h/Twi/XrjGfW1TB6uB3m1fpy1XnO6rNQIi11qxCBi/CgjvbR5xnhJFrvUisHF+FFGemk8xnhJFrvUikHH+FFGeunYjPGSLHapFQsT40etF+lhNpHbSK9FYYyXZLFLrVjIGD/KSC8dZYyXZLFLrVj4GL/aPCffGOk1NMZ4SRa71Iqli/GjjPRqzUQxPsnZSb6Z5ECSJ5Lc0q23k6u0QPrE+DeBj1TVe4BLgZuTXICdXKWF0qeL64vAkSaOryU5AJzFgDu5HrFeR9d5jmWk11CMdYGua918EfAwdnKVFkrvYk/yduCrwK1V9eoYP7c3yaNJHv0pb2xmGyVNQa+r8UmOB+4F7q+qT3frDgJXjHRyfaiqzt/o98z7avx6jNlaVpNejQ/weeDAkULv2MlVWiB9+rNfDvwx8L0kj3frPsFK59a7uq6uzwE3zGQLJU1Fn6vx3wLWjAXA1mdySb30ObIvtXmev69++8/rBZon58ZLjbDYpUY0GePnObNuvXFXj22k16x5ZJcaYbFLjWgyxo/qE+lnFbG9eUbz5JFdaoTFLjViqT+WahLzjvTrjW2k1zj8dFlJFrvUCmN8D0Z6LQpjvCSLXWqFMX5MRnoNmTFeksUutcIYPwEjvYbGGC/JYpdaYYyfEiO9hmDSJhHbk/xHku92LZv/qltvy2ZpgfSJ8W8AV1bVhcAu4Jokl2LLZmmhjBXjk5wEfAv4U+DvWdBeb7NmpNdWmfhqfJJtXeunw8ADVWXLZmnB9Cr2qvpZVe0CdgIXJ/nNvgPYslkahrGvxif5JPA68CcY48ey0WfUG7k1DZNejT89yand818Cfg94Cls2Swulz0dJ7wDuTLKNlT8Od1XVvUm+jS2bpYXhpJotNM+r9l6lb4Nz4yVZ7FIrjPEDYaTXNBjjJVnsUiuM8QNkpNdmGeMlWexSK4zxA2ek1ziM8ZIsdqkVFrvUCM/ZF8hWnb/PagxNn+fskix2qRXG+AU170+w9W25xWCMl2SxS60wxi8BI72OMMZLstilVhjjl4yRvm1TifFdv7fHktzbLduyWVog48T4W4ADI8u2bJYWSJ+OMCTZCbwf+BTwF93q64Eruud3Ag8BH5vu5mlco1F6o95ysx7PSD88fY/snwE+Cvx8ZF2vls12cZWGoU9jx2uBw1X1nc0MUFX7q2p3Ve0+nhM38yskTUGfGH85cF2S9wHbgVOSfBF4KcmOkZbNh2e5oRrfvCO20X3Yjnlkr6rbqmpnVZ0D3Ah8o6o+gC2bpYUyyaSafcCeJE8De7plSQPV62r8EVX1ECtX3amqHwHOkFlA875q7lX6YXC6rNQIi11qhHPjGzTv+fPrjW2knz5vcZVksUutMMY3zki/XIzxkix2qRXGeL1lo1tiZx2zjfTTYYyXZLFLrTDGa01G+sVkjJdksUutMMarl62afGOkH48xXpLFLrXCGK+xGemHyxgvyWKXWmGM10SM9MOyUYzv2+vtB8BrwM+AN6tqd5LTgH8EzgF+APxRVb0yjQ2WNH3jxPjfrapdVbW7W7aLq7RAJjlnv56V7q10j3848dZImple5+xJvg+8AhTwt1W1P8n/VNWpI9/zSlW9Y6Pf4zn7chvC+fs8xhuyic/Zgcur6oUkZwAPJHmq7+BJ9gJ7AbZzUt8fkzRlvWJ8Vb3QPR4G7gEupuviCrBRF1dbNkvDcMwje5KTgbdV1Wvd86uBv+ZoF9d92MVVrB+fZ/02WcuxfRx9YvyZwD1Jjnz/P1TVfUkeAe5K8mHgOeCG2W2mpEkds9ir6lngwjXW28VVWiBjtWyWNmM0Zs/7ir0z7Y5ybrzUCItdaoQ3wmjLGOmnz/vZJVnsUiuM8RoEI/10GOMlWexSK4zxGhwj/eYZ4yVZ7FIrnBuvwekzl34e4y16pF/NI7vUCItdaoQxXgtjHlfplznSe2SXGmGxS41wUo0W0kZX6WcRuRcl0jupRpLFLrXCGK+FZ6Q/auIYn+TUJHcneSrJgSSXJTktyQNJnu4eN+zzJmlr9Y3xnwXuq6p3s/IZ8gewZbO0UI4Z45OcAnwXOLdGvjnJQeCKqnqx6/X2UFWdv9HvMsZrHuYZs4cW6SeN8ecCLwNfSPJYktu7nm9nVtWLAN3jGVPbYklT16fYjwPeC3yuqi4CXmeMyJ5kb5JHkzz6U97Y5GZKmlSfGP8rwL9X1Tnd8u+wUuy/gTFeAze0mD1rE8X4qvoh8HySI4V8FfAkR1s2gy2bpcHre9fbnwNfSnIC8CzwIVb+UNiyWVoQvYq9qh4Hdq/xkplcC6Plq/TgdFmpGRa71AjnxqsZ8/48+rXGnfVY3uIqyWKXWmGxS43wnF1NWtbzd8/ZJVnsUiuM8WreECL9tMYzxkuy2KVWGOOlEVsV6VePvdnxjPGSLHapFcZ4aR2LGOmN8ZIsdqkVxniph0WJ9MZ4SRa71ApjvDSmIUf6iWJ8kvOTPD7y9WqSW23ZLC2WPh1hDlbVrqraBfwW8BPgHmzZLC2UsWJ8kquBT1bV5bZsloYX6ad5Nf5G4Mvd814tm+3iKg1D72Lv+rxdB/zTOANU1f6q2l1Vu4/nxHG3T9KU9I7xSa4Hbq6qq7vlsWN8kpdZ6e/+35Nt9kL6Zdrbb/d5/n69qk5f64W+XVwBbuJohIejLZv30bNlc1WdnuTRqlqrSeRSa3G/3edh6RXjk5wE7AH+eWT1PmBPkqe71/ZNf/MkTUvfls0/Ad65at2PsGWztDC2Yrrs/i0Ycwha3G/3eUDmOl1W0tbxRhipEXMt9iTXJDmY5JkkSzm9NsnZSb6Z5ECSJ5Lc0q1f+nsJkmxL8liSe7vlFvb51CR3J3mq+ze/bKj7PbdiT7IN+BvgD4ALgJuSXDCv8efoTeAjVfUe4FLg5m4/W7iX4BbgwMhyC/v8WeC+qno3cCEr+z/M/a6quXwBlwH3jyzfBtw2r/G36ouV+Qd7gIPAjm7dDuDgVm/blPdzJyv/sa8E7u3WLfs+nwJ8n+7a18j6Qe73PGP8WcDzI8uHunVLK8k5wEXAw/S8l2CBfQb4KPDzkXXLvs/nAi8DX+hOX25PcjID3e95Fvtad+Is7VsBSd4OfBW4tape3ertmaUk1wKHq+o7W70tc3Yc8F7gc1V1EStTwYcR2dcwz2I/BJw9srwTeGGO489NkuNZKfQvVdWRWYcvdfcQ0D0e3qrtm4HLgeuS/AD4CnBlki+y3PsMK/+nD1XVw93y3awU/yD3e57F/ghwXpJ3dXfQ3cjK/PqlkiTA54EDVfXpkZeO3EsAPe8lWBRVdVtV7ayqc1j5d/1GVX2AJd5ngKr6IfB8kiM3gF0FPMlA93uuk2qSvI+Vc7ttwB1V9am5DT4nSX4b+Dfgexw9f/0EK+ftdwG/BjwH3FBVP96SjZyhJFcAf1lV1yZ5J0u+z0l2AbcDJwDPAh9i5SA6uP12Bp3UCGfQSY2w2KVGWOxSIyx2qREWu9QIi11qhMUuNcJilxrx/4e2QX7PcV6MAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "touch_matrix = cle.generate_touch_matrix(voronoi_diagram)\n", "\n", "centroids = cle.labelled_spots_to_pointlist(spot_image) # this is susbstanially faster than centroids_of_labels\n", "\n", "distance_matrix = cle.generate_distance_matrix(centroids, centroids)\n", "\n", "\n", "cle.imshow(touch_matrix)\n", "cle.imshow(distance_matrix)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "From these two matrices, we can determine the minimum and maximum distance between centroids of touching objects (cells) in the voronoi image. These are estimated minor and major axis of the segmented objects." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "minimum distance of touching neihbors 9.2581787109375\n", "maximum distance of touching neihbors 15.592570560079226\n" ] } ], "source": [ "min_distance = cle.minimum_distance_of_touching_neighbors(distance_matrix, touch_matrix)\n", "max_distance = cle.maximum_distance_of_touching_neighbors(distance_matrix, touch_matrix)\n", "\n", "print(\"minimum distance of touching neihbors\", cle.mean_of_all_pixels(min_distance))\n", "print(\"maximum distance of touching neihbors\", cle.mean_of_all_pixels(max_distance))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Distance visualisation\n", "Finally, let's visualize distances between neighbors in a colored mesh." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "mesh = cle.draw_distance_mesh_between_touching_labels(voronoi_diagram)\n", "cle.imshow(mesh)" ] }, { "cell_type": "code", "execution_count": null, "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.9" } }, "nbformat": 4, "nbformat_minor": 4 }