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

Last updated: 13/09/2016

\n", " show/hide source code\n", " " ], "text/plain": [ "" ] }, "execution_count": 4, "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": [ "# 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": 37, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\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": 19, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "['s', 'x', 'u', 'v']\n", "['v', 'y', 's']\n" ] } ], "source": [ "path=nx.all_pairs_dijkstra_path(G)\n", "print(path['s']['v'])\n", "print(path['v']['s'])" ] }, { "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.11" } }, "nbformat": 4, "nbformat_minor": 0 }