EX 6: 以群聚法切割錢幣影像.md
此範例用Spectral Clustering以分割圖中的硬幣
利用coins()匯入圖片
利用spectral_clustering做切割
最後將結果可視化
(一)引入函式庫
引入函式如下:
time : 提供各種與時間相關函數
numpy : 產生陣列數值
scipy.ndimage.filters import gaussian_filter : 做gaussian filter
matplotlib.pyplot : 用來繪製影像
skimage.data import coins : 匯入龐貝城的希臘硬幣
skimage.transform import rescale : 用來縮放圖片
sklearn.feature_extraction import image : 將每個像素的梯度關係圖像化
sklearn.cluster import spectral_clustering : 將影像正規化切割
import time
import numpy as np
from scipy.ndimage.filters import gaussian_filter
import matplotlib.pyplot as plt
from skimage.data import coins
from skimage.transform import rescale
from sklearn.feature_extraction import image
from sklearn.cluster import spectral_clustering
orig_coins = coins()
smoothened_coins = gaussian_filter(orig_coins, sigma=2)
rescaled_coins = rescale(smoothened_coins, 0.2, mode="reflect")coins() : 匯入一張303x384的影像 用 rescale 將圖片 resize 成原圖的20%(61x77)來加快處理,並根據 mode 選擇 padding 方式
(二)Clustering
img_to_graph : 用來處理邊緣的權重與每個像速間的梯度關聯
beta越小,實際圖像會分割的越獨立,當 beta = 1 時,會類似Voronoi Diagram演算法的概念
用spectral_clustering將連在一起的部分切開,而spectral_clustering中的各項參數設定如下:
graph: 必須是一個矩陣且大小為nxn的形式
n_clusters: 需要提取出的群集數
random_state: 偽隨機數產生器,用於初始化特徵向量分解計算
assign_labels:選擇assign label的方法(kmeans or discretize)
用plt.contour畫出等高線,同個label會被框在同個圈內

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