分水岭算法算法思想
最常用的分水岭算法是上世纪90年代提出的基于灰度图像分割的算法,分水岭算法是一种与自适应二值化有关的算法。下图给出了该方法的工作原理。假定图中的物体灰度值低,背景灰度值高。图中曲线表示沿着平面一条直线灰度分度,该线穿过了两个靠的比较近的物体。
分水岭算法往往从一个偏低但仍能正确分割各个物体的阈值开始,然后随着阈值逐渐增加上升到最佳值(接接近背景的灰度值),各个物体不会被合并。只要阈值使用的合适,在此基础上增加到一个最佳的阈值(该阈值用来判断前景和背景) 也会有很好的区分效果。
我们在使用分水岭算法时,需要选择种子点(局部极小值点),可以用模板去寻找,这实际上是在确定阈值,即从该阈值开始增加(即可理解为开始从谷底注水,不断增加阈值),当阈值增加到最佳阈值时(可理解为水 注满了,该确定水坝了),此时的水坝即我们需要的物体边界分割线。
从上面的分析可以看出,初始阈值(种子点)的选取对最后的分割结果影响都较大。若初始阈值选择在阈值1 处:那么低对比度的物体在一开始就会被丢失,随着阈值增加时就会和相邻的物体合并(显然不能达到好的分割效果了)。如果种子点的值选择在阈值2处,则物体1和物体2一开始就会被合并。而最终的阈值(水坝)决定了最后的边界与实际物体的吻合程度。
OpenCV的分水岭算法,关键点在于怎样去寻找符合该API要求的标注矩阵makers(该