
76
3 章 ndimage を使った画像領域のネットワーク
3.8
すべてのまとめ:平均の色を用いた領域分割
では、これまでに学んだことをすべて使って、上の画像のトラを切り出してみましょう
。
g = build_rag(seg, tiger)
for n in g:
node = g.node[n]
node['mean'] = node['total color'] / node['pixel count']
for u, v in g.edges():
d = g.node[u]['mean'] - g.node[v]['mean']
g[u][v]['weight'] = np.linalg.norm(d)
各エッジには、各セグメントの平均の色の差の情報が格納されています。この色差情報を用いて
グラフのエッジを閾値でふるい分けます。
def threshold_graph(g, t):
to_remove = [(u, v) for (u, v, d) in g.edges(data=True)
if d['weight'] > t]
g.remove_edges_from(to_remove)
threshold_graph(g, 80)
最後に、「
2
章
NumPy
と
SciPy
を用いた分位数正規化」で学んだ、
NumPy
の配列でインデッ
クス付けするワザを用います。
map_array = np.zeros(np.max(seg) + 1, int)
for i, segment in enumerate(nx.connected_components(g)): ...