Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

modefilt

2 次元および 3 次元モードのフィルター処理

R2020a 以降

説明

B = modefilt(A) は、2 次元イメージまたは 3 次元ボリューム A にモードのフィルター処理を行います。B の各出力ピクセルは、A における対応するピクセルの近傍のモード (最も頻繁に現れる値) を含んでいます。modefilt は、境界要素をミラーリングすることにより、A をパディングします。

モード フィルター処理は、他のタイプのフィルター処理 (メディアン フィルター処理など) が使用できない categorical データを処理するために役立ちます。

B = modefilt(A,filtSize) は、フィルター近傍のサイズも指定します。

B = modefilt(___,padopt) は、modefilt による配列の境界のパディング方法も指定します。

すべて折りたたむ

イメージ (img) とそれに対応するカテゴリカル ラベル付きバージョンのイメージ (label) をワークスペースに読み込みます。

load buildingPixelLabeled;

元のイメージ img を表示します。

imshow(img)

Figure contains an axes object. The axes object contains an object of type image.

カテゴリカル ラベル付きイメージ label を表示します。カテゴリカル イメージは、空、草、建物、歩道という 4 つに分かれたカテゴリにラベル付けしています。表示するときは、関数 label2rgb を使用して、これらのカテゴリを色に変換します。

imshow(label2rgb(label))

Figure contains an axes object. The axes object contains an object of type image.

既定のフィルター サイズとパディング方法を使用して、カテゴリカル ラベル付きイメージ label にモードのフィルター処理を行います。

 b = modefilt(label);

フィルター処理されたカテゴリカル ラベル付きイメージ b を表示します。フィルター処理されたイメージでは、ラベル付けされた領域間のエッジが識別しやすくなっています。

 figure
 imshow(label2rgb(b));

Figure contains an axes object. The axes object contains an object of type image.

脳 MRI のグレースケール イメージおよび対応するラベルを読み取ります。イメージはワークスペース変数 vol に読み込まれ、ラベルはワークスペース変数 label に読み込まれます。

dataDir = fullfile(toolboxdir("images"),"imdata","BrainMRILabeled");
load(fullfile(dataDir,"images","vol_001.mat"));
load(fullfile(dataDir,"labels","label_001.mat"));

ラベル付きボリュームを表示します。

viewer1 = viewer3d(BackgroundColor="white",BackgroundGradient="off",CameraZoom=1.5);
vol1 = volshow(vol,OverlayData=label,Parent=viewer1, ...
    RenderingStyle="GradientOpacity",GradientOpacityValue=0.8, ...
    Alphamap=linspace(0,0.2,256),OverlayAlphamap=0.8);

フィルターのサイズを指定して、ラベルにモードのフィルター処理を行います。

labelFiltered = modefilt(label,[5 5 5]);

フィルター処理されたラベル付きボリュームを表示します。

viewer2 = viewer3d(BackgroundColor="white",BackgroundGradient="off",CameraZoom=1.5);
vol2 = volshow(vol,OverlayData=labelFiltered,Parent=viewer2, ...
    RenderingStyle="GradientOpacity",GradientOpacityValue=0.8, ...
    Alphamap=linspace(0,0.2,256),OverlayAlphamap=0.8);

入力引数

すべて折りたたむ

2 次元イメージまたは 3 次元ボリューム。categorical 配列、logical 配列、または数値配列として指定します。

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

フィルター サイズ。正の奇数の整数のベクトルとして指定します。2 次元イメージの場合、[height width] 形式のベクトルを指定します。2 次元イメージの既定の設定は [3 3] です。3 次元ボリュームの場合、[height width depth] 形式のベクトルを指定します。3 次元ボリュームの既定の設定は [3 3 3] です。

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

パディング方法。次のいずれかの値を指定します。

説明
"symmetric"配列自体の鏡像で配列をパディングします。
"replicate"境界の要素を繰り返すことによって配列をパディングします。
"zeros"数値データの場合は 0、categorical データの場合は <undefined> で、配列をパディングします。

データ型: char | string

出力引数

すべて折りたたむ

フィルター処理されたイメージまたはボリューム。入力イメージ A と同じサイズとクラスの数値配列として返されます。

ヒント

  • モード値について同順位のピクセルが近傍に複数ある場合、この関数は次のタイブレーク アルゴリズムを使用します。

    • 中心ピクセルが同順位のモード値の 1 つである場合、この関数はこの値を使用します。

    • 中心ピクセルが同順位のモード値の 1 つではない場合、この関数は最も数値の小さいモードを使用します。

    • カテゴリカル入力の場合、この関数は、categories(A) によって返されたリストにある 1 番目のカテゴリを (モードと同順位のカテゴリの中で) 選択します。

  • modefilt は RGB イメージを 3 次元ボリュームとして扱います。RGB イメージのチャネル単位のフィルター処理を行うには、filtSize[3 3 1] として指定します。たとえば、b = modefilt(a,[3 3 1]); のようなコードになります。

拡張機能

バージョン履歴

R2020a で導入

すべて展開する