2016-08-19 8 views
0

2つの別々のイメージがあります。最初のイメージには黒丸オブジェクトのみが含まれ、2番目のイメージには緑色の丸いオブジェクトのみが含まれています。私は黒のオブジェクトの中にどれくらいの緑色があるか把握するコードを作ろうとしています。下の図に示すように、画像1(黒い物体のみの画像)と画像2(緑の物体のみの画像)を重ね合わせると、3つのシナリオが発生する可能性があります。重複している接続コンポーネントを見つける方法

enter image description here

Iは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

関連する問題