c ++实现matlab函数imfill()

时间:2014-04-01 14:12:45

标签: c++ matlab image-processing

我有一些图像配准算法的matlab代码。它使用imfill()作为二进制图像。我必须为此算法编写c ++代码,而不使用任何外部库,如openCV。

请告诉我如何在c ++中实现imfill()函数

下面分别是输入和输出图像。

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:0)

所以我开始深入研究Matlab的imfill代码,但很快发现它提供的代码只是一些已编译的c或c ++代码的包装器。现在,我将尝试概述一个可以为您提供所需内容的算法。以下算法假定要填充的区域在原始图像中包含零值。

  1. 识别零的连续区域,例如:
    1. 创建新的(零)蒙版图像
    2. 在掩模图像上循环,并且当在原始图像和掩模图像中找到零位时,递归地为掩码中的该位置分配值,并且向两个中的所有邻居分配零值。面具和原件。这导致掩码,其中原始图像中的每个连续零区域具有唯一ID。
  2. 对于每个连续的零区域,标识原始图像中与此区域相邻的所有其他值,注意记录零区域与图像边缘的边界。
  3. 对于原始图像中仅与一个值相邻的零的每个连续区域,并且不边缘图像的边缘,请将原始图像中的所有零替换为它们边界的值。
  4. 此算法不一定有效。特别是步骤1可能会看到一些智能使用队列的加速,以防止您在递归调用中多次查看相同的位置。