ドキュメンテーション

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

塗りつぶし操作

関数 imfill はバイナリ イメージやグレースケール イメージ上で "塗りつぶし" 操作を実行します。この演算はイメージから人工的な部分を除去する場合に役立ちます。

  • バイナリ イメージの場合、imfill は連結した背景ピクセル (0) をフォワード ピクセル (1) に変化させ、オブジェクトの境界に達すると停止します。

  • グレースケール イメージの場合、imfill は明るい領域で囲まれた暗い領域の強度値を周りのピクセルと同じレベルにまで高くします。実際、imfill はイメージの境界に接続していない局所的な最小値群を除去する効果があります。詳細は、高い強度または低い強度の検出を参照してください。

連結性の指定

バイナリ イメージとグレースケール イメージの場合は、ユーザーが設定したピクセルの連結性により塗りつぶし操作の境界が決定されます。

メモ:

imfill"背景" ピクセルに操作する他のオブジェクトベースの操作と異なります。imfill で連結性を設定する場合は、背景の連結性を設定することになります。前景の連結性は設定されません。

次の図は、連結性の意味を示しています。

BW = logical([0     0     0     0     0     0     0     0;
              0     1     1     1     1     1     0     0;
              0     1     0     0     0     1     0     0;
              0     1     0     0     0     1     0     0;
              0     1     0     0     0     1     0     0;
              0     1     1     1     1     0     0     0;
              0     0     0     0     0     0     0     0;
              0     0     0     0     0     0     0     0]);

背景が 4 連結の場合、このバイナリ イメージは 2 つの別々な背景要素 (ループの内側の部分と外側の部分) を含んでいます。背景が 8 連結の場合、ピクセルは対角的に連結し、背景要素は 1 つしかありません。

開始点の設定

バイナリ イメージの場合は、位置の添字を渡すか、対話モードで関数 imfill を使用し、マウスで開始ピクセルを選択することで、塗りつぶし操作の開始点を指定できます。

たとえば、imfill を呼び出し、ピクセル BW(4,3) を開始点と設定すると、既定の設定では、背景は 4 連結であるため、imfill はループの内側を塗りつぶします。

imfill(BW,[4 3])

ans =
    0     0     0     0     0     0     0     0
    0     1     1     1     1     1     0     0
    0     1     1     1     1     1     0     0
    0     1     1     1     1     1     0     0
    0     1     1     1     1     1     0     0
    0     1     1     1     1     0     0     0
    0     0     0     0     0     0     0     0
    0     0     0     0     0     0     0     0

同じ開始点を指定して 8 連結の背景連結を使用すると、imfill はイメージ全体を塗りつぶします。

imfill(BW,[4 3],8)

ans =
    1     1     1     1     1     1     1     1
    1     1     1     1     1     1     1     1
    1     1     1     1     1     1     1     1
    1     1     1     1     1     1     1     1
    1     1     1     1     1     1     1     1
    1     1     1     1     1     1     1     1
    1     1     1     1     1     1     1     1
    1     1     1     1     1     1     1     1

穴の塗りつぶし

塗りつぶし操作は、イメージ内の穴の塗りつぶしに使用するのが一般的です。たとえば、前景オブジェクトが球面を表すバイナリ、またはグレースケールのイメージを考えてみましょう。イメージの中で、これらのオブジェクトは円板状に見えるはずですが、元の写真の反射のためにドーナツ状に見えます。イメージのさらなる処理を行う前に、関数 imfill を使用して "ドーナツの穴" を塗りつぶします。

穴の塗りつぶしに塗りつぶし操作を使用することはよくあるため、imfill にはバイナリ イメージやグレースケール イメージ用にそれをサポートする特殊な構文が用意されています。この構文では引数 'holes' を指定します。各穴でスタート位置を指定する必要はありません。

これを示すため、この例では血液細胞のグレースケール イメージでの穴の塗りつぶしを行います。

[X,map] = imread('spine.tif');
I = ind2gray(X,map);
Ifill = imfill(I,'holes');
imshow(I);figure, imshow(Ifill)

参考

関連するトピック