本篇博客主要介绍分水岭算法。
任何一副图像都可以看成拓扑平面,灰度值高的区域可以看成是山峰,灰度值低的地方可以看成是山谷,我们向每一个山谷中灌注不同颜色的水,随着水位的上升,不用山谷的水就会相遇汇合,为了防止不同颜色的水汇合,我们需要在水汇合的地方构建堤坝,不停的灌水的同时不停的构建堤坝,知道所有的山峰都被水淹没,我们构建好的堤坝就是对图像的分割,这就是分水岭算法背后的原理。
示例:
示例代码:
# encoding:utf-8
import cv2
import numpy as np
import matplotlib.pyplot as plt
img = cv2.imread('../data/water_coins.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)
kernel = np.ones((3, 3), np.uint8)
opening = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, kernel, iterations=2)
sure_bg = cv2.dilate(opening, kernel, iterations=3)
'''
距离变换基本含义是计算一个图像中费像素点到最