2011-01-16 15 views
0

灰色の画像で境界線をトレースしたいだけです。リージョン境界を2回取得することで問題が発生しました。どのようにして1つの境界線しか得ることができず、エッジピクセルの中心に来ることができません。 次の例では、私は2つの領域4,30を得ました。しかし、私は(4)しか必要ありません。それを得るためにはどの画像の前処理が必要ですか?bwboundaries - 、MATLAB-、前処理

例: noholes -optionと領域4、30

BW = imread('blobs.png'); 

[B,L,N,A] = bwboundaries(BW); 

figure, imshow(BW); hold on; 

colors=['b' 'g' 'r' 'c' 'm' 'y']; 


for k=1:length(B) 

    boundary = B{k}; 
    cidx = mod(k,length(colors))+1; 

    plot(boundary(:,2), boundary(:,1),... 

     colors(cidx),'LineWidth',2); 

    %randomize text position for better visibility 

    rndRow = ceil(length(boundary)/(mod(rand*k,7)+1)); 

    col = boundary(rndRow,2); row = boundary(rndRow,1); 

    h = text(col+1, row-1, num2str(L(row,col))); 

    set(h,'Color',colors(cidx),... 

     'FontSize',14,'FontWeight','bold'); 
end 

figure; spy(A); 

答えて

1

コールbwboundariesを参照してください。これにより、オブジェクトの内部境界が削除されます。言い換えれば

[B,L,N,A] = bwboundaries(BW,8,'noholes'); %# 8 is for 8-connected pixels