EX 12: Spectral clustering for image segmentation
http://scikit-learn.org/stable/auto_examples/cluster/plot_segmentation_toy.html
此範例是利用Spectral clustering來區別重疊的圓圈,將重疊的圓圈分為個體。
建立一個100x100的影像包含四個不同半徑的圓
透過
np.indices改變影像顏色複雜度用
spectral_clustering區分出各個不同區域特徵
(一)引入函式庫
引入函式庫如下: 1. numpy:產生陣列數值 2. matplotlib.pyplot:用來繪製影像 3. sklearn.feature_extraction import image:將每個像素的梯度關係圖像化 4. sklearn.cluster import spectral_clustering:將影像正規化切割
import numpy as np
import matplotlib.pyplot as plt
from sklearn.feature_extraction import image
from sklearn.cluster import spectral_clustering(二)建立要被區分的重疊圓圈影像
產生一個大小為輸入值得矩陣(此範例為100x100),其內部值為沿著座標方向遞增(如:0,1,...)的值。
l = 100
x, y = np.indices((l, l))建立四個圓圈的圓心座標並給定座標值
給定四個圓圈的半徑長度
將圓心座標與半徑結合產生四個圓圈圖像
將上一段產生的四個圓圈影像合併為
img使其成為一體的物件mask為布林形式的imgimg為浮點數形式的img用亂數產生的方法將整張影像作亂數處理
接著將產生好的影像化為可使用spectral_clustering的影像
image.img_to_graph用來處理邊緣的權重與每個像速間的梯度關聯有關用類似Voronoi Diagram演算法的概念來處理影像
最後用spectral_clustering將連在一起的部分切開,而spectral_clustering中的各項參數設定如下:
graph: 必須是一個矩陣且大小為nxn的形式n_clusters=4: 需要提取出的群集數eigen_solver='arpack': 解特徵值的方式
開一張新影像label_im用來展示spectral_clustering切開後的分類結果

(三)完整程式碼
Python source code:plot_segmentation_toy.py
http://scikit-learn.org/stable/_downloads/plot_segmentation_toy.py
Last updated