ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

bwboundaries

バイナリ イメージ内の領域の境界をトレース

構文

  • B = bwboundaries(BW)
  • B = bwboundaries(BW,conn)
  • B = bwboundaries(BW,conn,options)
  • [B,L]= bwboundaries(___)
  • [B,L,N,A] = bwboundaries(___)

説明

B = bwboundaries(BW) は、バイナリ イメージ BW において、オブジェクトの外側の境界をオブジェクトの内部にあるホール (穴) の境界と共にトレースします。また bwboundaries は、一番外側のオブジェクト (親) の内部に入り、子のオブジェクト (親オブジェクトに完全に囲まれたオブジェクト) をトレースします。境界ピクセルの位置のセル配列 B を返します。

B = bwboundaries(BW,conn) は、オブジェクトの外側の境界をトレースします。ここで、conn は親と子の境界をトレースする際に使用する連結性を指定します。

B = bwboundaries(BW,conn,options) は、オブジェクトの外側の境界をトレースします。ここで、options は文字列 'holes' または 'noholes' であり、他のオブジェクト内にある穴の境界を含めるかどうかを指定します。

[B,L]= bwboundaries(___) は、オブジェクトと穴にラベルが付けられたラベル行列 L を返します。

[B,L,N,A] = bwboundaries(___) は、見つかったオブジェクト数 N と隣接した配列 A を返します。

コード生成 サポート: あり。

MATLAB® Function ブロック サポート: なし。

すべて折りたたむ

グレースケール イメージをワークスペースに読み取ります。

I = imread('rice.png');

局所的な適応しきい値処理を使用してグレースケール イメージをバイナリ イメージに変換します。

BW = imbinarize(I);

イメージ内の領域の境界を計算し、イメージ上に重ね合わせます。

[B,L] = bwboundaries(BW,'noholes');
imshow(label2rgb(L, @jet, [.5 .5 .5]))
hold on
for k = 1:length(B)
   boundary = B{k};
   plot(boundary(:,2), boundary(:,1), 'w', 'LineWidth', 2)
end

バイナリ イメージをワークスペースに読み取ります。

BW = imread('blobs.png');

イメージ内の領域の境界を計算します。

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

境界を重ね合わせたイメージを表示します。ラベル行列に基づいて領域番号を各境界の横に追加します。ズーム ツールを使用して個々のラベルを確認します。

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

関数 spy を使用して隣接行列を表示します。

figure
spy(A);

バイナリ イメージをワークスペースに読み取ります。

BW = imread('blobs.png');

境界を計算します。

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

オブジェクトの境界を赤で表示し、穴の境界を緑で表示します。

imshow(BW); hold on;
for k=1:length(B),
   boundary = B{k};
   if(k > N)
     plot(boundary(:,2), boundary(:,1), 'g','LineWidth',2);
   else
     plot(boundary(:,2), boundary(:,1), 'r','LineWidth',2);
   end
end

イメージをワークスペースに読み取ります。

BW = imread('blobs.png');

親境界を赤で表示し、それらの穴を緑で表示します。

[B,L,N,A] = bwboundaries(BW);
figure; imshow(BW); hold on;
% Loop through object boundaries
for k = 1:N
    % Boundary k is the parent of a hole if the k-th column
    % of the adjacency matrix A contains a non-zero element
    if (nnz(A(:,k)) > 0)
        boundary = B{k};
        plot(boundary(:,2),...
            boundary(:,1),'r','LineWidth',2);
        % Loop through the children of boundary k
        for l = find(A(:,k))'
            boundary = B{l};
            plot(boundary(:,2),...
                boundary(:,1),'g','LineWidth',2);
        end
    end
end

入力引数

すべて折りたたむ

バイナリ入力イメージ。実数、非スパース、2 次元の論理配列または数値配列として指定します。BW は、非ゼロのピクセルがオブジェクトに属し、0 のピクセルが背景を構成するバイナリ イメージでなければなりません。次の図では、これらの成分を説明します。

例: B = bwboundaries(BW);

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

連結性。次のいずれかのスカラー値として指定します。

意味

4

4 連結近傍

8

8 連結近傍。これは既定の設定です。

例: B = bwboundaries(BW,4);

データ型: double

親と子の両方の境界を探索するかどうかを決定します。次のいずれかの文字列として指定します。

文字列

意味

'holes'

オブジェクトと穴の両境界を探索します。これは既定の設定です。

'noholes'

オブジェクト (親と子) の境界を探索します。これにより、パフォーマンスが向上します。

例: B = bwboundaries(BW,'noholes',4);

データ型: char

出力引数

すべて折りたたむ

境界ピクセルの行座標と列座標。P 行 1 列のセル配列として返します。ここで、P はオブジェクトと穴の数です。セル配列内の各セルには、Q 行 2 列の行列が含まれています。配列内の各行には境界ピクセルの行座標と列座標が含まれています。Q は対応する領域の境界ピクセルの数です。

連続領域のラベル行列。double クラスの非負の整数から成る 2 次元配列として返されます。k 番目の領域には、値 k をもつ L 内のすべての要素が含まれています。L で表すオブジェクトと穴の数は、max(L(:)) に等しくなります。背景は、L のゼロの値をとる要素で構成されています。

検出されたオブジェクトの数。double クラスの数値のスカラー値として返されます。

境界と穴の親子の依存関係。辺の長さが max(L(:)) の正方、スパース、double クラスの論理行列として返されます。A の行と列は B に格納された境界の位置に対応します。B 内の最初の N セルはオブジェクトの境界です。A(i,j)=1 は、オブジェクト i がオブジェクト j の子オブジェクトであることを意味します。k 番目の境界を囲むか、それによって囲まれる境界は、A を次のように使用すると検出できます。

enclosing_boundary  = find(A(m,:));
enclosed_boundaries = find(A(:,m));

詳細

すべて折りたたむ

コード生成

この関数では MATLAB Coder™ を使用した C コードの生成がサポートされています。汎用の MATLAB Host Computer ターゲット プラットフォームを選択した場合、プリコンパイルされたプラットフォーム固有の共有ライブラリを使用するコードが、この関数によって生成されます。共有ライブラリを使用するとパフォーマンスの最適化は維持されますが、コードを生成できるターゲット プラットフォームが限定されます。詳細は、「Image Processing Toolbox のコード生成について」を参照してください。

コード生成時には、以下の点に注意してください。

  • conn パラメーターはコンパイル時の定数でなければなりません。

  • options パラメーターはコンパイル時の定数でなければなりません。

  • 戻り値 A は非スパース行列のみ可能で、スパース行列にはできません。

アルゴリズム

関数 bwboundaries は、Jacob の停止条件によって変更された Moore-Neighbor トレース アルゴリズムを実装します。この関数は、『Digital Image Processing Using MATLAB , by Gonzalez, R. C., R. E. Woods, and S. L. Eddins, New Jersey, Pearson Prentice Hall, 2004』の初版にある関数 boundaries に基づいています。

参照

[1] Gonzalez, R. C., R. E. Woods, and S. L. Eddins, Digital Image Processing Using MATLAB, New Jersey, Pearson Prentice Hall, 2004.

R2006a より前に導入

この情報は役に立ちましたか?