问题
I have two separate images: the first image only contains the black round objects, while the second image only contains the green round objects. I am trying to make a code that will figure out how much of the green is in the black objects. There are three different scenarios that could happen when overlaying image 1 (image with black objects only) and image 2 (image with green objects only) as shown in the image below.
I have tried to extract the pixel indices of the black and green objects using regionprops and check whether if there are any overlapping pixels using ismember. Each cell contains the pixel indices of the a single object. I feel that there is something I'm doing wrong in the code but I can't seem to grasp what it is exactly. I'm sure that there is a simpler method to do this.
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:
You can just do a logical AND (&) with the green and black images which will tell you where they overlap. Then if you need connected components, you can call regionprops on the resulting overlap image.
green_and_black = blackImage & greenImage;
overlap_props = regionprops(green_and_black, 'all')
来源:https://stackoverflow.com/questions/39039684/how-to-find-overlapping-connected-components