Files
scikit-image/doc/examples/plot_rag.py
T
2014-06-28 11:06:30 +05:30

58 lines
1.3 KiB
Python

"""
=======================
Region Adjacency Graphs
=======================
This example demonstrates the use of `merge_nodes` function of a Region
Adjacency Graph (RAG). When a new node is formed by merging two nodes, the edge
weight of all the edges incident on it can be updated by a user defined
function `weight_func`.
The default behaviour is to use the smaller edge weight incase of a conflict.
The example below also shows how to use a custom function to take the larger
weight instead.
"""
from skimage.graph import rag
import networkx as nx
from matplotlib import pyplot as plt
import numpy as np
def max_edge(g, src, dst, n):
w1 = g[n].get(src, {'weight': -np.inf})['weight']
w2 = g[n].get(dst, {'weight': -np.inf})['weight']
return max(w1, w2)
def display(g, title):
pos = nx.circular_layout(g)
plt.figure()
plt.title(title)
nx.draw(g, pos)
nx.draw_networkx_edge_labels(g, pos, font_size=20)
g = rag.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.
for n in g.nodes():
g.node[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)
display(gc, "Merged with max")
plt.show()