影像形态学基础(3):种子填充(Seed Filling)

种子填充是一种图像处理操作,其中图像的某个区域中的像素被分配一个标签。这是经常被描述为具有像素改变“颜色”。我们将填充的二进制图像,颜色的变化是从黑色到白色或反之亦然。

种子是一个像素或一个像素集合,其中的变化被选中开始。在限制生长的掩膜(MASK)的约束下,种子得以生长。在掩膜内,种子完成生长并结束填充过程。

此过程有多个名称。图形领域使用的“种子填充”和“泛洪填充”,而图像形态学界称之为二值重建(灰度重建),主要应用于图像分割。

有多种实现种子填充的方法,下面将对这些方法进行更详细的描述。在我们考虑的所有情况下,种子填充是由一个受掩模图像约束的不断增长的过程来完成的。最简单的概念方法是一个迭代过程,从翻转单个种子像素开始,然后根据掩码约束翻转每个像素(或4个或8个)。这可以通过过程调用或堆栈递归地完成。因为可能有大量的像素可以改变,所以我更喜欢使用动态堆栈而不是递归过程调用,它们可以生成任意深度的调用堆栈。当每个像素从堆栈中弹出时,它被检查,它的颜色被翻转,并将其合格的邻居放在堆栈上以供将来工作。

有一个效率较低但概念上很简单的方法是多次膨胀迭代,并与一个剪切掩模做“与”操作。这将以每迭代一个像素的速率生长边界,因此对于大图像,可能需要数百或数千次迭代将种子生长到掩码中。然而,我们提供了一个函数来做到这一点,无论是4或8填充。如果掩膜相对较小,它就工作得很好,它从简单性上具有教学价值,它提供了一个基线实现,可以检查其他更复杂、更高效的填充操作是否正确。

有两种方法可以可视化掩膜的操作。“填充掩模”:种子填充在掩码之下,直至填充区域(或组件)的边界;另一种是”阻挡掩模”,在该掩模中允许种子生长直到它触及阻挡掩模的元素为止。很容易看到,这两种掩膜只是彼此翻转而已。在洪水填充的描述中使用阻塞掩码是很常见的,在这里你有一个包含生长的种子和阻止生长的像素的单个图像。

矩形点阵上有两种不同的生长过程。这些被称为4连和8连种子填充,并填充到掩膜的4连和8连区域。4连填充通常(但不总是)比8填充的计算量大,因为需要检查的像素更少。

留下评论