Note

Go to the endto download the full example code or to run this example in your browser via Binder.

Region Adjacency Graphs (RAGs)#

This example demonstrates the use of themerge_nodes function of a RegionAdjacency Graph (RAG). TheRAG class represents an undirected weighted graphwhich inherits fromnetworkx.Graph class. When a new node is formed bymerging two nodes, the edge weight of all the edges incident on the resultingnode can be updated by a user defined functionweight_func.

The default behaviour is to use the smaller edge weight in case of a conflict.The example below also shows how to use a custom function to select the largerweight instead.

  • Original Graph
  • Merged with default (min)
  • Merged with max without in_place
importskimageasskiimportnetworkxasnxfrommatplotlibimportpyplotaspltimportnumpyasnpdefmax_edge(g,src,dst,n):"""Callback to handle merging nodes by choosing maximum weight.    Returns a dictionary with `"weight"` set as either the weight between    (`src`, `n`) or (`dst`, `n`) in `g` or the maximum of the two when    both exist.    Parameters    ----------    g : RAG        The graph under consideration.    src, dst : int        The vertices in `g` to be merged.    n : int        A neighbor of `src` or `dst` or both.    Returns    -------    data : dict        A dict with the "weight" attribute set the weight between        (`src`, `n`) or (`dst`, `n`) in `g` or the maximum of the two when        both exist.    """w1=g[n].get(src,{'weight':-np.inf})['weight']w2=g[n].get(dst,{'weight':-np.inf})['weight']return{'weight':max(w1,w2)}defdisplay(g,title):"""Displays a graph with the given title."""pos=nx.circular_layout(g)plt.figure()plt.title(title)nx.draw(g,pos)nx.draw_networkx_labels(g,pos)nx.draw_networkx_edge_labels(g,pos,font_size=20)g=ski.graph.RAG()g.add_edge(1,2,weight=10)g.add_edge(2,3,weight=20)g.add_edge(3,4,weight=30)g.add_edge(4,1,weight=40)g.add_edge(1,3,weight=50)# Assigning dummy labels.forning.nodes():g.nodes[n]['labels']=[n]gc=g.copy()display(g,"Original Graph")g.merge_nodes(1,3)display(g,"Merged with default (min)")gc.merge_nodes(1,3,weight_func=max_edge,in_place=False)display(gc,"Merged with max without in_place")plt.show()

Total running time of the script: (0 minutes 0.402 seconds)

Gallery generated by Sphinx-Gallery

This Page