Main Content

imhmin

H-minima 変換を使用したイメージの局所的な最小値の抑制

説明

J = imhmin(I,H) は、H-minima 変換を使用してグレースケール イメージ I の局所的な最小値を抑制します。H-minima 変換は、すべての局所的な最小値の深さを、最大で H によって指定された量だけ小さくします。その結果、深さが H 未満の局所的な最小値はこの変換によって完全に抑制されます。"局所的な最小値" は、同じ強度値 t をもつ連結ピクセルで、強度値が t より大きいピクセルで囲まれています。

J = imhmin(I,H,conn) は、I 内の局所的な最小値を識別するのに使用される連結性の値も指定します。

すべて折りたたむ

10×10 のサンプル イメージを作成します。より大きい強度値で囲まれた連結ピクセルの領域をそれぞれ含む、3 つの局所的な最小値を追加します。

a = 10*ones(10,10);
a(2:4,2:4) = 7;  
a(6:8,6:8) = 2;
a(1:3,7:9) = 13;
a(2,8) = 10;

次のイメージは、ピクセル値をグレースケールで表したものです。各最小値の深さは、周囲のピクセル値によって決まります。

Grayscale representation of the original pixel values, with callouts labeling the depth of each minimum as 3, 3, and 8.

局所的な最小値の深さを最大で 4 だけ小さくする H-minima 変換を適用します。

h = 4;
b = imhmin(a,h);

次のイメージは、変換後のイメージをグレースケールで表したものです。この変換は、最小値の 2 つを完全に抑制します。この変換は、最も深い最小値を部分的に抑制し、その最小値のピクセルの強度値に 4 を加算します。

Grayscale representation of the transformed pixel values

watershed セグメント化の際に、浅い局所的な最小値を抑制することでオーバーセグメンテーションを防ぐことができます。

セグメント化する梨の RGB イメージを読み込んで表示します。イメージをグレースケールに変換して表示します。各梨の中心部にある明るい部分は、局所的な最大値に対応しています。

RGB = imread("pears.png");
I = im2gray(RGB);
imshow(I)

watershed セグメント化では、このイメージは流域の稜線と集水域から成る地表面に似ています。地表面に水が流れ込むと、その水は集水域に蓄えられます。グレースケール イメージでは、局所的な最小値が集水域に相当します。梨をセグメント化するには、梨の中心部が局所的な最小値となるように、イメージを反転させます。

Icomp = imcomplement(I);
imshow(Icomp)

反転したイメージを 3 次元表面として表示します。このとき、各ピクセルの 3 番目の次元が強度値となります。各梨の深い領域の底はスパイク状になっています。これは、水が蓄えられる集水域のように、数多くの浅い局所的な最小値を表しています。

surf(Icomp,EdgeColor="none")
colormap(gray)

フィルター処理されていないイメージをセグメント化し、その結果をラベルとして元のイメージに重ね合わせて表示します。このイメージは細かくセグメント化されすぎています。これは、各梨に 1 つのマスクが割り当てられているのではなく、数多くの小さなマスクが存在することを意味しています。

L = watershed(Icomp);
overlay = labeloverlay(I,L);
imshow(overlay)

H-minima 変換を適用し、浅い最小値を抑制します。h の値は試行錯誤で決定されています。この値を変更し、h の値がセグメント化の結果に与える影響を確認してください。

h = 30;
Ifilt = imhmin(Icomp,h);

フィルター処理されたイメージを 3 次元表面として表示します。

surf(Ifilt,EdgeColor="none")
colormap(gray)

フィルター処理されたイメージをセグメント化し、その結果を表示します。このイメージでは、前景にある各梨に概ね 1 つのマスクが割り当てられています。

Lfilt = watershed(Ifilt);
overlayfilt = labeloverlay(I,Lfilt);
imshow(overlayfilt)

入力引数

すべて折りたたむ

入力イメージは、任意の次元の数値配列として指定します。

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

H-minima 変換。非負のスカラーとして指定します。

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

ピクセルの連結性。次の表のいずれかの値を指定します。既定の連結性は 2 次元イメージでは 8、3 次元イメージでは 26 です。

意味

2 次元連結性

4

ピクセルのエッジの部分が接触している場合、ピクセルは連結されます。ピクセルの近傍は水平方向または垂直方向に隣接するピクセルです。

3-by-3 pixel neighborhood with four pixels connected to the center pixel

現在のピクセルを灰色で示します。

8

ピクセルのエッジまたはコーナーが接触している場合、ピクセルは連結されます。ピクセルの近傍は水平方向、垂直方向または対角方向に隣接するピクセルです。

3-by-3 pixel neighborhood with 8 pixels connected to the center pixel

現在のピクセルを灰色で示します。

3 次元連結性

6

面が接触している場合、ピクセルは連結されます。ピクセルの近傍は次のように隣接するピクセルです。

  • 次のいずれかの方向: 奥、手前、左、右、上および下

3-by-3-by-3 pixel neighborhood with 6 pixels connected to the faces of the center pixel

現在のピクセルを灰色で示します。

18

面またはエッジが接触している場合、ピクセルは連結されます。ピクセルの近傍は次のように隣接するピクセルです。

  • 次のいずれかの方向: 奥、手前、左、右、上および下

  • 右下または上の奥など、2 つの方向の組み合わせ

3-by-3-by-3 pixel neighborhood with 6 pixels connected to the faces and 12 pixels connected to the edges of the center pixel

現在のピクセルは立方体の中心です。

26

面、エッジまたはコーナーが接触している場合、ピクセルは連結されます。ピクセルの近傍は次のように隣接するピクセルです。

  • 次のいずれかの方向: 奥、手前、左、右、上および下

  • 右下または上の奥など、2 つの方向の組み合わせ

  • 右上の奥または左下の奥など、3 つの方向の組み合わせ

3-by-3-by-3 pixel neighborhood with 6 pixels connected to the faces, 12 pixels connected to the edges, and 8 pixels connected to the corners of the center pixel

現在のピクセルは立方体の中心です。

高次元の場合、imhmin は既定値 conndef(ndims(I),"maximal") を使用します。

連結性は、01 から成る 3 × 3 × ... × 3 行列を指定し、任意の次元に対してより一般的に定義することもできます。1 の値を持つ要素は、conn の中心要素に対する近傍の位置を定義します。conn は、その中心要素に関して対称でなければなりません。詳細については、カスタム連結性の定義を参照してください。

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

出力引数

すべて折りたたむ

変換されたイメージ。サイズとデータ型が I と同じ数値配列として返されます。

参照

[1] Soille, P. Morphological Image Analysis: Principles and Applications. Springer-Verlag, 1999, pp. 170-171.

拡張機能

バージョン履歴

R2006a より前に導入