建议先看下这篇博文:https://www.cnblogs.com/mikewolf2002/p/3304118.html

分水岭算法的直观表现(红***域为marker):

分水岭算法的运算过程可以理解成4个环节:

(1)根据marker灰度值的不同,从小到大的对marker赋予编号(灰度值最小编号为1,最大的编号为n);

(2)由编号1的marker最先开始,依次对各个盆地进行淹没(淹没的本质就是膨胀),淹没至山脊处后,则轮到下一个marker;

(3)当每个marker都淹没了其对应的盆地后,图像是否还存在未被淹没的区域,若存在则进行第四环节。

(4)同时提高所有marker的水位高度(灰度值),若存在一个marker的水位高度高于未被淹没的相邻盆地时,则暂停除了这个marker以外所有marker的水平高度升高,只对这个marker进行膨胀使其能够淹没相邻盆地,直到达到相邻盆地的山脊处停止,并再一次进行第三环节的判断。

       基于上述原理可以得到一个小技巧:对应原图上灰度值最高的marker(也可以理解为位于海拔最高的marker)会将所有未被标记的盆地和区域全部淹没/覆盖。因此,为了将我们感兴趣的盆地与剩余区域分割开,我们只需要对感兴趣的盆地进行标记。对于不感兴趣的区域,可通过在一个灰度值最高(海拔最高)的地方设置marker以将其全部淹没。