选择重叠/接触区域(二进制图像,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示例图片,导致边框难看,所以我先对图片做了形态学开洞。边界仍然不是最佳的,但看起来还不错。
我正在尝试 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示例图片,导致边框难看,所以我先对图片做了形态学开洞。边界仍然不是最佳的,但看起来还不错。