1、理论基础

      区域生长算法的基本思想是将有相似性质的像素点合并到一起。对每一个区域要先指定一个种子点作为生长的起点,然后将种子点周围领域的像素点和种子点进行对比,将具有相似性质的点合并起来继续向外生长,直到没有满足条件的像素被包括进来为止。这样一个区域的生长就完成了。这个过程中有几个关键的问题:

a> 给定种子点(种子点如何选取?)

      种子点的选取很多时候都采用人工交互的方法实现,也有用其他方式的,比如寻找物体并提取物体内部点作为种子点。

b> 确定在生长过程中能将相邻像素包括进来的准则

     灰度图像的差值;彩色图像的颜色等等。都是关于像素与像素间的关系描述。

c> 生长的停止条件

    

2、灰度差值的区域生长算法实现


算法实现的步骤:


a>  创建一个空白的图像(全黑);


b> 将种子点存入vector中,vector中存储待生长的种子点;


c> 依次弹出种子点并判断种子点如周围8领域的关系(生长规则),相似的点则作为下次生长的种子点;


d> vector中不存在种子点后就停止生长。





opencv裂缝区域生长 opencv区域生长算法_入栈







3、算法效果



贴图看看使用该算法的图像处理效果:

首先对原图像进行二值化:


opencv裂缝区域生长 opencv区域生长算法_区域生长_02


得到种子点的方法这里就不用介绍了,这个不是该算法的重点。得到两个种子点(左右肺),分别使用区域生长算法得到左右肺区,然后与原图进行与运算,得到结果:


opencv裂缝区域生长 opencv区域生长算法_灰度值_03