2016-06-14 13 views
0

bwconncompsで隔離された接続されたコンポーネントを持つバイナリイメージ(添付)があります。私はこれらの各コンポーネントのアウトラインを特定しようとしていますが、まだ塗りつぶしオブジェクトを参照できる方法で(私はグレースケールイメージのマスクとしてアウトラインを使用しています。値が満たされた元の関心領域に対して操作を実行する)MATLAB:バイナリイメージ内の関心領域の周囲を隔離する:bwmorphの問題

添付画像にbwconncompsを実行すると、814個のオブジェクトが識別されます。私はbwmorph(D、 'remove')を実行できます。私はオブジェクトのアウトライン/ペリメーターを取得しますが、これでbwconncompsを実行すると、827個のオブジェクトが得られます(これらの余分なオブジェクトがどこから来ているのか分かりませんが、このねじが、値Iその輪郭から引っ張る)。

基本的には元のバイナリイメージのbwconncompsと同じ数の接続コンポーネントを残すbwmorph(D、 'remove')のバージョンが必要です。元のバイナリのコンポーネント#30と比較できますbwconncompsの同じ#30の輪郭に。

これは明らかでしたか?ご意見はありますか?

おかげ

enter image description here

答えて

1

は、各連結成分が境界の対応するセットを有するように、白色の連結成分の画素境界を見つけるためbwboundariesを使用することができます。

%calculate boundries and generate boundry mask 
B = bwboundaries(im,'noholes'); 
boundriesImage = zeros(size(im)); 
boundriesPixels = cell2mat(B); 
boundriesImage(sub2ind(size(im),boundriesPixels(:,1),boundriesPixels(:,2)))=1; 

%finds the connected component in the original image and in the boundry 
%mask 
CC = bwconncomp(im); 
CC2 = bwconncomp(boundriesImage); 

結果:CCおよびCC2は連結成分

CC = 

    Connectivity: 8 
     ImageSize: [535 1571] 
     NumObjects: 814 
    PixelIdxList: {1x814 cell} 

CC2 = 

    Connectivity: 8 
     ImageSize: [535 1571] 
     NumObjects: 814 
    PixelIdxList: {1x814 cell} 

の同じ数も、各連結成分CC2は{II}、それに一致含有するCC {II}次の試験によって見ることができるようです結果:

%tests that for each ii, CC{ii} is contained in CC{i} 
CC2MatchesToCC1 = true; 
for ii=1:length(CC.PixelIdxList) 
    if length(intersect(CC2.PixelIdxList{ii},CC.PixelIdxList{ii}))~=length(CC2.PixelIdxList{ii}) 
     CC2MatchesToCC1 = false; 
    end 
end 

結果:

CC2MatchesToCC1 = 

1 
関連する問題