如何找到重叠的连通分量
How to find overlapping connected components
我有两张单独的图片:第一张图片只包含黑色圆形物体,而第二张图片只包含绿色圆形物体。我正在尝试编写一个代码来计算出黑色物体中有多少绿色。如下图所示,叠加图像 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
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
您可以对绿色和黑色图像进行逻辑与 (&
),这将告诉您它们重叠的位置。然后如果你需要连通分量,你可以在生成的重叠图像上调用regionprops
。
green_and_black = blackImage & greenImage;
overlap_props = regionprops(green_and_black, 'all')
我有两张单独的图片:第一张图片只包含黑色圆形物体,而第二张图片只包含绿色圆形物体。我正在尝试编写一个代码来计算出黑色物体中有多少绿色。如下图所示,叠加图像 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
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
您可以对绿色和黑色图像进行逻辑与 (&
),这将告诉您它们重叠的位置。然后如果你需要连通分量,你可以在生成的重叠图像上调用regionprops
。
green_and_black = blackImage & greenImage;
overlap_props = regionprops(green_and_black, 'all')