如何找到重叠的连通分量

Posted

技术标签:

【中文标题】如何找到重叠的连通分量【英文标题】:How to find overlapping connected components 【发布时间】:2016-08-19 12:58:27 【问题描述】:

我有两个单独的图像:第一个图像仅包含黑色圆形物体,而第二个图像仅包含绿色圆形物体。我正在尝试编写一个代码来计算黑色物体中有多少绿色。如下图所示,当叠加图像 1(仅包含黑色对象的图像)和图像 2(仅包含绿色对象的图像)时,可能会发生三种不同的情况。

我尝试使用regionprops 提取黑色和绿色对象的像素索引,并使用ismember 检查是否有任何重叠像素。每个单元格包含单个对象的像素索引。我觉得我在代码中做错了,但我似乎无法理解它到底是什么。我确信有一种更简单的方法可以做到这一点。

blackProperties = regionprops(logical(blackImage),'all');
greenProperties = regionprops(logical(greenImage),'all');
numBlackObjects = length(blackProperties);
numGreenObjects = length(greenProperties);
blackPixels = cell(1,numBlackObjects);
greenPixels = cell(1,numGreenObjects);

for j = 1:numBlackObjects
    blackPixelsj = blackProperties(j).PixelIdxList;
end

for j = 1:numGreenObjects
    greenPixelsj = greenProperties(j).PixelIdxList;
end

matchMem = zeros(100,2);

for j = 1:numel(blackPixels)
    blackPix = blackPixelsj;
    for i = 1:numel(greenPixels)
        greenPix = greenPixelsi;
        match = ismember(blackPix,greenPix);
        matchMem(match,1) = find(match);
        matchMem(match,2) = i;
    end
end

【问题讨论】:

你能告诉我们使用regionprops得到blackPixelsgreenPixels的代码吗?您可以使用布尔逻辑轻松解决此问题。 你的图片大小一样? @Suever,我已经编辑了问题 @obchardon,是的,两张图片大小相同 @Senyokbalgul 你没有显示你打电话给regionprops的地方。 【参考方案1】:

您可以对绿色和黑色图像进行逻辑与 (&),它会告诉您它们重叠的位置。然后,如果您需要连接的组件,您可以在生成的重叠图像上调用regionprops

green_and_black = blackImage & greenImage;
overlap_props = regionprops(green_and_black, 'all')

【讨论】:

以上是关于如何找到重叠的连通分量的主要内容,如果未能解决你的问题,请参考以下文章

如何使用python OpenCV在单通道图像中找到与特定值匹配的最大连通分量?

强连通分量tarjan模板复习

双连通分量和强连通分量的总结

寻找强连通分量 - Kosaraju 算法

图论有向图的强连通分量

图论有向图的强连通分量