【发布时间】:2023-03-12 17:17:02
【问题描述】:
我正在尝试从 2 个二进制图像中选择重叠/接触的图像。第一张图片(蓝色圆圈)有主体,我想找到任何附在上面的绿色三角形。
此处为第一张二值图像(为识别着色)
第二个二进制图像在这里
FinalImage = BinaryImage1 | BinaryImage2;
**Apply Filter**
预期结果:
注意未附加的绿色三角形是如何被删除的,所有蓝色圆圈都被保留了。
有没有办法做到这一点?
【问题讨论】:
我正在尝试从 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 示例图像,导致边框难看,所以我先对图像进行了形态学打开。边框仍然不是最佳的,但看起来还不错。
【讨论】: