ドキュメンテーション

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

imfilter

多次元イメージの N 次元フィルター処理

説明

B = imfilter(A,h) は、多次元フィルター h を使用して多次元配列 A をフィルター処理し、結果を B に返します。

オプションで、2 次元フィルターを用いた多次元配列のフィルター処理を GPU を使用して実行できます (Parallel Computing Toolbox™ が必要)。詳細は、GPU での画像処理を参照

B = imfilter(A,h,options,...) は、指定した 1 つ以上のオプションに従って、多次元フィルター処理を行います。

すべて折りたたむ

カラー イメージをワークスペースに読み取って表示します。

originalRGB = imread('peppers.png');
imshow(originalRGB)

関数 fspecial を使用して動きによるブレのフィルターを作成します。

h = fspecial('motion', 50, 45);

フィルターを元のイメージに適用し、動きによるブレがあるイメージを作成します。imfilter は、入力イメージ配列と同じデータ型の配列を出力するため、他のフィルター関数よりも、メモリ効率に優れています。この例では、出力は uint8 の配列です。

filteredRGB = imfilter(originalRGB, h);
figure, imshow(filteredRGB)

次に、replicate 境界オプションを指定して、イメージを再びフィルター処理します。

boundaryReplicateRGB = imfilter(originalRGB, h, 'replicate');
figure, imshow(boundaryReplicateRGB)

既定では、imfilter は相関を使用しますが、これはツールボックスのフィルター設計関数が相関カーネルを作成するためです。オプション パラメーターを使用し、畳み込みを使用します。

サンプル行列を作成します。

A = magic(5)
A = 5×5

    17    24     1     8    15
    23     5     7    14    16
     4     6    13    20    22
    10    12    19    21     3
    11    18    25     2     9

フィルターを作成します。

h = [-1 0 1];

既定の相関を使用してフィルター処理します。

imfilter(A,h)
ans = 5×5

    24   -16   -16    14    -8
     5   -16     9     9   -14
     6     9    14     9   -20
    12     9     9   -16   -21
    18    14   -16   -16    -2

畳み込みを使用してフィルター処理し、オプション パラメーターで imfilter を使用します。

imfilter(A,h,'conv')
ans = 5×5

   -24    16    16   -14     8
    -5    16    -9    -9    14
    -6    -9   -14    -9    20
   -12    -9    -9    16    21
   -18   -14    16    16     2

この例では、imfilter の出力は、入力が double クラスの場合、負の値をもちます。負の値を避けるには、イメージを異なるデータ型に変換してから、imfilter を呼び出します。たとえば、入力型が uint8 であるとき、imfilter は出力値を 0 に切り捨てます。イメージを符号付き整数型に変換するのが適切な場合があります。

A = magic(5)
A = 5×5

    17    24     1     8    15
    23     5     7    14    16
     4     6    13    20    22
    10    12    19    21     3
    11    18    25     2     9

イメージを imfilter でフィルター処理します。

h = [-1 0 1];
imfilter(A,h)
ans = 5×5

    24   -16   -16    14    -8
     5   -16     9     9   -14
     6     9    14     9   -20
    12     9     9   -16   -21
    18    14   -16   -16    -2

結果が負の値になっていることに注意してください。出力イメージで負の値を避けるには、入力イメージを uint8 に変換してから、フィルター処理を実行します。imfilter への入力が uint8 クラスであるため、出力も uint8 クラスとなり、imfilter は負の値を 0 に切り捨てます。

A = uint8(magic(5));
imfilter(A,h)
ans = 5x5 uint8 matrix

   24    0    0   14    0
    5    0    9    9    0
    6    9   14    9    0
   12    9    9    0    0
   18   14    0    0    0

入力引数

すべて折りたたむ

フィルター処理されるイメージ。次元の数値配列として指定します。

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

多次元フィルターであり、データ型 double の N 次元配列として指定されます。

データ型: double

フィルター処理を制御するオプション。文字ベクトル、string スカラーまたは数値スカラーとして指定します。サポートされているすべてのオプションは、次の表のとおりです。

境界オプション

オプション

説明

パディング オプション

数値スカラー X

配列の境界の外に位置する入力配列の値は、値 X に割り当てられます。パディング オプションを指定しない場合、既定値は 0 となります。

'symmetric'

配列の境界の外に位置する入力配列値を計算するには、配列の境界をまたぐ配列の鏡像を使用します。

'replicate'

配列の境界の外に位置する入力配列値は、最近傍の配列境界値と等しいと仮定します。

'circular'

配列の境界の外に位置する入力配列値は、入力配列が周期的であると暗黙的に仮定します。

出力サイズ

'same'

出力配列は、入力配列と同じサイズです。これは、出力サイズ オプションが指定されていない場合の既定の動作です。

'full'

出力配列は、すべてのフィルターを適用した結果です。そのため、入力配列より大きくなります。

相関と畳み込みのオプション

'corr'

imfilter は、相関を使用して、多次元フィルター処理を実行します。これは、filter2 がフィルター処理を実行する場合と同じ方法です。相関オプションまたは畳み込み オプションが指定されない場合、imfilter は相関を使用します。

'conv'

imfilter は、畳み込みを使用して、多次元フィルター処理を実行します。

出力引数

すべて折りたたむ

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

ヒント

  • この関数は、uint8uint16int16single および double の各データ型に対し、ハードウェアの最適化を利用してより速やかな実行ができます。

アルゴリズム

  • 関数 imfilter は倍精度浮動小数点を使用して、各出力ピクセルの値を計算します。結果がデータ型の範囲を超えると、imfilter は結果をデータ型で許可されている範囲になるように切り捨てます。整数データ型の場合、imfilter は小数値を丸めます。

  • サイズが偶数のカーネル h を指定する場合、カーネルの中心は floor((size(h) + 1)/2) です。

    たとえば、4 要素フィルター [0.25 0.75 -0.75 -0.25] の中心は、2 番目の要素 0.75 です。このフィルターでは、5 要素フィルター [0 0.25 0.75 -0.75 -0.25] によるフィルター処理と同一の結果が得られます。

拡張機能

R2006a より前に導入