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

Last updated: 05/02/2018

\n", " show/hide source code\n", " " ], "text/plain": [ "" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#rem \"%matplotlib notebook\" crashes with networkx\n", "%matplotlib inline \n", "import matplotlib.pyplot as plt\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": [ "# Model based segmentation\n", "\n", "As far, we considered the image segmentation as a bottom-up process, where connected pixels are grouped together based on some sort of rule based on gray levels, borders etc.\n", "\n", "In some cases, one know *a priori* the object we are looking for.\n", "\n", "An example was already given when looking for lines and circles using the Hough transform.\n", "\n", "We will see in this chapter other method using this top-down approach." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Live-wire\n", "\n", "The live-wire algorithm is an interactive segmentation method that helps the user to delineate object borders in an image. The user select some points located near the object boundary and the algorithm connect them using a best path strategy." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Dijkstra shortest path algorithm" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "image/png": "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\nM5YAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import networkx as nx\n", "G=nx.DiGraph()\n", "G.add_weighted_edges_from([('y','s',7),('y','v',6),('x','y',2),('x','u',3),('x','v',9),\n", " ('s','x',5),('s','u',10),('u','x',2),('u','v',1),('v','y',4)])\n", "\n", "pos=nx.spring_layout(G) \n", "edgewidth=[]\n", "for (u,v,d) in G.edges(data=True):\n", " edgewidth.append(d['weight'])\n", " \n", "nx.draw_networkx_nodes(G,pos=pos)\n", "nx.draw_networkx_labels(G,pos=pos,font_size=20,font_family='sans-serif')\n", "nx.draw_networkx_edges(G,pos,alpha=0.3,width=edgewidth, edge_color='m',arrows=True);" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "['s', 'x', 'u', 'v']\n", "['v', 'y', 's']\n" ] } ], "source": [ "print(nx.dijkstra_path(G,source='s',target='v'))\n", "print(nx.dijkstra_path(G,source='v',target='s'))" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python (py3)", "language": "python", "name": "py3" }, "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.6.2" } }, "nbformat": 4, "nbformat_minor": 1 }