分水嶺演算法的理解和應用

2021-10-02 08:20:41 字數 2398 閱讀 3223

例子

type:計算均值後,即生成閾值,而後採取固定影象二值化方法

block size:分塊的大小

c:閾值計算中的所加減的常數項

影象膨脹

影象腐蝕

建立核的方法

如果要構建圓形或者橢圓形的核,可以使用cv2.getstructuringelement()函式

更加通用的形態學

閉運算

形態學梯度

禮帽和黑帽

黑帽:原圖-閉運算後的影象

(一) 轉化為灰度,並進行二值化處理

(二) 去除雜點:三次膨脹+兩次腐蝕+一次膨脹

(一) 確定前景

sure_bg = cv2.dilate(opening3, kernel, iterations = 3) # 通過膨脹獲取背景區域

(二)確定背景

dist = cv2.distancetransform(opening3, cv2.dist_l2, 5) # 通過距離變換獲取前景區域

ret, sure_fg = cv2.threshold(dist, dist.max()*0.45, 255, cv2.thresh_binary) # 0.45根據實際情況來調

(三)確定未知區域

su***ce_fg = np.uint8(sure_fg) # 背景空間為整型空間,前景為浮點型空間,這裡做一下統一

ret, markers = cv2.connectedcomponents(su***ce_fg) # 所有的前景區域非0

markers = markers + 1 # 此時所有的區域非零,其中包含邊緣的未知區域和非背景區域為1

markers[unknown == 255] = 0 # 令包含邊緣的位置區域為0

# 注:watershed會將找到的柵欄在markers中設定為-1

markers = cv2.watershed(origin, markers = markers) # 獲取柵欄

origin[markers == -1] = [0,0,255] # 根據柵欄,我們對原影象進行操作,對柵欄區域設定為紅色

分水嶺演算法個人理解

分水嶺演算法流程 經典的風水嶺演算法,分為 一下幾步 1 按畫素值分層,即影象可分為256層,對影象畫素排序 2 對每個畫素層,首先將所有同一畫素層標記設為 2 然後對該層畫素點的鄰域判斷,若鄰域內有被標記過的畫素點,則將該畫素點入棧,否則對該層畫素點判斷,若標記為 2,且8鄰域內有畫素點標記也為 ...

分水嶺演算法

分水嶺變換是一種流行的影象處理演算法,用於快速將影象分割成多個同質區域。分水嶺演算法的思想是 把影象看成乙個拓撲地貌,那麼同類區域就相當於陡峭邊緣內相對平坦的盆地。分水嶺演算法通過逐步增加水位,把地貌分割成多個部分 目前比較著名的有模擬泛洪和降水 降水 水先是匯集到海拔低的地區,慢慢填充這每乙個盆地...

分水嶺演算法

在許多實際應用中,我們需要分割影象,但無法從背景影象中獲得有用資訊。分水嶺演算法在這方面往往是非常有效的。此演算法可以將影象中的邊緣轉化成 山脈 將均勻區域轉化為 山谷 這樣有助於分割目標。分水嶺演算法,是一種基於拓撲理論的數學形態學的分割方法,其基本思想是把影象看作是測地學上的拓撲地貌,影象中每一...