分水岭算法

Matlab的标记分水岭分割算法

半腔热情 提交于 2020-02-02 00:18:28
1 综述 Separating touching objects in an image is one of the more difficult image processing operations. The watershed transform is often applied to this problem. The watershed transform finds "catchment basins"(集水盆) and "watershed ridge lines"(山脊线) in an image by treating it as a surface where light pixels are high and dark pixels are low. 如果图像中的目标物体是连接在一起的,则分割起来会更困难,分水岭分割算法经常用于处理这类问题,通常会取得比较好的效果。分水岭分割算法把图像看成一幅“地形图”,其中亮度比较强的区域像素值较大,而比 较暗的区域像素值较小,通过寻找“汇水盆地”和“分水岭界限”,对图像进行分割。 Segmentation using the watershed transform works better if you can identify, or "mark," foreground objects and background

【OpenCV(C++)】分水岭算法

僤鯓⒐⒋嵵緔 提交于 2020-01-30 03:13:37
【OpenCV(C++)】分水岭算法 分水岭算法概述 实现分水岭算法:watershed()函数 程序:分水岭算法 分水岭算法概述 在许多实际运用中,我们需要分割图像,但无法从背景图像中获得有用信息。 分水岭算法 (watershed algorithm)在这方面往往是非常有效的。此算法可以将图像中的边缘转化为“山脉”,将均匀区域转化为“山谷”,这样有助于分割目标。 该算法是一种基于拓扑理论的数学形态学的分割方法,其基本思想是把图像看作测地学上的拓扑地貌,图像中每一点像素的灰度值表示该点的海拔高度,每一个局部极小值及其影响区域称为集水盆,而集水盆的边界则形成分水岭。 实现分水岭算法:watershed()函数 在把图像传给函数之前,我们需要大致勾画标记出图像中的期望进行分割的区域,它们被标记为正指数。所以,每一个区域都会被标记为像素值1、2、3等,表示成为一个或者多个连接组件。这些标记值可以使用findContours函数和drawContours函数由二进制的掩码检索出来。 void watershed ( InputArray image , InputOutputArray markers ) 程序:分水岭算法 # include <opencv2/core/core.hpp> # include <opencv2/imgproc/imgproc.hpp> # include

分水岭算法

百般思念 提交于 2019-12-02 04:59:09
分水岭变换是一种流行的图像处理算法,用于快速将图像分割成多个同质区域。 分水岭算法的思想是:把图像看成一个拓扑地貌,那么同类区域就相当于陡峭边缘内相对平坦的盆地。 分水岭算法通过逐步增加水位,把地貌分割成多个部分(目前比较著名的有模拟泛洪和降水)。 降水:水先是汇集到海拔低的地区,慢慢填充这每一个盆地(低洼区域),直至水位差一线之隔就可以和另一个盆地汇合的时候,这个一线之隔的一线就是分割线。 但是只是单纯的这样分会产生过度分割的现象(在具体实现的时候,会用到极小值,最小值,由于暗纹理和暗区域的影响会出现很多伪数据,导致过度分割),所以提出了一种改进的分水岭算法----->加一个标记 改进后的算法是应用图像的低频部分和局部的极小值的相关性进行标记。 改进的算法是应用图像的低频成分来提取局部极小值,也可以有效的消除暗噪声,分水岭算法是在标记极小值后的原始梯度图像上进行的,可以保证图像的原始边缘信心没有受影响。 来源: https://blog.csdn.net/weixin_42058525/article/details/102717676