如何查找重叠的连接组件

时间:2016-08-19 12:58:27

标签: image matlab image-processing overlay

我有两个单独的图像:第一个图像只包含黑色圆形物体,而第二个图像只包含绿色圆形物体。我正在尝试制作一个能够计算出黑色物体中有多少绿色的代码。当覆盖图像1(仅带有黑色物体的图像)和图像2(仅带有绿色物体的图像)时,可能会出现三种不同的情况,如下图所示。

enter image description here

我尝试使用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
    blackPixels{j} = blackProperties(j).PixelIdxList;
end

for j = 1:numGreenObjects
    greenPixels{j} = greenProperties(j).PixelIdxList;
end

matchMem = zeros(100,2);

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

1 个答案:

答案 0 :(得分:2)

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

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