diff --git a/MorphologicalOperators_Tutorial/MorphologicalOperators.ipynb b/MorphologicalOperators_Tutorial/MorphologicalOperators.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..80201b2b39cde9af7e9e797d10175ca0f19b019e --- /dev/null +++ b/MorphologicalOperators_Tutorial/MorphologicalOperators.ipynb @@ -0,0 +1,890 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Morphological Operators Tutorial\n", + "\n", + "## CMSE 495 Capstone\n", + "\n", + "----\n", + "\n", + "## What are Morphological Operators?\n", + "\n", + "In the context of image segmentation, **morphological operators** are mathematical operations that can help extract useful features from images, especially when shapes of objects are concerned.\n", + "\n", + "These operations can be applied to image segmentation maps to refine the labeled regions on the map, and achieve desire accuracy.\n", + "\n", + "### Examples of Common Morphological Operators\n", + "\n", + "- **Dilation:** This operation is used to make segments bigger, adding pixels around the edges. It can be used to connect fragmented segments or to fill in small gaps.\n", + "- **Erosion:** This operation is used to make segments smaller, removing pixels around the boundaries of segments. Its main purpose is to separate overlapping segments and to remove small segments from the map. \n", + "- **Opening:** This operation that is an erosion operation followed immediately by a dilation operation. It is used to take advantage of the removing small objects capabilities of erosion while preserving shapes and sizes of larger objects. \n", + "- **Closing:** This operation is the inverse of opening, a dilation operation followed immediately by an erosion operation. Its purpose is to fill in small holes or gaps of segments in an image while not changing the overall shape of the object.\n", + "\n", + "---\n", + "\n", + "## Demo" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "from skimage import morphology" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If you are interested in sci-kit image's morphology module's documentation, check it out here(https://scikit-image.org/docs/0.10.x/api/skimage.morphology.html)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Sample image" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 432x288 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "image = np.array([[0, 0, 0, 0, 0, 0, 0],\n", + " [0, 0, 0, 0, 0, 0, 0],\n", + " [0, 0, 1, 1, 1, 0, 0],\n", + " [0, 0, 1, 1, 1, 0, 0],\n", + " [0, 0, 1, 1, 1, 0, 0],\n", + " [0, 0, 0, 0, 0, 0, 0],\n", + " [0, 0, 0, 0, 0, 0, 0]], dtype=np.uint8)\n", + "plt.imshow(image);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "These are examples of matrices that are used to preform operations: a diamond and a square." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[1 1 1]\n", + " [1 1 1]\n", + " [1 1 1]]\n", + "[[0 1 0]\n", + " [1 1 1]\n", + " [0 1 0]]\n" + ] + } + ], + "source": [ + "# matrices\n", + "sq = morphology.square(width=3)\n", + "dia = morphology.diamond(radius=1)\n", + "print(sq)\n", + "print(dia)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n", + "### Erosion:\n", + "This operation is used to make segments smaller, removing pixels around the boundaries of segments. Its main purpose is to separate overlapping segments and to remove small segments from the map. " + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "<matplotlib.image.AxesImage at 0x7f885b0b4b50>" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "text/plain": [ + "<Figure size 432x288 with 0 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 432x288 with 2 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# erosion with square matrix\n", + "plt.figure()\n", + "f, axarr = plt.subplots(1,2) \n", + "\n", + "axarr[0].imshow(image) # original image\n", + "axarr[1].imshow(morphology.erosion(image, sq)) #eroded image" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "<matplotlib.image.AxesImage at 0x7f8858a376a0>" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "text/plain": [ + "<Figure size 432x288 with 0 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 432x288 with 2 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# erosion with diamond matrix\n", + "plt.figure()\n", + "f, axarr = plt.subplots(1,2) \n", + "\n", + "axarr[0].imshow(image) # original image\n", + "axarr[1].imshow(morphology.erosion(image, dia)) # dilated image" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n", + "### Dilation:\n", + "This operation is used to make segments bigger, adding pixels around the edges. It can be used to connect fragmented segments or to fill in small gaps." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "<matplotlib.image.AxesImage at 0x7f885b27fa30>" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "text/plain": [ + "<Figure size 432x288 with 0 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 432x288 with 2 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# dilation with square matrix\n", + "plt.figure()\n", + "f, axarr = plt.subplots(1,2) \n", + "\n", + "axarr[0].imshow(image) # original image\n", + "axarr[1].imshow(morphology.dilation(image, sq)) # dilated image" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "<matplotlib.image.AxesImage at 0x7f885b2be700>" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "text/plain": [ + "<Figure size 432x288 with 0 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 432x288 with 2 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# dilation with diagonal matrix\n", + "plt.figure()\n", + "f, axarr = plt.subplots(1,2) \n", + "\n", + "axarr[0].imshow(image) # original image\n", + "axarr[1].imshow(morphology.dilation(image, dia)) # dilated image" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n", + "### Opening and Closing:\n", + "- **Opening:** This operation that is an erosion operation followed immediately by a dilation operation. It is used to take advantage of the removing small objects capabilities of erosion while preserving shapes and sizes of larger objects. \n", + "- **Closing:** This operation is the inverse of opening, a dilation operation followed immediately by an erosion operation. Its purpose is to fill in small holes or gaps of segments in an image while not changing the overall shape of the object.\n", + "\n", + "---\n", + "\n", + "Let's generate an image with a hole in it to showcase these properties." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 432x288 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "hole = np.array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n", + " [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n", + " [0, 0, 1, 1, 1, 1, 1, 1, 0, 0],\n", + " [0, 0, 1, 1, 1, 1, 1, 1, 0, 0],\n", + " [0, 0, 1, 1, 1, 1, 1, 1, 0, 0],\n", + " [0, 0, 1, 1, 1, 0, 0, 1, 0, 0],\n", + " [0, 0, 1, 1, 1, 0, 0, 1, 0, 0],\n", + " [0, 0, 1, 1, 1, 0, 0, 1, 0, 0],\n", + " [0, 0, 1, 1, 1, 1, 1, 1, 0, 0],\n", + " [0, 0, 1, 1, 1, 1, 1, 1, 0, 0],\n", + " [0, 0, 1, 1, 1, 1, 1, 1, 0, 0],\n", + " [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n", + " [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]], np.uint8)\n", + "plt.imshow(hole);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Opening:" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "<matplotlib.image.AxesImage at 0x7f885b4225b0>" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "text/plain": [ + "<Figure size 432x288 with 0 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 432x288 with 2 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# opening with square matrix\n", + "plt.figure()\n", + "f, axarr = plt.subplots(1,2) \n", + "\n", + "axarr[0].imshow(hole) # original image\n", + "axarr[1].imshow(morphology.opening(hole, sq)) # dilated image" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "<matplotlib.image.AxesImage at 0x7f885b5f6dc0>" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "text/plain": [ + "<Figure size 432x288 with 0 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXAAAADlCAYAAABKxax7AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Z1A+gAAAACXBIWXMAAAsTAAALEwEAmpwYAAAMr0lEQVR4nO3df6jdd33H8edrSZqY6GxlQ9akrPmjdJSyWbm4asFB02Gdxe6P/dFCRZ2Qf6ZWEaTd/vDfwUQqTByh1gqW9o/YsSKdbamKDFwwTcNsG52lujb9sXbIVDrWJPjeH/cMYmiacL/f+/2e973PB5Tc872H8/7ce1959ZPvOed7U1VIkvr5rbkXIElaGwtckpqywCWpKQtckpqywCWpKQtckpraOuWwC7K9drBrypHaRP6XVzlRr2WO2WZb6+ls2Z60wHewiz/OvilHahM5VI/ONttsaz2dLdueQpGkpixwSWpqUIEnuT7Jj5M8neS2sRYlzc1sq4M1F3iSLcCXgPcDVwA3J7lirIVJczHb6mLIDvxdwNNV9UxVnQDuA24cZ1nSrMy2WhhS4LuB5067fXxxTOrObKuFdX8ZYZL9wH6AHexc73HSZMy25jZkB/48cMlpt/csjv2GqjpQVStVtbKN7QPGSZMx22phSIH/ALgsyd4kFwA3AQ+MsyxpVmZbLaz5FEpVnUryceAhYAtwV1U9OdrKpJmYbXUx6Bx4VT0IPDjSWqSlYbbVge/ElKSmLHBJasoCl6SmLHBJasoCl6SmLHBJasoCl6SmLHBJasoCl6SmLHBJasoCl6SmLHBJasoCl6SmLHBJasoCl6SmLHBJasoCl6Sm1v230i+Lh144OvcSNo33XfyOuZeg87QZ/15spHy6A5ekpixwSWrKApekptZc4EkuSfKdJE8leTLJrWMuTJqL2VYXQ57EPAV8pqqOJHkL8FiSR6rqqZHWJs3FbKuFNe/Aq+rFqjqy+PhXwDFg91gLk+ZittXFKOfAk1wKXAUcGuPxpGVhtrXMBr8OPMmbgW8An6qqX77O5/cD+wF2sHPoOGkyZlvLbtAOPMk2VgN+T1Xd/3r3qaoDVbVSVSvb2D5knDQZs60OhrwKJcBXgGNV9YXxliTNy2yriyE78GuADwHXJjm6+O/PRlqXNCezrRbWfA68qv4FyIhrkZaC2VYXvhNTkpqywCWpKQtckpraNNcDlzaqzXhN7yGGfL+W7Vri7sAlqSkLXJKassAlqSkLXJKassAlqSkLXJKassAlqSkLXJKassAlqSkLXJKassAlqSkLXJKassAlqSkLXJKa8nKykjaVZbsk7BDuwCWpKQtckpqywCWpqcEFnmRLkseTfHOMBUnLwmxr2Y2xA78VODbC40jLxmxrqQ0q8CR7gA8Ad46zHGk5mG11MHQHfgfwWeDXZ7tDkv1JDic5fJLXBo6TJnMHZltLbs0FnuQG4OWqeuyN7ldVB6pqpapWtrF9reOkyZhtdTFkB34N8MEkPwPuA65N8vVRViXNy2yrhTUXeFXdXlV7qupS4Cbg21V1y2grk2ZittWFrwOXpKZGuRZKVX0X+O4YjyUtE7OtZeYOXJKassAlqSkvJ7vE5rzs5UMvHJ1ttja+jXRJ1zm5A5ekpixwSWrKApekpixwSWrKApekpixwSWrKApekpixwSWrKApekpixwSWrKApekpixwSWrKApekpixwSWrKApekpixwSWrKApekpixwSWpqUIEnuTDJwSQ/SnIsybvHWpg0J7OtDob+TswvAt+qqr9IcgGwc4Q1ScvAbGvprbnAk7wVeC/wEYCqOgGcGGdZ0nzMtroYcgplL/AK8NUkjye5M8mukdYlzclsq4UhBb4VeCfw5aq6CngVuO3MOyXZn+RwksMneW3AOGkyZlstDCnw48Dxqjq0uH2Q1dD/hqo6UFUrVbWyje0DxkmTMdtqYc0FXlUvAc8luXxxaB/w1CirkmZkttXF0FehfAK4Z/Es/TPAR4cvSVoKZltLb1CBV9VRYGWcpUjLw2yrA9+JKUlNWeCS1JQFLklNWeCS1JQFLklNWeCS1JQFLklNWeCS1JQFLklNWeCS1JQFLklNWeCS1JQFLklNWeCS1JQFLklNWeCS1JQFLklNWeCS1NTQ34mpdfTQC0fnXoK0LubM9vsufsdss8fmDlySmrLAJakpC1ySmhpU4Ek+neTJJE8kuTfJjrEWJs3JbKuDNRd4kt3AJ4GVqroS2ALcNNbCpLmYbXUx9BTKVuBNSbYCO4EXhi9JWgpmW0tvzQVeVc8DnweeBV4EflFVD595vyT7kxxOcvgkr619pdJEzLa6GHIK5SLgRmAvcDGwK8ktZ96vqg5U1UpVrWxj+9pXKk3EbKuLIadQrgN+WlWvVNVJ4H7gPeMsS5qV2VYLQwr8WeDqJDuTBNgHHBtnWdKszLZaGHIO/BBwEDgC/HDxWAdGWpc0G7OtLgZdC6WqPgd8bqS1SEvDbKsD34kpSU1Z4JLUlJeTlbSpDLmU7bJditYduCQ1ZYFLUlMWuCQ1ZYFLUlMWuCQ1ZYFLUlMWuCQ1ZYFLUlMWuCQ1ZYFLUlMWuCQ1ZYFLUlMWuCQ1ZYFLUlNeTlZqbsglTodcWrWrZbsk7BDuwCWpKQtckpqywCWpqXMWeJK7kryc5InTjr0tySNJfrL486L1XaY0PrOt7s5nB343cP0Zx24DHq2qy4BHF7elbu7GbKuxcxZ4VX0P+PkZh28Evrb4+GvAn4+7LGn9mW11t9Zz4G+vqhcXH78EvH2k9UhzM9tqY/CTmFVVQJ3t80n2Jzmc5PBJXhs6TpqM2dayW2uB/2eS3wNY/Pny2e5YVQeqaqWqVraxfY3jpMmYbbWx1gJ/APjw4uMPA/80znKk2ZlttXE+LyO8F/g+cHmS40k+Bvwt8KdJfgJct7gttWK21d05r4VSVTef5VP7Rl6LNCmzre58J6YkNWWBS1JTFrgkNbVprge+ka4BLI3Fvxe9uQOXpKYscElqygKXpKYscElqygKXpKYscElqygKXpKYscElqygKXpKYscElqygKXpKYscElqygKXpKYscElqygKXpKYscElqygKXpKbOWeBJ7krycpInTjv2d0l+lOTfkvxjkgvXdZXSOjDb6u58duB3A9efcewR4Mqq+kPg34HbR16XNIW7Mdtq7JwFXlXfA35+xrGHq+rU4ua/AnvWYW3SujLb6m6Mc+B/CfzzCI8jLRuzraU26LfSJ/kb4BRwzxvcZz+wH2AHO4eMkyZjttXBmgs8yUeAG4B9VVVnu19VHQAOAPx23nbW+0nLwmyrizUVeJLrgc8Cf1JV/zPukqT5mG11cj4vI7wX+D5weZLjST4G/D3wFuCRJEeT/MM6r1MandlWd+fcgVfVza9z+CvrsBZpUmZb3flOTElqygKXpKYscElqKm/wKqnxhyWvAP/xBnf5HeC/JlrOZp475+z1nPv7VfW76/TYb+gc2fbnvPHnrvfs1832pAV+LkkOV9WKczfu7Dm/5rn4c974c+ea7SkUSWrKApekppatwA84d8PPnvNrnos/540/d5bZS3UOXJJ0/pZtBy5JOk9LUeBJrk/y4yRPJ7ltwrmXJPlOkqeSPJnk1qlmL+ZvSfJ4km9OOPPCJAcXvzbsWJJ3Tzj704vv8xNJ7k2yY6rZc5kj25sx14u5s2R7zlzPXuBJtgBfAt4PXAHcnOSKicafAj5TVVcAVwN/NeFsgFuBYxPOA/gi8K2q+gPgj6aan2Q38ElgpaquBLYAN00xey4zZnsz5hpmyPbcuZ69wIF3AU9X1TNVdQK4D7hxisFV9WJVHVl8/CtWf+C7p5idZA/wAeDOKeYtZr4VeC+LCzZV1Ymq+u+p5rN68bQ3JdkK7ARemHD2HGbJ9mbL9WLunNmeLdfLUOC7gedOu32cicJ2uiSXAlcBhyYaeQer153+9UTzAPYCrwBfXfwT984ku6YYXFXPA58HngVeBH5RVQ9PMXtGs2d7k+QaZsr23LlehgKfXZI3A98APlVVv5xg3g3Ay1X12HrPOsNW4J3Al6vqKuBVYKrzshexuvvcC1wM7EpyyxSzN6tNlGuYKdtz53oZCvx54JLTbu9ZHJtEkm2shvyeqrp/orHXAB9M8jNW/1l9bZKvTzD3OHC8qv5/N3aQ1dBP4Trgp1X1SlWdBO4H3jPR7LnMlu1NlmuYL9uz5noZCvwHwGVJ9ia5gNUnAB6YYnCSsHrO7FhVfWGKmQBVdXtV7amqS1n9er9dVev+f+2qegl4Lsnli0P7gKfWe+7Cs8DVSXYuvu/7mOeJrinNku3NluvF7LmyPWuuB/1W+jFU1akkHwceYvUZ3Luq6smJxl8DfAj4YZKji2N/XVUPTjR/Dp8A7lkUyjPAR6cYWlWHkhwEjrD6KonH2eDvypwx25sx1zBDtufOte/ElKSmluEUiiRpDSxwSWrKApekpixwSWrKApekpixwSWrKApekpixwSWrq/wD/VNQuo3mF+AAAAABJRU5ErkJggg==\n", + "text/plain": [ + "<Figure size 432x288 with 2 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# opening with diagonal matrix\n", + "plt.figure()\n", + "f, axarr = plt.subplots(1,2) \n", + "\n", + "axarr[0].imshow(hole) # original image\n", + "axarr[1].imshow(morphology.opening(hole, dia)) # dilated image" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Closing: " + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "<matplotlib.image.AxesImage at 0x7f885b798790>" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "text/plain": [ + "<Figure size 432x288 with 0 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 432x288 with 2 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# closing with square matrix\n", + "plt.figure()\n", + "f, axarr = plt.subplots(1,2) \n", + "\n", + "axarr[0].imshow(hole) # original image\n", + "axarr[1].imshow(morphology.closing(hole, sq)) # dilated image" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "<matplotlib.image.AxesImage at 0x7f885b8f3f70>" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "text/plain": [ + "<Figure size 432x288 with 0 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 432x288 with 2 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# closing with diagonal matrix\n", + "plt.figure()\n", + "f, axarr = plt.subplots(1,2) \n", + "\n", + "axarr[0].imshow(hole) # original image\n", + "axarr[1].imshow(morphology.closing(hole, dia)) # dilated image" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n", + "\n", + "Now that we have an idea on how these operations work on simple shapes, we can begin to apply these ideas to a more complex image segmentation map." + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "<matplotlib.image.AxesImage at 0x7f885f410ca0>" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA1cAAANRCAYAAAAPm0btAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Z1A+gAAAACXBIWXMAAAsTAAALEwEAmpwYAAAok0lEQVR4nO3dUait510m8OdvUlNaLTbUCUkapsXGixacYzk0GXSkEsa0vYm9Ke2FBimkFymoeGH1RhkQejEaELRMxNIKaqdES8MQjE1QOoKpTUpom3aqB21pYtqMM6KBQqet71yclWRld6991t7rv9b3rbV/Pzictb+91l7vPufb314P7/O+q8YYAQAAYDPfM/UAAAAADoFwBQAA0EC4AgAAaCBcAQAANBCuAAAAGghXAAAADbYWrqrqLVX1paq6VFXv29bzAAAAzEFt432uquqqJH+b5D8neTLJp5O8a4zxhfYnAwAAmIGrt/R135Tk0hjj75Okqj6S5I4kx4ar761rxkvz8i0NBQAAoM+z+ed/GmP84NHj2wpXNyb56tLHTya5ZdWdX5qX55a6bUtDAQAA6PPQuO8rxx3fVri6oqq6K8ldSfLSvGyqYQAAALTY1oYWTyW5aenjVy+OPW+Mce8Y4+IY4+JLcs2WhgEAALAb2wpXn05yc1W9tqq+N8k7k9y/pecCAACY3FZqgWOMb1fVe5M8mOSqJB8cYzyxjecCAACYg62tuRpjPJDkgW19fV7w4D8+/vzt22+4cKrjZ3nM8vFNn7/za13pc8c56fnXecw699/lYwDgPDnPv/c3fQ11krM8hsu29ibCAAAA54lwBQAA0EC4AgAAaFBjjKnHkFfUtWOTNxG2HgUAAM6PqdeCPTTue2yMcfHocTNXAAAADYQrAACABlvbin0b1P8AAIBt5YJN64ZmrgAAABoIVwAAAA1mVwtU/QMAAPaRmSsAAIAGwhUAAEAD4QoAAKCBcAUAANBAuAIAAGgwu90CAQAApnDSzuXrvMGwmSsAAIAGwhUAAEADtUAAAIArWK4MXnX98fcxcwUAANBAuAIAAGggXAEAADQQrgAAABoIVwAAAA2EKwAAgAbCFQAAQAPhCgAAoIFwBQAA0EC4AgAAaCBcAQAANBCuAAAAGghXAAAADYQrAACABsIVAABAg6unHkCS/PCPfCMPPvj41MMAAAA4MzNXAAAADYQrAACABsIVAABAA+EKAACggXAFAADQQLgCAABoIFwBAAA0EK4AAAAaCFcAAAANhCsAAIAGwhUAAEAD4QoAAKDBLMLV3372Zbn9hgu5/YYLUw8FAADgTGYRrgAAAPadcAUAANDg6qkHkCQ//CPfyIMPPj71MAAAAM7MzBUAAEAD4QoAAKCBcAUAANBgFuHKVuwAAMC+m0W4AgAA2HfCFQAAQANbsQMAADQwcwUAANBAuAIAAGggXAEAADQQrgAAABoIVwAAAA2EKwAAgAbCFQAAQAPhCgAAoIFwBQAA0EC4AgAAaCBcAQAANBCuAAAAGghXAAAADYQrAACABsIVAABAg1mEq7/97Mty+w0XcvsNF6YeCgAAwJnMIlwBAADsO+EKAACggXAFAADQQLgCAABoIFwBAAA0uHrqARy1vGPgg//4+GTjAAAAOA0zVwAAAA2EKwAAgAazqwUuO+lNhVUGAQCAOTFzBQAA0EC4AgAAaDDrWuBJ7CoIAADMiZkrAACABsIVAABAA+EKAACgwd6uuVq2ast2a7EAAIBdMXMFAADQQLgCAABocBC1QPU/AABgamauAAAAGghXAAAADYQrAACABsIVAABAA+EKAACgwV7tFmhXQAAAYK7MXAEAADQQrgAAABrsVS3w9hsuPH9bRRAAAJgTM1cAAAANhCsAAIAGwhUAAECD2a25spYKAADYR2auAAAAGghXAAAADWZXC7TdOodu+Rzv5OcFAKDXabOJmSsAAIAGwhUAAECD2dUCVZvosmoa96Tp3XUqe6u+1tzMeWznSec5dtLXmvq8nNO1e9Of/XUec5avtStTPz/AoXrx79dLx97HzBUAAEAD4QoAAKBBjTGmHkNeUdeOW+q2K97vvNUb/tPd73n+9v/8nf824Uimp+IGwHPWrWjug+Xxf+Pttzx/e/n3/vLrgSR52cc+derHrLLqMef9dQc8Z9U15qrrLz02xrh49P5mrgAAABoIVwAAAA1mVws8acerfZzu38Sq6fmjU/2HNHWv/gfAVE56DbJcv1tlVV3vvDik1yOcX+u+Fn1o3KcWCAAAsC3CFQAAQIPZ1QJPcki1wHV38dmGo9P269QP1921iOkcraCctp7S+f940lg6LT+P8xA4i/NY39s1dUH2iVogAADADAhXAAAADYQrAACABrNbc3WoW7FPucZq2w5prYvuPdt2HrZqPqRrAvvrUH++Do31WMyNNVcAAAAzIFwBAAA0mF0tcF1zrQgeav3vLFWmdapBm9Y2TnoOlRBglaPXjtNu69957dr0bRS2aRdvowDHURdkKmqBAAAAMyBcAQAANNirWuBcq4DLDqkWOKdqCgBwfqgFskvrVgGXqQUCAABskXAFAADQ4OqpB3Aaq6bspq4LqgICAPRZfm11SBXB5deyR1+/nvQ5+p2lCrgOM1cAAAANhCsAAIAGe7Vb4GlNMaV6SBVBAIBd2fRNq+dapdtW/Wyu3+8+slsgAADAzAhXAAAADYQrAACABge95moKti8HANiOs6zLWl6bdHRtzTrrllZtkb6ttVRztur738f1X5v+/1lzBQAAsEXCFQAAQAO1wC1SEQQA2J7lmuDy665Nt3VnM/tQE1QLBAAAmDHhCgAAoIFaYDNVQACA/aA+yFmpBQIAAGyRcAUAANDg6qkHcAhUAQEA9s+q13DqgpzVRuGqqr6c5Nkk30ny7THGxaq6Nsl/T/KaJF9O8o4xxj9vNkwAAIB566gF/uQY48LSgq73JXl4jHFzkocXHwMAABy0bdQC70jy5sXtDyf5yyS/vIXnmY1Vb2AHAMD+URfkrDaduRpJ/ryqHququxbHrhtjPL24/bUk1234HAAAALO36czVj48xnqqqf5fkE1X1v5Y/OcYYVXXsG2ktwthdSfLSvGzDYQAAAExro5mrMcZTi7+fSfKxJG9K8vWquj5JFn8/s+Kx944xLo4xLr4k12wyDAAAgMmdeeaqql6e5HvGGM8ubv9Ukv+S5P4kdyZ5/+Lvj3cMdM6sswIAOHzrvuazNuv82qQWeF2Sj1XVc1/nj8YYf1ZVn07y0ap6d5KvJHnH5sMEAACYtzOHqzHG3yf5D8cc/z9JbttkUAAAAPtmG1uxnzu2YgcA4Dn79npQjbFPx5sIAwAAnHvCFQAAQAO1wDXt2/QuAACs4yyvc1UJj2fmCgAAoIFwBQAA0EAt8ASqgAAA8N1UCY9n5goAAKCBcAUAANBALfAIVUAAAOh3HqqEZq4AAAAaCFcAAAAN1AKjCggAAHN02tfpU9cIzVwBAAA0EK4AAAAaCFcAAAANzs2aK+uqAADgsJ30mn8X67HMXAEAADQQrgAAABocdC1QFRAAAEhenA22VRE0cwUAANBAuAIAAGhwcLVAVUAAAOAkqzLDpnVBM1cAAAANhCsAAIAGB1ELVAUEAAA2dTRXnLYmaOYKAACggXAFAADQYG9rgaqAAADANp32jYfNXAEAADQQrgAAABoIVwAAAA32as2VdVYAAMCu2IodAABgAsIVAABAg72qBQIAAOyKrdgBAAAmIFwBAAA0UAsEAAA4ht0CAQAAJiBcAQAANNirWuDytJw3FAYAALbJboEAAAATEK4AAAAa7FUtUBUQAADYFbsFAgAATEC4AgAAaCBcAQAANNirNVcAAAC7Yit2AACACQhXAAAADdQCAQAAjmErdgAAgAkIVwAAAA32qha4PC23vHMHAABAN7sFAgAATEC4AgAAaLBXtUBVQAAAYK7MXAEAADQQrgAAABoIVwAAAA2EKwAAgAbCFQAAQIO92i0QAABgV9Z54+BlZq4AAAAaCFcAAAANhCsAAIAG1lwBAAAc4xtvv+X52+usvzJzBQAA0EC4AgAAaKAWCAAAcAxbsQMAAExAuAIAAGiwV7XA5Wm55Z07AAAAutktEAAAYALCFQAAQIO9qgWqAgIAALtit0AAAIAJCFcAAAAN9qoWaLdAAABgV+wWCAAAMAHhCgAAoIFwBQAA0GCv1lxZZwUAAMyVmSsAAIAGwhUAAECDvaoF2oodAACYKzNXAAAADYQrAACABntVCwQAANiV5WVJ6zBzBQAA0EC4AgAAaLC3tUA7BwIAANu0nDPWqQiauQIAAGggXAEAADTY21rgqik6FUEAAKCD3QIBAAAmIFwBAAA0EK4AAAAa7O2aK+usAACATqddY3WUmSsAAIAGwhUAAECDva0FqgICAABzYuYKAACggXAFAADQYG9rgat28lAXBAAAOixni3V2EjRzBQAA0EC4AgAAaLC3tUAAAIBOR5cYnfZNhc1cAQAANBCuAAAAGqgFAgAA5PQ1wKPMXAEAADQQrgAAABqoBQIAAMRugQAAALMgXAEAADQQrgAAABoc3Jqr5V7k0c4kAADAupbzxDrrr8xcAQAANBCuAAAAGhxcLVAVEAAAmIKZKwAAgAbCFQAAQAPhCgAAoIFwBQAA0EC4AgAAaHAQuwXaIRAAAJiamSsAAIAGwhUAAECDg6gFvuxjn3r+toogwOFbvu4nL772n+V3wqrHnPb4uo85id9jAPvLzBUAAEAD4QoAAKCBcAUAANCgxhhTjyGvqGvHLXVby9fSVQeY1rpri9gtvx8BTm/V77SHxn2PjTEuHj1u5goAAKCBcAUAANDgILZiB+D0Nt0ynP2yzv+r6iBw3m36O9DMFQAAQAPhCgAAoMFB1ALVGIDzqLO+pwpIcvJ54HctwJWZuQIAAGggXAEAADQ4iFrgqh2vAPaFWh5zt+oc9XsX4AVmrgAAABoIVwAAAA32thaohgDMlYof54kdBoF91/l728wVAABAA+EKAACggXAFAADQoMYYU48hr6hrxy11W8vX0u8Gtsl6Ktic39XAXK37e/6hcd9jY4yLR49fceaqqj5YVc9U1eeXjl1bVZ+oqr9b/P3KxfGqqt+uqktV9dmqeuMpvhcAAIC9tU4t8ENJ3nLk2PuSPDzGuDnJw4uPk+StSW5e/LkryQd6hgkAADBvV9yKfYzxyap6zZHDdyR58+L2h5P8ZZJfXhz/g3G5a/hIVf1AVV0/xni6bcQLKgVAJ3U/2J1VP29Hf7cv38/vfWAfnHVDi+uWAtPXkly3uH1jkq8u3e/JxTEAAICDtvFugYtZqlPvilFVd1XVo1X16LfyzU2HAQAAMKkr1gJX+Ppzdb+quj7JM4vjTyW5ael+r14c+y5jjHuT3Jtc3i3wtANQFQBWUfGD/XTSz+46VUKvDYBuq64xq5x15ur+JHcubt+Z5ONLx392sWvgrUn+ZRvrrQAAAObmijNXVfXHubx5xauq6skkv5bk/Uk+WlXvTvKVJO9Y3P2BJG9LcinJN5L83BbGDAAAMDt7+ybCpvuBZaqAwKa8tgC2/ibCAAAAXJlwBQAA0OCsuwVObt03IAT2j4ofMIWzXHu87gCWmbkCAABoIFwBAAA02NtaoGl42B9qfsChskwBWGbmCgAAoIFwBQAA0EC4AgAAaLC3a66WO856zTANa6ngZDc88v3P3/7HW5+dcCTs2knXR69b4HCZuQIAAGggXAEAADTY21qgKXXYHfU/9skuqnhneY5Vj1k+ftLnpvhejo7tOOqOwL7rfJ1j5goAAKCBcAUAANCgxhhTjyGvqGvHLXXbmR+vIgjrU/HbX+tUtJLNa1rrPg/zdFLlcO7OY8XQaxiY3lleGz007ntsjHHx6HEzVwAAAA2EKwAAgAYHsVvg1G8ofJbnn3rMHAYVv8O37k5u6+wwd5Zd6bb1/Gf5WqzHv+V+WXUd99oAtmtbr6HMXAEAADQQrgAAABocxG6By7Y1jX506nCdWuKm040qATxH/W9/nVTFWrUzmvoWXHYedw88ztHXA5YWwPas+5rLboEAAABbJFwBAAA0EK4AAAAaHNxW7OtaZ52UHjO7ZF3V4Vh3y/F1jsN5dtLP0nly0u8HW7nD2diKHQAAYMaEKwAAgAYHtxX7eWCqfz5OqpGq+c2fKh7M23muAm7TOq8j1v395jUJ+2SdGq2t2AEAAGZAuAIAAGiwt7sFrrLuzn/r7BbI+Xbac8G5sx9W7T62znFgt+wWuB3rVKNOem2kCsih6XwNZ+YKAACggXAFAADQwG6BB8ZU/QvU9EjU+uBQqAVO5yxLK9ZdpgG71Pna0G6BAAAAWyRcAQAANDi43QI5X+xgxHFO2mFMTRDgdE6qUqkCMne7XiZi5goAAKCBcAUAANBAuAIAAGhgK/ZzYl/6zrZP50qsmQKW2aJ9v3Ru637c14OjtvXa0lbsAAAAWyRcAQAANLAVOzB7q7ZWVxEElp30NgzMw7rbuq/7GEjmtfW/mSsAAIAGwhUAAEADuwVy6t15TtrpBzqo+wGbUgvkOOtWxuZUM+N0dvW61G6BAAAAWyRcAQAANLBbIGp9zIIqILApVUCu5KTXPKvqf6seoy44H3N6LWvmCgAAoIFwBQAA0EAtkJW8mR/boP4HrEvNj13a9PXNpo9fd5dmLpvr61EzVwAAAA2EKwAAgAZqgcBOrar5qAvC4VHr45B119JUAV+w6t9irlXAZWauAAAAGghXAAAADYQrAACABtZcATtlbRUcLmusoMe+bet+dLydz7MP66yWmbkCAABoIFwBAAA0UAsEAK5oW5W/S/fc+vzt1/3iI2t/DlhtVZVu1fFNa3xnefy+1f3WZeYKAACggXAFAADQoMYYU48hr6hrxy1129TDAJrYERAOw2mrgMs1vm1SEYTprdqR8Lx4aNz32Bjj4tHjZq4AAAAaCFcAAAAN1AKBrVMThHnZdOe/XdX/1qEiCExBLRAAAGCLhCsAAIAG3kQYaKcGCPOzXAWcU61vU+t+L+qDwC6YuQIAAGggXAEAADQQrgAAABpYcwW0sM4K5ueQ1lmtWjO16vuyxgqYgpkrAACABsIVAABAA7VA4MxUAWF+PvnXb3jhg3umG8dJlit7y7W+s1T5pqj/LV/7lquXAGauAAAAGghXAAAADdQCAWCPfVctbcdVwE1reXPd1e9o7Xn531kVEFjFzBUAAEAD4QoAAKCBWiBwRXYFhHmZ+s2B51rl2xW7BQKrmLkCAABoIFwBAAA0UAsEvosaIMzPLqqA57Hut+71bp37qQsCZq4AAAAaCFcAAAANhCsAAIAG1lwBSayzgrmb0zqrVWuLTrqO7GIN0klrnrZ1jVv1ddf9t7BOCw6LmSsAAIAGwhUAAEADtUA4Z9T/4Hxarv+96DqwoyrdtupvZ6nlAWyLmSsAAIAGwhUAAEADtUAAmKlP/vUbNnr8aXcCnFuVbp1dCdfdrXCu7BAIh8XMFQAAQAPhCgAAoIFaIByofazHAJtXAX/iPz7xwgc7uA6c5VrT+Zh9v9Z5E2E4LGauAAAAGghXAAAADdQCAWAPLO/8d+meW5+//aIaIHth36uMwGpmrgAAABoIVwAAAA3UAmGPqZbAfjrpjW+X638v2klu6T6qgPvNroBwuMxcAQAANBCuAAAAGghXAAAADay5AoAdW95KPbc+svqOAOwVM1cAAAANhCsAAIAGaoEAsAPL22+/Lsdvt34Sb70AMH9mrgAAABoIVwAAAA3UAmEPLNeBlqtFwPSO/kyu+nn1c8xznAtwuMxcAQAANBCuAAAAGqgFwp6xYxjM26qal/rXYVq3+qkKCOeDmSsAAIAGwhUAAEADtUAAmNBJ9THmz/8XsMzMFQAAQAPhCgAAoIFwBQAA0MCaKwBYYRdbZluzs3urtk8/y2PW/VqrziVbtMNhMXMFAADQQLgCAABooBYIAEvWqX+x385SxVz1mE3PEecVHBYzVwAAAA2EKwAAgAZqgQCcO+tWsaaobJ1lJ7vz4LS79R39vzvtY47+26uLAuswcwUAANBAuAIAAGigFgjAwdqHytZJ9bXz5qR/i9P+u5x0/3V2/jvJPpxXwDTMXAEAADQQrgAAABqoBQJwUPatsrXurnSd5rTD3lmqeOs8Zt3vZZXzXM8Ezs7MFQAAQAPhCgAAoIFwBQAA0MCaKwCYkV2s9dl0K/J1H7OL59nWc+zb2j1gHsxcAQAANBCuAAAAGqgFArAXtlnTunTPrc/fft0vPrK151nHabcv79w+/aSvddrxnuX5z/I8m34vqoBAJzNXAAAADYQrAACABjXGmHoMeUVdO26p26YeBszWLnYPgznaVk1ruQZ4kqkrggDM00PjvsfGGBePHr/izFVVfbCqnqmqzy8d+/WqeqqqHl/8edvS536lqi5V1Zeq6va+bwEAAGC+1qkFfijJW445fs8Y48LizwNJUlWvT/LOJG9YPOZ3q+qqrsECAADM1RV3CxxjfLKqXrPm17sjyUfGGN9M8g9VdSnJm5L89dmHCMChmXpXtqN1vzntFrjPTtotEOA82GRDi/dW1WcXtcFXLo7dmOSrS/d5cnEMAADgoJ01XH0gyQ8luZDk6SS/edovUFV3VdWjVfXot/LNMw4DAABgHs70JsJjjK8/d7uqfi/J/1h8+FSSm5bu+urFseO+xr1J7k0u7xZ4lnEAMG/7UgtTBeyxL//fANtyppmrqrp+6cO3J3luJ8H7k7yzqq6pqtcmuTnJ32w2RAAAgPm74sxVVf1xkjcneVVVPZnk15K8uaouJBlJvpzkPUkyxniiqj6a5AtJvp3k7jHGd7YycgAAgBnxJsKwx7y5MFeyXNM6aSe35c+pdgHAyc78JsIAAABcmXAFAADQQLgCAABocKat2IF5OGltjPVYh2fTtVAnPd46KwDYnJkrAACABsIVAABAA7VAOFCral7qgptRnwMAVjFzBQAA0EC4AgAAaKAWCOfYcsVt3+uCZ/leVj1G9Q8AOAszVwAAAA2EKwAAgAZqgXDOrFN5W7cWN9cq3VnGMqfxAwD7ycwVAABAA+EKAACggVogkESVDgBgU2auAAAAGghXAAAADYQrAACABsIVAABAA+EKAACggXAFAADQQLgCAABoIFwBAAA0EK4AAAAaCFcAAAANhCsAAIAGwhUAAEAD4QoAAKCBcAUAANBAuAIAAGggXAEAADQQrgAAABoIVwAAAA2EKwAAgAbCFQAAQAPhCgAAoIFwBQAA0EC4AgAAaCBcAQAANBCuAAAAGlw99QAAWM+le2590cev+8VHJhoJAHAcM1cAAAANhCsAAIAGaoEAEzla8wMA9puZKwAAgAbCFQAAQAO1QIAtssMfAJwfZq4AAAAaCFcAAAAN1AIBtmjTGqAaIQDsDzNXAAAADYQrAACABsIVAABAA2uuACZiPRUAHBYzVwAAAA2EKwAAgAbCFQAAQAPhCgAAoIFwBQAA0EC4AgAAaCBcAQAANBCuAAAAGghXAAAADYQrAACABsIVAABAA+EKAACggXAFAADQQLgCAABoIFwBAAA0EK4AAAAaCFcAAAANhCsAAIAGwhUAAEAD4QoAAKCBcAUAANBAuAIAAGggXAEAADQQrgAAABoIVwAAAA2EKwAAgAbCFQAAQAPhCgAAoIFwBQAA0EC4AgAAaCBcAQAANBCuAAAAGghXAAAADYQrAACABsIVAABAA+EKAACggXAFAADQQLgCAABoIFwBAAA0EK4AAAAaCFcAAAANhCsAAIAGwhUAAEAD4QoAAKCBcAUAANBAuAIAAGggXAEAADQQrgAAABoIVwAAAA2EKwAAgAbCFQAAQAPhCgAAoIFwBQAA0EC4AgAAaCBcAQAANBCuAAAAGghXAAAADYQrAACABsIVAABAA+EKAACggXAFAADQQLgCAABoIFwBAAA0EK4AAAAaCFcAAAANhCsAAIAGwhUAAEAD4QoAAKCBcAUAANBAuAIAAGggXAEAADQQrgAAABoIVwAAAA2EKwAAgAbCFQAAQAPhCgAAoIFwBQAA0EC4AgAAaCBcAQAANBCuAAAAGghXAAAADYQrAACABsIVAABAA+EKAACggXAFAADQQLgCAABoIFwBAAA0EK4AAAAaCFcAAAANhCsAAIAGwhUAAEAD4QoAAKCBcAUAANBAuAIAAGggXAEAADS4Yriqqpuq6i+q6gtV9URV/fzi+LVV9Ymq+rvF369cHK+q+u2qulRVn62qN277mwAAAJjaOjNX307yS2OM1ye5NcndVfX6JO9L8vAY4+YkDy8+TpK3Jrl58eeuJB9oHzUAAMDMXDFcjTGeHmN8ZnH72SRfTHJjkjuSfHhxtw8n+enF7TuS/MG47JEkP1BV13cPHAAAYE5Oteaqql6T5EeTfCrJdWOMpxef+lqS6xa3b0zy1aWHPbk4BgAAcLDWDldV9X1J/iTJL4wx/nX5c2OMkWSc5omr6q6qerSqHv1WvnmahwIAAMzOWuGqql6Sy8HqD8cYf7o4/PXn6n6Lv59ZHH8qyU1LD3/14tiLjDHuHWNcHGNcfEmuOev4AQAAZmGd3QIrye8n+eIY47eWPnV/kjsXt+9M8vGl4z+72DXw1iT/slQfBAAAOEhXr3GfH0vyM0k+V1WPL479apL3J/loVb07yVeSvGPxuQeSvC3JpSTfSPJznQMGAACYoyuGqzHGXyWpFZ++7Zj7jyR3bzguAACAvXKq3QIBAAA4nnAFAADQQLgCAABoIFwBAAA0EK4AAAAaCFcAAAANhCsAAIAGwhUAAEAD4QoAAKCBcAUAANBAuAIAAGggXAEAADQQrgAAABoIVwAAAA2EKwAAgAbCFQAAQAPhCgAAoIFwBQAA0EC4AgAAaCBcAQAANBCuAAAAGghXAAAADYQrAACABsIVAABAA+EKAACggXAFAADQQLgCAABoIFwBAAA0EK4AAAAaCFcAAAANhCsAAIAGwhUAAEAD4QoAAKCBcAUAANBAuAIAAGggXAEAADQQrgAAABoIVwAAAA2EKwAAgAbCFQAAQAPhCgAAoIFwBQAA0EC4AgAAaCBcAQAANBCuAAAAGghXAAAADYQrAACABsIVAABAA+EKAACggXAFAADQQLgCAABoIFwBAAA0EK4AAAAaCFcAAAANhCsAAIAGwhUAAEAD4QoAAKCBcAUAANBAuAIAAGggXAEAADQQrgAAABoIVwAAAA2EKwAAgAbCFQAAQAPhCgAAoIFwBQAA0EC4AgAAaCBcAQAANBCuAAAAGghXAAAADYQrAACABsIVAABAA+EKAACggXAFAADQQLgCAABoIFwBAAA0EK4AAAAaCFcAAAANhCsAAIAGwhUAAEAD4QoAAKCBcAUAANBAuAIAAGggXAEAADQQrgAAABoIVwAAAA2EKwAAgAbCFQAAQAPhCgAAoIFwBQAA0EC4AgAAaCBcAQAANBCuAAAAGghXAAAADYQrAACABsIVAABAA+EKAACggXAFAADQQLgCAABoIFwBAAA0EK4AAAAaCFcAAAANhCsAAIAGwhUAAEAD4QoAAKCBcAUAANBAuAIAAGggXAEAADQQrgAAABoIVwAAAA2EKwAAgAbCFQAAQAPhCgAAoIFwBQAA0EC4AgAAaCBcAQAANBCuAAAAGghXAAAADYQrAACABsIVAABAA+EKAACggXAFAADQQLgCAABoIFwBAAA0EK4AAAAaCFcAAAANhCsAAIAGwhUAAEAD4QoAAKCBcAUAANBAuAIAAGggXAEAADQQrgAAABoIVwAAAA2EKwAAgAbCFQAAQAPhCgAAoIFwBQAA0EC4AgAAaCBcAQAANBCuAAAAGghXAAAADYQrAACABsIVAABAA+EKAACggXAFAADQQLgCAABoIFwBAAA0EK4AAAAaCFcAAAANrhiuquqmqvqLqvpCVT1RVT+/OP7rVfVUVT2++PO2pcf8SlVdqqovVdXt2/wGAAAA5uDqNe7z7SS/NMb4TFV9f5LHquoTi8/dM8b4r8t3rqrXJ3lnkjckuSHJQ1X1w2OM73QOHAAAYE6uOHM1xnh6jPGZxe1nk3wxyY0nPOSOJB8ZY3xzjPEPSS4leVPHYAEAAObqVGuuquo1SX40yacWh95bVZ+tqg9W1SsXx25M8tWlhz2Zk8MYAADA3ls7XFXV9yX5kyS/MMb41yQfSPJDSS4keTrJb57miavqrqp6tKoe/Va+eZqHAgAAzM5a4aqqXpLLweoPxxh/miRjjK+PMb4zxvi3JL+XF6p/TyW5aenhr14ce5Exxr1jjItjjIsvyTWbfA8AAACTW2e3wEry+0m+OMb4raXj1y/d7e1JPr+4fX+Sd1bVNVX12iQ3J/mbviEDAADMzzq7Bf5Ykp9J8rmqenxx7FeTvKuqLiQZSb6c5D1JMsZ4oqo+muQLubzT4N12CgQAAA7dFcPVGOOvktQxn3rghMf8RpLf2GBcAAAAe+VUuwUCAABwPOEKAACggXAFAADQQLgCAABoIFwBAAA0EK4AAAAaCFcAAAANhCsAAIAGwhUAAEAD4QoAAKCBcAUAANBAuAIAAGggXAEAADSoMcbUY0hV/e8kX0nyqiT/NPFwOJ+ce0zFuceUnH9MxbnHVLrOvX8/xvjBowdnEa6eU1WPjjEuTj0Ozh/nHlNx7jEl5x9Tce4xlW2fe2qBAAAADYQrAACABnMLV/dOPQDOLeceU3HuMSXnH1Nx7jGVrZ57s1pzBQAAsK/mNnMFAACwl2YRrqrqLVX1paq6VFXvm3o8HL6q+nJVfa6qHq+qRxfHrq2qT1TV3y3+fuXU42T/VdUHq+qZqvr80rFjz7W67LcX18LPVtUbpxs5+27FuffrVfXU4tr3eFW9belzv7I4975UVbdPM2oOQVXdVFV/UVVfqKonqurnF8dd+9iqE869nV37Jg9XVXVVkt9J8tYkr0/yrqp6/bSj4pz4yTHGhaXtON+X5OExxs1JHl58DJv6UJK3HDm26lx7a5KbF3/uSvKBHY2Rw/ShfPe5lyT3LK59F8YYDyTJ4vfuO5O8YfGY3138foaz+HaSXxpjvD7JrUnuXpxjrn1s26pzL9nRtW/ycJXkTUkujTH+fozx/5J8JMkdE4+J8+mOJB9e3P5wkp+ebigcijHGJ5P83yOHV51rdyT5g3HZI0l+oKqu38lAOTgrzr1V7kjykTHGN8cY/5DkUi7/foZTG2M8Pcb4zOL2s0m+mOTGuPaxZSece6u0X/vmEK5uTPLVpY+fzMn/CNBhJPnzqnqsqu5aHLtujPH04vbXklw3zdA4B1ada66H7MJ7F9WrDy7Vn517bEVVvSbJjyb5VFz72KEj516yo2vfHMIVTOHHxxhvzOUqwt1V9RPLnxyXt9G0lSZb51xjxz6Q5IeSXEjydJLfnHQ0HLSq+r4kf5LkF8YY/7r8Odc+tumYc29n1745hKunkty09PGrF8dga8YYTy3+fibJx3J5Cvjrz9UQFn8/M90IOXCrzjXXQ7ZqjPH1McZ3xhj/luT38kL9xblHq6p6SS6/uP3DMcafLg679rF1x517u7z2zSFcfTrJzVX12qr63lxeVHb/xGPigFXVy6vq+5+7neSnknw+l8+7Oxd3uzPJx6cZIefAqnPt/iQ/u9g569Yk/7JUoYGNHVnH8vZcvvYll8+9d1bVNVX12lzeWOBvdj0+DkNVVZLfT/LFMcZvLX3KtY+tWnXu7fLad/UmD+4wxvh2Vb03yYNJrkrywTHGExMPi8N2XZKPXf75y9VJ/miM8WdV9ekkH62qdyf5SpJ3TDhGDkRV/XGSNyd5VVU9meTXkrw/x59rDyR5Wy4vqP1Gkp/b+YA5GCvOvTdX1YVcrmN9Ocl7kmSM8URVfTTJF3J5t627xxjfmWDYHIYfS/IzST5XVY8vjv1qXPvYvlXn3rt2de2ry5VXAAAANjGHWiAAAMDeE64AAAAaCFcAAAANhCsAAIAGwhUAAEAD4QoAAKCBcAUAANBAuAIAAGjw/wGNEbGZHmm7hgAAAABJRU5ErkJggg==\n", + "text/plain": [ + "<Figure size 1080x1080 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# importing the example outputs (segmentation maps)\n", + "example = np.load(\"output_example.npy\")\n", + "\n", + "plt.figure(figsize = (15,15))\n", + "plt.imshow(example) # image1\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Helpful function from skimage include `label` and `regionprops`. These functions allow you to split your segmentation map into sepearate blobs (via `label`) and then get specific properties about the blobs like area, symmetry, and others (via `regionprops` on the labeled image)." + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [], + "source": [ + "#imports\n", + "from skimage.measure import label, regionprops" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "First, let's generate a labeled image using `label`." + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "<matplotlib.image.AxesImage at 0x7f885e199460>" + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "text/plain": [ + "<Figure size 432x288 with 0 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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zupk06uOLX6IAkIiIiKybmLG5Xg8NdUebXmBj7z6Vdjz6Tr2SkRERGQbmFEP0IRRxhDlJXbfhC6JiIjINvXlqSL/6yd/id17btW7KyIiIiLbRzVjyLiLh30UEBIREZENEzMux+Jp0kZDDhEREZFN5Rhg8VVENToTEREREREREdlmFBASEREREREREdlmFBASEREREREREdlmFBASEREREREREdlmFBASEREREREREdlmFBASEREREREREdlmFBASEREREREREdlmGiIgFHZmuPrlLfR7I/XuioiIiMj2YcB4sXr3QkREROrAq3cHAA703+BDP/Tz9LrpendFREREZNswjouTSdW7GyIiIlIHDREQihuXnV623t0QEREREREREdkWGmLKmIiIiIiIiIiIbB4FhEREREREREREthkFhEREREREREREthkFhEREREREREREthkFhEREREREREREtpmGCAidLLTz9jNv4ro/We+uiIiIiGwf1mIrfr17ISIiInXQEAEh96zPxL8f4LPFXfXuioiIiMi2YcOQsFCE0Na7KyIiIrLJGiIgVOlKcfmNKXbHhuvdFREREZHtw4CJefXuhYiIiNRBQ4wA7tp5k09+3y+TdZL17oqIiIjItmEcFyel8ZeIiMh21BAZQqfyXXzjy9/AFdUQEhEREdk8qiEkIiKybTVEQMg7Wyb8jz18XjWERERERDaNagiJiIhsXw0REPJ70lx4i2oIiYiIiGwqY1RDSEREZJtqiBHA0R23+Mx3/zoJE6t3V0RERES2DeM4qiEkIiKyTTVEhpCDUTBIRERERERERGSTNERASERERERERERENo8CQiIiIiIiIiIi24wCQiIiIiIiIiIi24wCQiIiIiIiIiIi24wCQiIiIiIiIiIi24wCQiIiIiIiIiIi24wCQiIiIiIiIiIi20xDBISem+jmgSe+hfOVyXp3RURERGT7CENsuVLvXoiIiEgdNERAKHE+T+/PxXmqtKveXRERERHZNqy1hIUChLbeXREREZFN1hABIQATWAJMvbshIiIiIiIiIrLlNUxASERERERERERENkfDBITcW6P8+7/5Nu753LerlpCIiIjIJgpLJdUSEhER2WYaJiDkX7zMgZ94nF2/4PFcubfe3RERERHZHqzFlkqqJSQiIrLNePXuwFyx6yP8m7/6bv5VWwBAuifH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\n", + "text/plain": [ + "<Figure size 1440x720 with 2 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "labeled_image = label(example)\n", + "\n", + "plt.figure()\n", + "f, axarr = plt.subplots(1,2, figsize = (20,10)) \n", + "\n", + "axarr[0].imshow(example) # original image\n", + "axarr[1].imshow(labeled_image) # dilated image\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As you can see above, each separate blob now has its own label, and the labeled image is now ready to be fed into `regionprops`." + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": {}, + "outputs": [], + "source": [ + "blobs = regionprops(labeled_image)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "By running regionprops on our labeled image, we get a list of blob objects that we can run specific commands on." + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "22" + ] + }, + "execution_count": 43, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# number of distinct labels/blobs in the image\n", + "len(blobs)" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "9597\n", + "15803\n", + "1\n", + "1\n", + "1\n", + "1\n", + "3346\n", + "1\n", + "1\n", + "1\n", + "1\n", + "1\n", + "121\n", + "1\n", + "556\n", + "2\n", + "1\n", + "1\n", + "5\n", + "1\n", + "14\n", + "1\n" + ] + } + ], + "source": [ + "# area of each blob\n", + "for blob in blobs:\n", + " print(blob.area)" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['__class__',\n", + " '__delattr__',\n", + " '__dict__',\n", + " '__dir__',\n", + " '__doc__',\n", + " '__eq__',\n", + " '__format__',\n", + " '__ge__',\n", + " '__getattribute__',\n", + " '__getitem__',\n", + " '__gt__',\n", + " '__hash__',\n", + " '__init__',\n", + " '__init_subclass__',\n", + " '__iter__',\n", + " '__le__',\n", + " '__lt__',\n", + " '__module__',\n", + " '__ne__',\n", + " '__new__',\n", + " '__reduce__',\n", + " '__reduce_ex__',\n", + " '__repr__',\n", + " '__setattr__',\n", + " '__sizeof__',\n", + " '__str__',\n", + " '__subclasshook__',\n", + " '__weakref__',\n", + " '_cache',\n", + " '_cache_active',\n", + " '_intensity_image',\n", + " '_intensity_image_double',\n", + " '_label_image',\n", + " '_ndim',\n", + " '_slice',\n", + " 'area',\n", + " 'bbox',\n", + " 'bbox_area',\n", + " 'centroid',\n", + " 'convex_area',\n", + " 'convex_image',\n", + " 'coords',\n", + " 'eccentricity',\n", + " 'equivalent_diameter',\n", + " 'euler_number',\n", + " 'extent',\n", + " 'filled_area',\n", + " 'filled_image',\n", + " 'image',\n", + " 'inertia_tensor',\n", + " 'inertia_tensor_eigvals',\n", + " 'intensity_image',\n", + " 'label',\n", + " 'local_centroid',\n", + " 'major_axis_length',\n", + " 'max_intensity',\n", + " 'mean_intensity',\n", + " 'min_intensity',\n", + " 'minor_axis_length',\n", + " 'moments',\n", + " 'moments_central',\n", + " 'moments_hu',\n", + " 'moments_normalized',\n", + " 'orientation',\n", + " 'perimeter',\n", + " 'slice',\n", + " 'solidity',\n", + " 'weighted_centroid',\n", + " 'weighted_local_centroid',\n", + " 'weighted_moments',\n", + " 'weighted_moments_central',\n", + " 'weighted_moments_hu',\n", + " 'weighted_moments_normalized']" + ] + }, + "execution_count": 49, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# this command lets you see all the other properties you can get from a blob. Very helpful!\n", + "dir(blobs[0])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "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.8.3" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/MorphologicalOperators_Tutorial/output_example.npy b/MorphologicalOperators_Tutorial/output_example.npy new file mode 100644 index 0000000000000000000000000000000000000000..a6a8a27f08872ababf0a373aa39ae2c32c7c051e Binary files /dev/null and b/MorphologicalOperators_Tutorial/output_example.npy differ