2016-08-19 57 views
0

我有两个单独的图像:第一个图像只包含黑色的圆形物体,而第二个图像只包含绿色的圆形物体。我正在尝试制作一个代码,用于确定黑色物体中有多少绿色。如下图所示,将图像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

你能告诉我们使用'regionprops'来获取'blackPixels'和'greenPixels'的代码吗?你可以用布尔逻辑轻松解决这个问题。 – Suever

+0

你的图片有相同的尺寸? – obchardon

+0

@Suever,我编辑了问题 – Senyokbalgul

回答

2

你可以做一个逻辑AND(&)与绿色和黑色的图像,这将告诉你在哪里,他们重叠。然后,如果您需要连接的组件,则可以在产生的重叠图像上调用regionprops

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

非常简单..非常感谢您的帮助。 – Senyokbalgul