分水岭算法图像分割

1、原理:
任何一副灰度图像都可以被看成拓扑平面,灰度值高的区域可以被看成是
山峰,灰度值低的区域可以被看成是山谷。我们向每一个山谷中灌不同颜色的
水。随着水的位的升高,不同山谷的水就会相遇汇合,为了防止不同山谷的水
汇合,我们需要在水汇合的地方构建起堤坝。不停的灌水,不停的构建堤坝知
道所有的山峰都被水淹没。我们构建好的堤坝就是对图像的分割。这就是分水
岭算法的背后哲理。你可以通过访问网站CMM webpage on watershed来
加深自己的理解。
但是这种方法通常都会得到过度分割的结果,这是由噪声或者图像中其他
不规律的因素造成的。为了减少这种影响,OpenCV 采用了基于掩模的分水岭
算法,在这种算法中我们要设置那些山谷点会汇合,那些不会。这是一种交互
式的图像分割。我们要做的就是给我们已知的对象打上不同的标签。如果某个
区域肯定是前景或对象,就使用某个颜色(或灰度值)标签标记它。如果某个
区域肯定不是对象而是背景就使用另外一个颜色标签标记。而剩下的不能确定
是前景还是背景的区域就用 0 标记。这就是我们的标签。然后实施分水岭算法。
每一次灌水,我们的标签就会被更新,当两个不同颜色的标签相遇时就构建堤
坝,直到将所有山峰淹没,最后我们得到的边界对象(堤坝)的值为 -1。
 
2、函数: cv2.watershed()
 

猜你喜欢

转载自www.cnblogs.com/h694879357/p/12272999.html