iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 8
1
AI & Data

AI的介紹-水果系列 第 8

Day 8 影像辨識分水嶺

  • 分享至 

  • xImage
  •  

大家好~~~歡迎來到第8篇介紹分水嶺

今天要來跟大家介紹何謂分水嶺,其實簡單介紹是說,今天如果有兩個東西重疊的時候,但是我不要很隨便的一起辨識,我要這兩個刻意分開辨識,那這樣就叫做分水嶺,不過這個做法有一個盲點,如果你不是透過訓練方式,不可能每張圖可以做到分水嶺,如果是做固定的,只能在特定幾張圖做到分水嶺動作。

import numpy as np 
import cv2 as cv 
from matplotlib import pyplot as plt 
img = cv.imread('coins.png') 
gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY) 
ret, thresh = cv.threshold(gray,0,255,cv.THRESH_BINARY_INV+cv.THRESH_OTSU)
kernel = np.ones((3,3),np.uint8) 
opening = cv.morphologyEx(thresh,cv.MORPH_OPEN,kernel, iterations = 2) 

sure_bg = cv.dilate(opening,kernel,iterations=3) 

dist_transform = cv.distanceTransform(opening,cv.DIST_L2,5) 
ret, sure_fg = cv.threshold(dist_transform,0.7*dist_transform.max(),255,0) 
sure_fg = np.uint8(sure_fg) 
unknown = cv.subtract(sure_bg,sure_fg)
ret, markers = cv.connectedComponents(sure_fg) 

markers = markers+1 

markers[unknown==255] = 0

markers = cv.watershed(img,markers) 
img[markers == -1] = [255,0,0]

上方程式碼,我從參考資料取得,人家是用硬幣來做一個介紹,這其中很多方法我在先前有介紹過,分水嶺的主要功能為 watershed 但是這個方法必須要先前先做出標點,讓他知道說有那些地方需要做分水嶺,最後再用這個模組才能成立,首先你必須一樣要將圖片做 Threshold 方式來進行黑白的辨識方式,接著你要做膨脹以及侵蝕的效果讓他的個體點縮小,讓她變成一個點之後,將這些點利用特徵方式一個一個的標示出來,最後這些會變成一個參數 markers 這些 markers 就是協助你幫忙判斷他們都是個別的個體。

https://ithelp.ithome.com.tw/upload/images/20200923/20120312a5z99ZcQGp.png

但是像這樣針對硬幣的部分如果套上水果的話.....
https://ithelp.ithome.com.tw/upload/images/20200923/201203129tw1FmtF7E.png
大家看一下可能會覺得,感覺還行呀,但是有個問題,這個只是背景為白色的番茄圖,如果背景是很鮮豔的果園的話,這個狀態可是慘不忍睹的,所以我們如果要讓他看起來完整一點,通常這個結果要做膨脹將黑點消除,消除完畢就可以呈現完整的番茄,但是也不能百分之百,最好放入訓練是最容易的。

以上就是介紹分水嶺的概念 cv2.watershed 這個在重疊的物體上非常好用,大家可以去操作操作試試看

那麼我們下篇見摟 謝謝大家觀看。
參考資料

雜亂的物品,利用好好的分類,就可以看出物品的樣貌,非常的方便!!


上一篇
Day 7 執行的第一步
下一篇
Day 9 影像辨識初步相關插曲
系列文
AI的介紹-水果30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言