选择重叠/接触区域(二进制图像,Matlab)

Selecting Overlapping / Touching regions (Binary Images, Matlab)

我正在尝试 select 重叠/接触来自 2 个二进制图像的图像。第一个图像(蓝色圆圈)有主体,我想找到附加到它的任何绿色三角形。

这里是第一个二值图像(为了识别而着色)

这里是第二个二进制图像

FinalImage = BinaryImage1 | BinaryImage2;

**Apply Filter**

预期结果:

注意如何删除未连接的绿色三角形,并保留所有蓝色圆圈。

有办法做到这一点吗?

这需要形态重建!在形态学重建中,您指定一个标记并使用形态学膨胀从该标记点开始重建原始图像。

对我们来说幸运的是,MATLAB 已经有一个函数,在图像处理工具箱中称为 imreconstruct,由 imreconstruct(marker,image)

调用

要识别触摸但不重叠的图形,我们可以只对其中一张输入图像进行放大,使触摸的图形重叠。作为结构元素,我们可以例如使用一个 3x3 的正方形,所以我们也能识别 8 个相连的图形。之后我们使用重叠点作为标记,并使用组合图像进行形态学重建。

dilatedImage1 = imdilate(binaryImage1, strel('square',3));
finalImage = imreconstruct(dilatedImage1&binaryImage2, dilatedImage1|binaryImage2);

当你写到所有圆圈,即来自 binaryImage1 的所有部分都应该保留时,我们可以使用

binaryImage1 添加到结果中
finalImage = finalImage | binaryImage1;

对于您的两个示例图像,结果为:

右上角的圆没有连接到任何三角形。我不知道那个三角形是如何出现在你预期的结果图像中的,但我想这只是为了演示目的。

注:我在MATLAB中导入了.jpg示例图片,导致边框难看,所以我先对图片做了形态学开洞。边界仍然不是最佳的,但看起来还不错。