2016-08-19 59 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