我們的目標為使用影像切割演算法來擷取出陶罐上的紋路樣式。
專題老師 : 林哲正 教授、李文廷 教授 專題學生 : 馬勇祥、周翔恩、劉東晉
驗證方法
IOU (Intersection over Union)
影像集與Mask (紋路遮罩)
紋路偵測演算法
大津演算法(Otsu's Method)
大津演算法(Otsu's Method)是一種常用的影像處理技術,用於自動選擇適當的閾值,將影像分為前景(目標物)與背景兩部分。它的原理是透過最大化群間變異數(兩類像素的分散程度)來找到最佳的閾值。
大津法的原理 : 窮舉出所有的閥值,透過閥值將像素分為兩類以計算出資料間的離散程度(群間變異數)。
OTSU 圖片結果:
平均演算法 ( K-means Clustering )
K-means 是一種常見的無監督學習演算法,用於將數據分成 k 個叢集(clusters)。它的目的是將具有相似特徵的數據點聚集在一起,使每個聚類內部的相似性最大化,聚類之間的差異最小化。
K-means 原理 : 每一個點會被分配到離它最近的群中心點
橘色的點代表上一回合的群中心點,而綠色的點代表更新後的群中心點,重複更新中心點直到所有點都穩定
K-means 圖片結果:
分水嶺演算法 ( Watershed Algorithmn )
分水嶺法(Watershed Algorithm)是一種常用的影像分割技術,主要基於形態學理論,模擬水從地形低處向高處流動的過程,將影像中的區域分割成若干個不相交的區域。分水嶺法在影像處理中特別適合用於區分相鄰目標或分割重疊的物體。
Watershed Algorithm 原理 :
分水嶺法將影像視為地形表面:
灰階值 低 的區域被視為「盆地」或「低谷」。
灰階值 高 的區域被視為「山峰」或「高地」。
算法模擬「水從低處流向高處」的過程,當水從不同的盆地相遇時,形成「分水嶺」(watershed line),從而完成區域分割。
Watershed 圖片結果:
Sobel 邊緣偵測
1. 由影像中分割出9個pixel,pixel 5是目標
2. 用兩個sobel算子計算pixel 5的梯度G
3. 設定threshold(閥值)
4. 如果G之value大於閥值則判斷此pixel是邊緣
Sobel 圖片結果:
Canny 邊緣偵測
用java 接 OpenCV 的API 實現
1. 以5*5的KERNEL進行高斯模糊
2. 用SOBEL算子進行邊緣探勘
3. 算最大梯度方向與非最大值抑制
4. 以閥值標記強弱邊緣,將背景與非邊緣排除得到最終結果
Canny 圖片結果:
IOU比較結果
改善方法 : 閉運算原理
開發工具
使用工具
Image J
版本控制
問題解決
問題1:辨識紋路效果不佳
解法:使用不同類型的方法比較出最適合的演算法
問題2:演算法對於圖片噪點敏感
解法:使用濾波器模糊噪點對圖片的影響
問題3:難以找到最佳閥值
解法:使用多層分群演算法分析不同閥值對圖片遮罩後的影響