分水岭算法

引言:它是基于拓扑理论的形态学处理方法。将一张图像假想成为一张地貌特征图。

原理理解:灰度图被看作拓扑平面,灰度高看成山峰,灰度低看成山谷。从山谷开始注水,随着水位升高水流会相遇汇合。为了防止汇合,需要在汇合的地方建立堤坝。不停灌水,不停建堤坝,直到所有的山峰都被水淹没。堤坝就是对图像的分割,这就是分水岭算法背后的原理。

OpenCV采用了基于掩模的分水岭算法,在这种算法中我们要设置那些山谷点会汇合,那些不会。我们要做的是,给我们已知的对象打上不同的标签(颜色或灰度值)。前景一个标签,背景一个标签,不确定是前景还是背景的区域用0标记。。每一次灌水,我们的标签就会被更新,当两个不同颜色的标签相遇时就构建堤坝,直到将所有山峰淹没,最后我们得到的边界对象(堤坝)的值为 -1。

计算原图像的每个像素到最近的 0 像素的距离。

计算每个二值图像像素到最近的零像素之间的近似或精确距离。 对于零图像像素,该距离将为零。

一般二值图像中前景为白色(255),背景为黑色(0),距离变换即计算前景与背景的距离。所以前景目标中的像素点距离背景越远,则距离越大,那么距离变换后的图像距离背景越远就越亮。


海拔高度:不同灰度。灰度图像就可以变换成为三维图形。

集水盆:局部最小值

分水岭:每个相邻集水盆之间的边界,即真实图像的分割边界


距离变换:计算图像中非零像素点最近的零像素点的距离,也就是到零像素点的最短距离。

常见的距离变换算法:通过连续腐蚀操作实现,腐蚀操作的停止条件是所有前景像素都被完全腐蚀。根据腐蚀的先后顺序,我们就得到各个前景像素点到前景中心骨架像素点的距离。

根据各个像素点的距离值,设置为不同的灰度值。这样就完成了二值图像的距离变换

基于距离变换的分水岭分割流程:

分水岭算法_第1张图片


总结:1.对局部最小值和噪声敏感度高,准确性难保证。
2.很难界定淹没过程应该在什么时候停止。停的早,过分割,分割结果支离破碎;停的晚,欠分割,大部分边界被淹没。   极端情况是整幅图的边界都被淹没,只剩下一个分割块。
3.所以,分水岭算法会趋向于得到过分割的结果

解决分水岭的过分割情况:1.利用图像先验知识,去除不相关边界的信息,从而去除分割结果中无关抖动边界
2.修改梯度函数,使算法对灰度变化(灰度变化大=是边界)变得迟钝,仅对探测物体可产生较强响应

你可能感兴趣的:(算法)