{ "cells": [ { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\n", "\n", "<< back to chapter content

Last updated: 19/11/2015

\n", " show/hide source code\n", " " ], "text/plain": [ "" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%matplotlib inline\n", "import sys\n", "sys.path.insert(0,'..')\n", "from IPython.display import HTML,Image,SVG,YouTubeVideo\n", "from helpers import header\n", "\n", "HTML(header())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Morphomathematical operators\n", "\n", "## Definitions" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Image\n", "The image $X$ is defined as a the set of pixels, connect or not, equal to $1$ (or True), the backgound being set to $0$ (or False)." ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "import numpy as np\n", "X = np.asarray([[0,0,0,0,0,0,0,0,0],\n", " [0,0,0,0,0,0,0,0,0],\n", " [0,0,0,0,0,0,0,0,0],\n", " [0,0,0,0,0,0,0,0,0],\n", " [0,0,0,1,1,1,0,0,0],\n", " [0,0,1,1,1,0,0,0,0],\n", " [0,0,1,1,1,1,0,0,0],\n", " [0,0,1,1,1,0,0,0,0],\n", " [0,0,0,1,0,0,0,0,0],\n", " [0,0,0,0,0,0,0,0,0],\n", " [0,0,0,0,0,0,0,0,0]])\n", "plt.imshow(X,interpolation='nearest',cmap=plt.cm.gray);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Structuring element" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "similarily one define a structuring element $B$ as a set of pixels (connected or not) having one origin $o$. Example of a 3x3 centered structuring element:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAQ8AAAEACAYAAACtefPrAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAD0ZJREFUeJzt3XuoZWd5x/HvLzfUpHQYlInJjA2SBA0IjqbjENPmFJoy\nmcJowHqBEklBg1QUKa23QNK/rP4laTBKUZnWYiJaw2gmmCgZLxSnpnNJdDI1AQOJTUZxTKqZlibm\n6R97mZ7s7HN71z5773PO9wOHs9Ze717PeufM/M5ae6/ZT6oKSVqp06Z9AJLWJsNDUhPDQ1ITw0NS\nE8NDUhPDQ1KTXuGR5EVJDiY5kuRYko8tMO6mJA8mOZpke5+akmbDGX2eXFX/k+SPqupUkjOA7yW5\nvKq+99sxSXYDF1bVRUneANwC7Ox32JKmrfdlS1Wd6hbPAk4HTg4N2QPs7cYeBDYl2dK3rqTp6h0e\nSU5LcgQ4AdxTVceGhpwPPDJv/VFga9+6kqZrHGcez1bVaxkEwh8mmRsxLMNP61tX0nT1es1jvqp6\nMskdwKXAgXmbfgpsm7e+tXvseZIYKNKUVNXwL/gl9X235aVJNnXLLwauBA4PDdsHXNON2Qk8UVUn\nRu2vqib2dcMNN6zbeut5btYb/1ervmceLwf2JjmNQRD9U1V9K8l1XRh8pqr2J9md5CHgKeDanjUl\nzYC+b9XeD7xuxOOfGVp/b586kmbPhr3DdG5ubt3WW89zs97sSJ9rnnFKUrNyLNJGkoSa9AumkjYu\nw0NSE8NDUhPDQ1ITw0NSE8NDUhPDQ1ITw0NSE8NDUhPDQ1ITw0NSE8NDUhPDQ1ITw0NSE8NDUhPD\nQ1ITw0NSk76fnr4tyT1JfpTkh0neN2LMXJInkxzuvq7vU1PSbOj76elPAx+oqiNJzgH+PcndVfXA\n0LhvV9WenrUkzZBeZx5V9XhVHemWfw08AJw3YuiKPx9R0mwb22seSS4AtgMHhzYVcFmSo0n2J7lk\nXDUlTc9Y2k12lyxfBt7fnYHMdwjYVlWnklwF3A5cPI66fSSeDGl2rYVOAr3DI8mZwFeAL1TV7cPb\nq+pX85bvTPKpJJur6uTw2BtvvPG55bm5uTXTv0JaSw4cOMCBAwd676dX35YMfn3vBX5RVR9YYMwW\n4GdVVUl2AF+qqgtGjJto3xbPPDTLJv1voaVvS98zjzcCfw7cl+S3Da4/ArwCnms7+RbgPUmeAU4B\nb+9ZU9IM2LAd4zzz0CxbC2ce3mEqqYnhIamJ4SGpieEhqYnhIamJ4SGpieEhqYnhIamJ4SGpieEh\nqYnhIamJ4SGpieEhqYnhIamJ4SGpieEhqYnhIamJ4SGpieEhqcmq96rtxt2U5MGu8dP2PjUlzYZV\n71WbZDdwYVVdlOQNwC3Azp51JU3ZJHrV7mHQ24WqOghs6nq5SFrDJtGr9nzgkXnrjwJbx1VX0nRM\nolctwHBPiJFNKWw3Ka2+mWg3Cc/1qv06cGdVfXLE9k8DB6rq1m79OHBFVZ0YGmfTJ6mz7ps+db1q\nPwscGxUcnX3ANd34ncATw8Ehae3p2+j6cuA7wH38/6XIcK9aktwM7AKeAq6tqkMj9uWZh9RZC2ce\n9qqVZtBaCA/vMJXUxPCQ1MTwkNTE8JDUxPCQ1MTwkNTE8JDUxPCQ1MTwkNTE8JDUxPCQ1MTwkNTE\n8JDUxPCQ1MTwkNTE8JDUxPCQ1MTwkNTE8JDUpHd4JPlckhNJ7l9g+1ySJ5Mc7r6u71tT0vSNo+nT\n54G/B/5xkTHfrqo9Y6glaUb0PvOoqu8Cv1ximB9VLq0zk3jNo4DLkhxNsj/JJROoKWmVjaVX7RIO\nAduq6lSSq4DbgYtHDbRXrbT6ZqZXLUCSC4CvVdVrljH2J8Drq+rk0OM2fZI6Nn0CkmzpetqSZAeD\nwDq5xNMkzbjely1JvghcAbw0ySPADcCZ8Fyv2rcA70nyDHAKeHvfmpKmz1610gzyskXSumV4SGpi\neEhqYnhIamJ4SGpieEhqYnhIamJ4SGpieEhqYnhIamJ4SGpieEhqYnhIamJ4SGpieEhqYnhIamJ4\nSGpieEhqYnhIarLqvWq7MTclebBr/LS9b01J0zeOM4/PA7sW2phkN3BhVV0EvBu4ZQw1NQPOAS5l\n8NH5l3br2jgm0at2D7C3G3sQ2JRkS9+6mq5zgN3AD4AD3ffdGCAbySRe8zgfeGTe+qPA1gnU1Sp6\nFXDb0GO3dY9rY5hEr1qA4Z4QI5tS2Kt27Th7hY9rdqyZXrVJPg0cqKpbu/XjwBVVdWJonE2f1pBL\nGVyqDPt94N4JH8t6ZNOngX3ANQBJdgJPDAeH1p7jwNuGHntr97g2ht5nHvN71QIneGGvWpLczOAd\nmaeAa6vq0Ij9eOaxxpzD4DWOsxn8YI8Dv57qEa0fa+HMw1610gxaC+HhHaaSmhgekpoYHpKaGB6S\nmhgekpoYHpKaGB6SmhgekpoYHpKaGB6SmhgekpoYHpKaGB6SmhgekpoYHpKaGB6SmhgekpoYHpKa\nGB6SmoyjV+2uJMe7XrQfHLF9LsmTSQ53X9f3rSlp+no1fUpyOnAz8MfAT4EfJNlXVQ8MDf12Ve3p\nU0vSbOl75rEDeKiqHq6qp4FbgTeNGOdHlUvrTN/wGNWH9vyhMQVcluRokv1JLulZU9IM6NurdjnN\nJQ4B26rqVJKrgNuBi0cNtFettPpmoldt1z7yxqra1a1/GHi2qj6+yHN+Ary+qk4OPW7TJ6mzEZo+\n3QtclOSCJGcxaF+6b+jAtqT7l5pkB4PAOvnCXUlaS3pdtlTVM0neC3wDOB34bFU9kOS6bvtngLcA\n70nyDHAKeHvPY5Y0A+xVK82gjXDZImmDMjwkNTE8JDUxPCQ1MTwkNTE8JDUxPCQ1MTwkNTE8JDUx\nPCQ1MTwkNTE8JDUxPCQ1MTwkNTE8JDUxPCQ1MTwkNTE8JDUxPCQ1WfVetd2Ym7rtR5Ns71tT0vT1\nCo95vWp3AZcA70jy6qExu4ELq+oi4N3ALX1qSpoNk+hVuwfYC1BVB4FNSbb0rCtpyibRq3bUmK09\n60qaskn0qgUY7gkx8nn2qpVW35rpVZvk08CBqrq1Wz8OXFFVJ4b2ZdMnqbMRmj4t2au2W7+mO8id\nwBPDwSFp7Vn1XrVVtT/J7iQPAU8B1/Y+aklTZ69aaQZthMsWSRuU4SGpieEhqYnhIamJ4SGpieEh\nqYnhIamJ4SGpieEhqYnhIamJ4SGpieEhqYnhIamJ4SGpieEhqYnhIamJ4SGpieEhqUnzZ5gm2Qzc\nBvwe8DDw1qp6YsS4h4H/An4DPF1VO1prSpodfc48PgTcXVUXA9/q1kcpYK6qthsc0vrRJzyeayPZ\nfX/zImP9tGFpnekTHlvm9V85ASzUf7aAbya5N8m7etSTNEMWfc0jyd3AuSM2fXT+SlVVkoU+K/6N\nVfVYkpcBdyc5XlXfbTtcSbNi0fCoqisX2pbkRJJzq+rxJC8HfrbAPh7rvv88yVeBHcDI8Jhkr9pZ\n6VcjTdrUe9Um+QTwi6r6eJIPAZuq6kNDY14CnF5Vv0pyNnAX8LdVddeI/U206ZOkgdamT33CYzPw\nJeAVzHurNsl5wD9U1Z8meSXwL91TzgD+uao+tsD+DA9pCiYeHuNmeEjTYbtJSRNleEhqYnhIamJ4\nSGpieEhqYnhIamJ4SGpieEhqYnhIamJ4SGpieEhqYnhIamJ4SGpieEhqYnhIamJ4SGpieEhqYnhI\namJ4SGrSHB5J/izJj5L8JsnrFhm3K8nxJA8m+WBrPUmzpc+Zx/3A1cB3FhqQ5HTgZmAXcAnwjiSv\n7lFzbMbRt2JW663nuVlvdjSHR1Udr6ofLzFsB/BQVT1cVU8DtwJvaq05Tuv5L8R6npv1Zsdqv+Zx\nPvDIvPVHu8ckrXGtvWo/UlVfW8b+bcQirVO9mz4luQf4q6o6NGLbTuDGqtrVrX8YeLaqPj5irEEj\nTUlL06dFzzxWYKHC9wIXJbkA+E/gbcA7Rg1sOXhJ09PnrdqrkzwC7ATuSHJn9/h5Se4AqKpngPcC\n3wCOAbdV1QP9D1vStM1Mr1pJa8tU7jCd9A1mSTYnuTvJj5PclWTTAuMeTnJfksNJ/q2hzpLHm+Sm\nbvvRJNtXWmMl9ZLMJXmym8/hJNf3qPW5JCeS3L/ImHHObdF645xbt79tSe7p/l7+MMn7Fhg3ljku\np96Yf34vSnIwyZEkx5J8bIFxy59fVU38C3gVcDFwD/C6BcacDjwEXACcCRwBXt1Y7xPA33TLHwT+\nboFxPwE2N9ZY8niB3cD+bvkNwPd7/Bkup94csG9MP7M/ALYD9y+wfWxzW2a9sc2t29+5wGu75XOA\n/1jln99y6o17ji/pvp8BfB+4vM/8pnLmUZO/wWwPsLdb3gu8eZGxrS/cLud4nzuOqjoIbEqyZRXr\nQft8nqeqvgv8cpEh45zbcurBmObW1Xu8qo50y78GHgDOGxo2tjkusx6Md46nusWzGPzyOTk0ZEXz\nm+X/GDfOG8y2VNWJbvkEsNAfSAHfTHJvknetsMZyjnfUmK0rrLOSegVc1p2C7k9ySWOt1uNpndty\nrNrcuncHtwMHhzatyhwXqTfWOSY5LckRBv8G7qmqY0NDVjS/cb1V+wKTvsFskXoffd5Oq2qRe0re\nWFWPJXkZcHeS491vwOVY7vEO/yZpfcV6Oc87BGyrqlNJrgJuZ3C5uFrGNbflWJW5JTkH+DLw/u6M\n4AVDhtZ7zXGJemOdY1U9C7w2ye8C30gyV1UHhg9p+GkL7W/VwqOqruy5i58C2+atb2OQhCuu173w\ndm5VPZ7k5cDPFtjHY933nyf5KoNLg+WGx3KOd3jM1u6xFkvWq6pfzVu+M8mnkmyuquHT1XEY59yW\ntBpzS3Im8BXgC1V1+4ghY53jUvVW6+dXVU92t1NcChyYt2lF85uFy5YlbzBLchaDG8z2NdbYB7yz\nW34ngwR//kEkL0nyO93y2cCfMPifw8u1nOPdB1zT1dgJPDHvcmqllqyXZEuSdMs7GLw1vxrBAeOd\n25LGPbduX58FjlXVJxcYNrY5LqfeOOeY5KXp3mVM8mLgSuDw0LCVzW9cr+Su8FXfqxlcW/038Dhw\nZ/f4ecAd88ZdxeBV6IeAD/eotxn4JvBj4C5g03A94JUM3rE4Avywpd6o4wWuA66bN+bmbvtRFnin\naVz1gL/s5nIE+FdgZ49aX2Rwl/D/dj+7v1jluS1ab5xz6/Z3OfBst7/D3ddVqzXH5dQb88/vNQwu\ng44A9wF/3ffvpzeJSWoyC5ctktYgw0NSE8NDUhPDQ1ITw0NSE8NDUhPDQ1ITw0NSk/8D7xjbb6eJ\nPRoAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "B = np.ones((3,3))\n", "plt.imshow(B,interpolation='nearest',cmap=plt.cm.gray)\n", "plt.plot(1,1,'or')\n", "plt.gca().set_xlim(-1,3)\n", "plt.gca().set_ylim(-1,3);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Basic operations\n", "### Image complement\n", "Image complement consist in seting True pixels to false an False pixels to True, Image and background are switched.\n", "\n", "$$X^c = \\{x: x \\notin X\\}$$" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "Xc = 1-X\n", "plt.imshow(Xc,interpolation='nearest',cmap=plt.cm.gray);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Symmetry\n", "\n", "$\\hat X$ is the reflection of $X$ through the origin" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "Xs = X[:,-1::-1][-1::-1,:]\n", "plt.imshow(Xs,interpolation='nearest',cmap=plt.cm.gray);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Translation\n", "The $B_x$ structuring undergoes a 2D translation in the pixel $x = (3,5)$." ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPYAAAD7CAYAAABZjGkWAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAACW9JREFUeJzt3V2IXHcZx/Hvz12bNgbaS6kGUoOCShVDKaG+gUQptr5c\nCFUqghdeaZIKSlt73UtRW+lFXxSLtl6kRZSIVbGQC0Fam77lRTQobSKlUrFFoaVpHy92tDGJM9ud\nnTk7T76fq50zy8xDst/9z54z50yqCkm9vGHoASStP8OWGjJsqSHDlhoybKkhw5YaWp72AZJ4vEwa\nUFXl9G2u2FJDhi01ZNhSQ4YtNWTYUkMTw05yZZKjSf6Y5Pp5DCVpOhl3dleSJeAPwC7gBPAQ8Lmq\nOnLK93i4SxrQWg53XQ78qar+UlUvAz8GPjWL4SStn0lhvwV4+pTbx0fbJG1gk8L2Zba0gCaFfQLY\nesrtrays2pI2sElhPwy8Pcm2JOcB1wA/nf1YkqYx9iSQqjqZ5CvAA8AScNepe8QlbUxjD3et6gE8\n3CUNyrO7pHOEYUsNGbbUkGFLDRm21JBhSw0ZttSQYUsNGbbUkGFLDRm21JBhSw0ZttSQYUsNGbbU\nkGFLDRm21JBhSw0ZttSQYUsNGbbUkGFLDRm21JBhSw0ZttSQYUsNGbbUkGFLDRm21JBhSw0ZttSQ\nYUsNGbbUkGFLDRm21JBhSw1NDDvJ1iQPJjmU5Mkke+YxmKS1S1WN/4bkzcCbq+rRJFuA3wOfrqoj\no/vHP4CkmaqqnL5t4opdVc9U1aOjr/8JHAEuXv/xJK2X1/U3dpJtwPuA381iGEnrY9Vhj16G7wP2\njlZuSRvUqsJO8kbgPuCHVfWT2Y4kaVqr2XkW4AfAc1X11bPc784zaUBn23m2mrA/ABwAHgf+8803\nVtUvRvcbtjSgNYU9iWFLw1rT4S5Ji8ewpYYMW2rIsKWGDFtqyLClhgxbasiwpYYMW2rIsKWGDFtq\nyLClhgxbasiwpYYMW2rIsKWGDFtqyLClhgxbasiwpYYMW2rIsKWGDFtqyLClhgxbasiwpYYMW2rI\nsKWGDFtqaHnoAYYw7SeMdrLy8efqxhVbasiwpYYMW2rIsKWGDFtqyLClhlYVdpKlJAeT/GzWA0ma\n3mpX7L3AYcADwNICmBh2krcCHwfuBHw3g7QAVrNifwv4OvDqjGeRtE7Ghp3kauDZqjqIq7W0MCat\n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\ngg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "Bx = np.zeros((10,10))\n", "x = (3,5)\n", "Bx[x[1]-1:x[1]+2,x[0]-1:x[0]+2] = B\n", "plt.plot(3,5,'or')\n", "plt.imshow(Bx,interpolation='nearest',cmap=plt.cm.gray);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Difference\n", "$$A-B = \\{x: x \\in A, x \\notin B\\} = A \\cap B^c$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Dilation\n", "Dilation is defined such as:\n", "$$X \\oplus B = \\{x : \\hat B_x \\cap X \\ne \\phi \\}$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Erosion\n", "Erosion is defined such as:\n", "$$X \\ominus B = \\{x : B_x \\subseteq X \\}$$" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\nSMYL4ErEC2iptj+S6xB2XOVzvoADG2PUo91+aPECOEzuNgItiRfQ0pGLV1XdVFX3VNX3qupNc89z\n2KrqTFV9uao2q2qjql4390xXQ1Wdqqo7q+qzc89yNVTVE6vq9qq6u6ruqqob5p7psFXVW3Z+rr9b\nVR+rqsetcv9HKl5VdSrJu7P9XZHPSnJLVT1z3qkO3UNJ3jDG+LMkNyT5uxNwzklya5K7cnK+wOVd\nST43xnhmkj9PcvfM8xyqqjqb5NVJrhtjPDvJqSQvXeUxjlS8klyf5PtjjB+OMR5K8okkL5l5pkM1\nxnhgjPGtncu/yvYP9ZPnnepwVdVTk7woyfuTPOozScdJVT0hyQvGGB9IkjHGw2OMX8w81mH7ZbZ/\nMV9TVaeTXJPk/lUe4KjF6ylJ7r3k+n07t50IO7+tnpPka/NOcujekeSNSX4z9yBXydOS/KSqPlhV\n36yq91XVNXMPdZjGGD9L8vYkP0ry4yQ/H2N8aZXHOGrxOil3IX5LVV2b5PYkt+6swI6lqjqXZDnG\nuDMnYNW143SS65K8Z4xxXZJfJ3nzvCMdrqp6epLXJzmb7XsS11bVy1Z5jKMWr/uTnLnk+plsr76O\ntap6TJJPJfnIGGPXr5I7Jp6X5MVV9V9JPp7khVX14ZlnOmz3JblvjPH1neu3Zztmx9lzk3x1jPHT\nMcbDST6d7X/7lTlq8bojyTOq6mxVPTbJzdn+nshjq6oqyW1J7hpjvHPueQ7bGOOtY4wzY4ynZfsB\n3H8fY7xi7rkO0xjjgST3VtXazk03Jtn9CwmPh3uS3FBVj9/5Gb8x20/QrMyUL509NGOMh6vqNUm+\nkO1nJ24bYxzrZ2WSPD/Jy5N8p6ru3LntLWOMf5lxpqvppDxU8NokH935pfyDJK+aeZ5DNcb49s6K\n+o5sP7b5zSTvXeUxvD0IaOmo3W0E2BfxAloSL6Al8QJaEi+gJfECWhIvoCXxAlr6P4+bbmCoCTrS\nAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from skimage.morphology import disk,erosion,dilation,square\n", "B = square(3)\n", "X_dil = dilation(X,selem=B)\n", "X_ero = erosion(X,selem=B)\n", "\n", "plt.figure(figsize=[10,5])\n", "plt.subplot(1,3,1)\n", "plt.imshow(X,interpolation='nearest',cmap=plt.cm.gray)\n", "plt.title('$X$')\n", "plt.subplot(1,3,2)\n", "plt.imshow(X_dil,interpolation='nearest',cmap=plt.cm.gray)\n", "plt.title('dilation of $X$ by $B$')\n", "plt.subplot(1,3,3)\n", "plt.imshow(X_ero,interpolation='nearest',cmap=plt.cm.gray)\n", "plt.title('erosion of $X$ by $B$')\n", "plt.figure(figsize=[6,6])\n", "plt.imshow(X,interpolation='nearest',cmap=plt.cm.gray,alpha=.3)\n", "plt.imshow(X_ero,interpolation='nearest',cmap=plt.cm.gray,alpha=.3)\n", "plt.imshow(X_dil,interpolation='nearest',cmap=plt.cm.gray,alpha=.3);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Duality\n", "\n", "There is a duality between erosion and dilation\n", "\n", "$$(X \\ominus B )^c = X^c \\oplus \\hat B$$\n", "$$(X \\oplus B)^c = X^c \\ominus \\hat B$$\n", "\n", "In other words, dilating $X$ is the same as eroding $X^c$ by the symetrical structuring element\n", "\n", "demonstration for $(X \\ominus B )^c = X^c \\oplus \\hat B$:\n", "\n", "$$(X \\ominus B)^c = \\{x : B_x \\subseteq X \\}^c$$\n", "\n", "if $B_x$ is include in $X$:\n", "\n", "$$B_x \\cap X^c = \\phi$$\n", "\n", "so:\n", "\n", "$$(X \\ominus B)^c = \\{x : B_x \\cap X^c = \\phi \\}^c$$\n", "\n", "by using the complement:\n", "\n", "$$\\{x : B_x \\cap X^c = \\phi \\}^c = \\{x : B_x \\cap X^c \\neq \\phi \\}$$\n", "\n", "equality becomes:\n", "\n", "$$(X \\ominus B)^c = \\{x : B_x \\cap X^c \\neq \\phi \\} = X^c \\oplus \\hat B $$\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Properties of the basic operations\n", "\n", "Dilation is:\n", "* commutative\n", "\n", "$$ X \\oplus B = B \\oplus X$$\n", "\n", "* associative\n", "\n", "$$X \\oplus (B \\oplus C) = (X\\oplus B) \\oplus C$$\n", "\n", "* translation invariant\n", "\n", "$$ X_h \\oplus B = (X \\oplus B)_h$$\n", "\n", "* increasing\n", "\n", "$$ A_1 \\subseteq A_2 \\implies A_1 \\oplus B \\subseteq A_2 \\oplus B$$\n", "$$ B_1 \\subseteq B_2 \\implies A \\oplus B_1 \\subseteq A \\oplus B_2$$\n", "\n", "Erosion is:\n", "\n", "* NOT commutative\n", "\n", "$$ X \\ominus B \\neq B \\ominus X$$\n", "\n", "* translation invariant\n", "\n", "$$ X_h \\ominus B = (X \\ominus B)_h$$\n", "\n", "* increasing\n", "\n", "$$ A_1 \\subseteq A_2 \\implies A_1 \\ominus B \\subseteq A_2 \\ominus B$$\n", "but (one erode less !)\n", "$$ B_1 \\subseteq B_2 \\implies A \\ominus B_1 \\supseteq A \\ominus B_2$$\n", "\n", "Dilation by the union of two structuring elements:\n", " \n", "$$X \\oplus (B \\cup C) = (X \\oplus B) \\cup (X \\oplus C) = (B \\cup C) \\oplus X$$ \n", " \n", "Erosion by the union of two structuring elements:\n", "\n", "$$ X \\ominus (B \\cup C) = (X \\ominus B) \\cap (X \\ominus C)$$\n", "\n", "$$(X \\ominus B) \\ominus C = X \\ominus (B \\oplus C) $$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Combined operations\n", "More complex operation can be achieved by combining two ore more basis operators, the simplest ones are the opening and the closing.\n", "\n", "\n", "### Opening\n", "Opening consist in applying in succession one erosion followed by one dilation, both using a same structuring element.\n", "\n", "$$ X \\circ B = (X \\ominus B) \\oplus B $$ \n", "\n", "Opening 'opens' small gaps existing in the shape.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Closing\n", "Opening consist in applying in succession one dilation followed by one erosion, both using a same structuring element.\n", "\n", "$$ X \\bullet B = (X \\oplus B) \\ominus B $$ \n", "\n", "Closing 'closes' the gaps present in the shape.\n", "\n", "Opening and closing are illustrated below with a 3x3 square structuring element $B$:\n", "\n", "Therse is an opening and closing duality:\n", "\n", "$$(X \\circ B)^c = X^c \\bullet B $$" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "B = square(3)\n", "X_dil = dilation(X,selem=B)\n", "X_ero = erosion(X,selem=B)\n", "\n", "X_open = dilation(X_ero,selem=B)\n", "X_close = erosion(X_dil,selem=B)\n", "\n", "plt.figure(figsize=[10,5])\n", "plt.subplot(1,3,1)\n", "plt.imshow(X,interpolation='nearest',cmap=plt.cm.gray)\n", "plt.title('$X$')\n", "plt.subplot(1,3,2)\n", "plt.imshow(X_open,interpolation='nearest',cmap=plt.cm.gray)\n", "plt.title('opening of $X$ by $B$')\n", "plt.subplot(1,3,3)\n", "plt.imshow(X_close,interpolation='nearest',cmap=plt.cm.gray)\n", "plt.title('closing of $X$ by $B$')\n", "plt.figure(figsize=[6,6])\n", "plt.imshow(X,interpolation='nearest',cmap=plt.cm.gray,alpha=.3)\n", "plt.imshow(X_open,interpolation='nearest',cmap=plt.cm.gray,alpha=.3)\n", "plt.imshow(X_close,interpolation='nearest',cmap=plt.cm.gray,alpha=.3);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "some examples with a 3x3 structuring element $B$" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nPyYEJL3D5DhjAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import numpy as np\n", "X = np.zeros((100, 150), dtype=bool)\n", "X[30, :] = 1\n", "X[:, 65] = 1\n", "X[35:45, 35:50] = 1\n", "X[40:50,100:110] = 1\n", "X[52:82,100:110] = 1\n", "X[50:52,105:106] = 1\n", "X[45:46,105:106] = 0\n", "X[70:72,104:106] = 0\n", "X[64:67,103:106] = 0\n", "\n", "B = square(3)\n", "X_dil = dilation(X,selem=B)\n", "X_ero = erosion(X,selem=B)\n", "\n", "X_open = dilation(X_ero,selem=B)\n", "X_close = erosion(X_dil,selem=B)\n", "\n", "plt.figure(figsize=[10,10])\n", "plt.subplot(3,2,1)\n", "plt.imshow(X,interpolation='nearest',cmap=plt.cm.gray)\n", "plt.title('$X$')\n", "plt.subplot(3,2,3)\n", "plt.imshow(X_ero,interpolation='nearest',cmap=plt.cm.gray)\n", "plt.title('erosion of $X$ by $B$')\n", "plt.subplot(3,2,4)\n", "plt.imshow(X_dil,interpolation='nearest',cmap=plt.cm.gray)\n", "plt.title('dilation of $X$ by $B$')\n", "plt.subplot(3,2,5)\n", "plt.imshow(X_open,interpolation='nearest',cmap=plt.cm.gray)\n", "plt.title('opening of $X$ by $B$')\n", "plt.subplot(3,2,6)\n", "plt.imshow(X_close,interpolation='nearest',cmap=plt.cm.gray)\n", "plt.title('closing of $X$ by $B$');\n" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ " \n", " \n", " \n", " \n", "
\n", " \n", " BokehJS successfully loaded.\n", "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import bokeh.plotting as bk\n", "from helpers import bk_image,bk_image_hoover,bk_compare_image\n", "bk.output_notebook()" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "\n", "
\n", "\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from skimage.io import imread\n", "from skimage import feature\n", "\n", "ct = imread('https://upload.wikimedia.org/wikipedia/commons/5/5f/MRI_EGC_sagittal.png')[-1::-1,:,:]\n", "canny = feature.canny(ct[:,:,0],low_threshold=.1*255,high_threshold=.4*255)*255\n", "\n", "bk_image(canny)" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "\n", "
\n", "\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "selem = square(3)\n", "ct_close = erosion(dilation(canny,selem=selem),selem=selem)\n", "bk_image(ct_close)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Properties of the combined operations\n", "\n", "Opening is:\n", "\n", "* anti-extensive\n", "\n", "$$X \\circ B \\subseteq X$$\n", "\n", "* idempotent\n", "\n", "$$ (X \\circ B)\\circ B = X \\circ B$$\n", "$$ (X \\circ B)\\circ \\dots \\circ B = X \\circ B$$\n", "\n", "Closing is:\n", "\n", "* extensive\n", "\n", "$$ X \\subseteq X \\bullet B$$\n", "\n", "* idempotent\n", "$$ (X \\bullet B)\\bullet B = X \\bullet B$$\n", "$$ (X \\bullet B)\\bullet \\dots \\bullet B = X \\bullet B$$\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## The Hit-or-Miss transform\n", "\n", "One define two disjoint structuring elements $B_1$ and $B_2$\n", "\n", "the Hit-or-Miss transform is:\n", "\n", "$$ X \\otimes B = \\{ X : B_1 \\subset X \\; \\text{and} \\; B_2 \\subset X^c\\}$$\n", "\n", "$$ X \\otimes B = (X \\ominus B_1) \\cap (X^c \\ominus B_2) $$\n", "\n", "which it is equivallent to a binary template matching.\n", "\n", "example of structuring elements:\n", "\n", "$$\n", "\\begin{matrix}\n", " \\cdot & 1 & \\cdot \\\\\n", " 0 & 1 & 1 \\\\\n", " 0 & 0 & \\cdot\n", " \\end{matrix}\n", " $$" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "def hit_or_miss(X,B12):\n", " B1 = B12 == 1\n", " B2 = B12 == 0\n", " r = np.logical_and(erosion(X,B1),erosion(1-X,B2))\n", " return r\n", "\n", "X = (imread('http://homepages.ulb.ac.be/~odebeir/data/man.tif')>0)[:,:,0].astype(np.uint8)\n", "B12_a = np.array([[2,1,2],[0,1,1],[0,0,2]]) # . are coded with 2\n", "\n", "HoM = hit_or_miss(X,B12_a) \n", "\n", "plt.figure(figsize=[10,10])\n", "plt.subplot(1,2,1)\n", "plt.imshow(X,interpolation='nearest')\n", "plt.subplot(1,2,2)\n", "plt.imshow(X,interpolation='nearest',alpha = .8)\n", "plt.imshow(HoM,interpolation='nearest',alpha=.5);\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "with the following elements:\n", "$$\n", "\\begin{matrix}\n", " \\cdot & 1 & \\cdot \\\\\n", " 1 & 1 & 0 \\\\\n", " \\cdot & 0 & 0\n", " \\end{matrix}\n", "$$\n", "\n", "and\n", "\n", "$$\n", "\\begin{matrix}\n", " \\cdot & 0 & 0 \\\\\n", " 1 & 1 & 0 \\\\\n", " \\cdot & 1 & \\cdot\n", " \\end{matrix}\n", "$$\n", "\n", "and\n", "\n", "$$\n", "\\begin{matrix}\n", " 0 & 0 & \\cdot \\\\\n", " 0 & 1 & 1 \\\\\n", " \\cdot & 1 & \\cdot\n", " \\end{matrix}\n", "$$\n", "\n", "$X$ becomes:" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nqqp/szh98n03tTn3MP1rLfXN5f/gbPvXkvom33+b7l8b/8xSVd2W5KtJ7kvyzSR/lOTdY4wvb/SO\nb0FV/c8kZ8YY35q6liSpqr+X5EqSXx9jvHFx2oeT/K8xxocXzfqvjDEenkltZ5NcHmM8su16Xqmq\n7kxy5xjj6ar60SQXk7wzyXsy8f5rantX5rP/XjPG+G5V3Z7kD5L8YpIHMoPn3lTm3sP0r7XUN4se\nNuf+taS+WfSwTfavbawsvSXJ18YYO2OM7yX5zSQ/u4X7vVWz+QbPGOP3k3z7FSc/kOT8Yvt8rj9B\nt26X2pKZ7L8xxvNjjKcX21eSfDnJ6zKD/dfUlsxn/313sXksyW25/reefN9N7CD0sFk8f5J5969k\n3j1szv1rSX3JPPbfxvrXNsLS65J8/Ybj38gPdu5cjCSfrKrPVtXPTV3MLk6OMS4tti8lOTllMTfx\nL6vqj6vqo3N5m6aqTid5c5LPZGb774ba/vvipFnsv6p6VVU9nev76NNjjC9mZvtuAnPvYfrXeszi\n/+CL5ty/knn2sE32r22EpYMwm+CtY4w3J/npJD+/WKadrXH9vdM57dd/n+QnkrwpyXNJ/u205SSL\nJeLfSvK+McblG8+bev8tavvPuV7blcxo/40xvj/GeFOSH0/y96vqba84f27PvW2Y++PVv1Y3m/+D\nybz7VzLfHrbJ/rWNsPTNJHfdcPyuXH9lNhtjjOcW//5Zkt/O9WX3ubm0eL84VXUqyQsT1/OSMcYL\nYyHJr2bi/VdVP5TrjeZjY4xHFyfPYv/dUNt/fLG2ue2/RU1/nuR3kpzJTPbdhGbdw/Sv1c3p/+Cc\n+9cr6pttD9tE/9pGWPpskr9WVaer6liSf5LksS3c755U1Wuq6sRi+0eS3J/k8/21JvFYkgcX2w8m\nebS57FYtnoAv+seZcP9VVSX5aJIvjTF+5YazJt9/u9U2l/1XVT/24vJ5Vf1wkrcneSoz2HcTm20P\n07/WY0b/B2fbv5J597CN968xxsYPub48/NUkX0vywW3c5y3U9hNJnl4cvjCH+pL8RpI/TXIt1z8r\n8Z4kdyT5ZJJnkjye5LUzqe2fJ/n1JJ9L8seLJ+LJCffdTyb5/uLv+dTi8I457L9davvpuey/JG9M\n8j8W9X0uyUOL0yffd1Mf5trD9K+11DebHjbn/tXUN4setun+5edOAAAaJngDADSEJQCAhrAEANAQ\nlgAAGsISAEBDWAIAaAhLAAANYQkAoPH/AT1kcWPo08g9AAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "B12_b = B12_a[:,-1::-1]\n", "\n", "HoM = hit_or_miss(X,B12_b) \n", "\n", "plt.figure(figsize=[10,10])\n", "plt.subplot(1,2,1)\n", "plt.imshow(X,interpolation='nearest')\n", "plt.subplot(1,2,2)\n", "plt.imshow(X,interpolation='nearest',alpha = .8)\n", "plt.imshow(HoM,interpolation='nearest',alpha=.5);\n" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nWlXPVNUbZlTbv66qP1gcv+eq6t1T1Lao5ZGq+lRVfaGqPl9VP7K4fPLj19Q2i+NXVa+vqk9X1fNV\n9cWq+jeLyyc/dlObcw/Tv9ZS31z+D862fy2pb/Ljt+n+tfHvLFXVA0m+kuSdSb6W5LeTvG+M8aWN\nPvAeVNX/THJmjPHHU9eSJFX195LcSPILY4w3Ly77UJL/Ncb40KJZ/5UxxlMzqe18kutjjIvbrudu\nVfVwkofHGM9X1XckuZrkPUnen4mPX1PbezOf4/dtY4w/r6oHk/xmkh9L8kRm8Nqbytx7mP61lvpm\n0cPm3L+W1DeLHrbJ/rWNlaW3Jfm9McbOGOPrSX4pyQ9u4XH3aja/wTPG+I0kf3LXxU8kubTYvpTb\nL9Ctu09tyUyO3xjjpTHG84vtG0m+lOSNmcHxa2pL5nP8/nyxeSzJA7n9s5782E3sIPSwWbx+knn3\nr2TePWzO/WtJfck8jt/G+tc2wtIbk/z+Hef/IH9xcOdiJPlEVX2mqn5o6mLu4+QY49pi+1qSk1MW\ncw//sqp+p6o+PJePaarqdJK3Jvl0Znb87qjtvy8umsXxq6rXVdXzuX2MPjXG+EJmduwmMPcepn+t\nxyz+D75izv0rmWcP22T/2kZYOgizCd4+xnhrku9P8sOLZdrZGrc/O53Tcf33Sb4nyVuSvJjk305b\nTrJYIv6VJD86xrh+576pj9+itv+c27XdyIyO3xjjG2OMtyT5riR/v6recdf+ub32tmHuz1f/Wt1s\n/g8m8+5fyXx72Cb71zbC0teSPHLH+Udy+53ZbIwxXlz8+0dJPpbby+5zc23xeXGq6lSSlyeu51Vj\njJfHQpKfy8THr6q+JbcbzUfGGE8vLp7F8bujtv/4Sm1zO36Lmv4sya8mOZOZHLsJzbqH6V+rm9P/\nwTn3r7vqm20P20T/2kZY+kySv1ZVp6vqWJJ/kuTjW3jcXamqb6uqE4vtb0/yeJLP9beaxMeTPLnY\nfjLJ0811t2rxAnzFP86Ex6+qKsmHk3xxjPGzd+ya/Pjdr7a5HL+q+s5Xls+r6luTvCvJc5nBsZvY\nbHuY/rUeM/o/ONv+lcy7h228f40xNn7K7eXhryT5vSQ/sY3H3ENt35Pk+cXp83OoL8kvJvnDJLdy\n+7sS70/yUJJPJPlqkmeSvGEmtf3zJL+Q5LNJfmfxQjw54bH73iTfWPw8n1uc3j2H43ef2r5/Lscv\nyZuT/I9FfZ9N8sHF5ZMfu6lPc+1h+tda6ptND5tz/2rqm0UP23T/8udOAAAaJngDADSEJQCAhrAE\nANAQlgAAGsISAEBDWAIAaAhLAAANYQkAoPH/AXNfa2lDzTycAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "B12_c = B12_b[-1::-1,:]\n", "\n", "HoM = hit_or_miss(X,B12_c) \n", "\n", "plt.figure(figsize=[10,10])\n", "plt.subplot(1,2,1)\n", "plt.imshow(X,interpolation='nearest')\n", "plt.subplot(1,2,2)\n", "plt.imshow(X,interpolation='nearest',alpha = .8)\n", "plt.imshow(HoM,interpolation='nearest',alpha=.5);\n" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nhar6pcXlkx+/Tm2zOH5V9dqq+kxVvVBVX6qqf7O4fPJjN7U59zD9ayn1zeX/4Gz710B9kx+/Vfev\nlX9nqaruSvLVJA8l+WaSP07yntbal1f6wHtQVf8zyanW2remriVJqurvJbmW5Ddba29eXPbhJP+r\ntfbhRbP+K621J2dS2+kkV1trT627nttV1b1J7m2tvVBVP57kYpJHk7w3Ex+/Tm3vznyO3+taa9+t\nqruT/GGSX07ySGbw2pvK3HuY/rWU+mbRw+bcvwbqm0UPW2X/WsfK0tuSfK21ttVa+16S307y82t4\n3L2azW/wtNb+IMm3b7v4kSRnF9tnc/MFunY71JbM5Pi11l5qrb2w2L6W5MtJ3pAZHL9Obcl8jt93\nF5tHktyVmz/ryY/dxDahh83i9ZPMu38l8+5hc+5fA/Ul8zh+K+tf6whLb0jy9W3nv5EfHNy5aEk+\nVVWfrapfmLqYHRxvrV1ZbF9JcnzKYu7gX1bVn1TVR+fyMU1VnUzy1iSfycyO37ba/vviolkcv6p6\nTVW9kJvH6NOttS9mZsduAnPvYfrXcszi/+Ar5ty/knn2sFX2r3WEpU2YTfD21tpbk/xskl9cLNPO\nVrv52emcjuu/T/JTSd6S5HKSfzttOcliifh3kry/tXZ1+76pj9+itv+cm7Vdy4yOX2vt+621tyT5\nySR/v6recdv+ub321mHuz1f/Gm82/weTefevZL49bJX9ax1h6ZtJ7tt2/r7cfGc2G621y4t//zzJ\nJ3Nz2X1uriw+L05VnUjy8sT1vKq19nJbSPLrmfj4VdWP5Gaj+Vhr7enFxbM4fttq+4+v1Da347eo\n6S+S/G6SU5nJsZvQrHuY/jXenP4Pzrl/3VbfbHvYKvrXOsLSZ5P8tao6WVVHkvyTJM+s4XF3pape\nV1XHFts/luThJJ/v32oSzyR5bLH9WJKnO9ddq8UL8BX/OBMev6qqJB9N8qXW2q9t2zX58duptrkc\nv6r6iVeWz6vqR5O8M8nzmcGxm9hse5j+tRwz+j842/6VzLuHrbx/tdZWfsrN5eGvJvlakg+u4zH3\nUNtPJXlhcfrCHOpL8ltJ/izJjdz8rsR7k9yT5FNJXkxyLsnrZ1LbP0/ym0k+l+RPFi/E4xMeu59O\n8v3Fz/P5xeldczh+O9T2s3M5fknenOR/LOr7XJInFpdPfuymPs21h+lfS6lvNj1szv2rU98setiq\n+5c/dwIA0GGCNwBAh7AEANAhLAEAdAhLAAAdwhIAQIewBADQISwBAHQISwAAHf8fofB1Ze23YuwA\nAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "B12_d = B12_c[:,-1::-1]\n", "\n", "HoM = hit_or_miss(X,B12_d)\n", "\n", "plt.figure(figsize=[10,10])\n", "plt.subplot(1,2,1)\n", "plt.imshow(X,interpolation='nearest')\n", "plt.subplot(1,2,2)\n", "plt.imshow(X,interpolation='nearest',alpha = .8)\n", "plt.imshow(HoM,interpolation='nearest',alpha=.5);\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### other Hit-or-Miss structuring elements:\n", "\n", "* isolated points\n", " \n", " $$\n", "\\begin{matrix}\n", " 0 & 0 & 0 \\\\\n", " 0 & 1 & 0 \\\\\n", " 0 & 0 & 0\n", " \\end{matrix}\n", "$$\n", "\n", "* terminaisons (+ 3 rotations)\n", "\n", "$$\n", "\\begin{matrix}\n", " \\cdot & \\cdot & \\cdot \\\\\n", " 0 & 1 & 0 \\\\\n", " 0 & 0 & 0\n", " \\end{matrix}\n", "$$ \n", "\n", "* triple point detection on a skeleton (+ 3 rotations)\n", "\n", "$$\n", "\\begin{matrix}\n", " 0 & 1 & 0 \\\\\n", " 0 & 1 & 0 \\\\\n", " 1 & 0 & 1\n", " \\end{matrix}\n", "$$ \n", "\n", "and\n", "\n", "$$\n", "\\begin{matrix}\n", " 1 & 0 & 0 \\\\\n", " 0 & 1 & 0 \\\\\n", " 1 & 0 & 1\n", " \\end{matrix}\n", "$$ \n", "\n", "* pruning (+ 3 rotations)\n", "\n", "$$\n", "\\begin{matrix}\n", " 0 & 0 & 0 \\\\\n", " 0 & 1 & 0 \\\\\n", " 0 & \\cdot & \\cdot\n", " \\end{matrix}\n", "$$ \n", "\n", "and\n", "\n", "$$\n", "\\begin{matrix}\n", " 0 & 0 & 0 \\\\\n", " 0 & 1 & 0 \\\\\n", " \\cdot & \\cdot & 0\n", " \\end{matrix}\n", "$$ \n", "\n", "\n", "\n", " " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ ">see also:\n", "* Morphological algorithms [MMIP](../00-Preface/06-References.ipynb#[MMIP]) p255-288" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 2", "language": "python", "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.10" } }, "nbformat": 4, "nbformat_minor": 0 }