ドキュメンテーション

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

imfilter

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

構文

  • B = imfilter(A,h)
  • gpuarrayB = imfilter(gpuArrayA,h)
  • ___= imfilter(___,options,...)

説明

B = imfilter(A,h) は、多次元フィルター h を使用して多次元配列 A をフィルター処理します。配列 A は、logical か、または任意のクラスと次元の非スパース数値配列です。結果 B のサイズとクラスは A と同じです。

imfilter では、倍精度浮動小数点を使用して出力 B の個々の要素を計算します。A が整数配列または論理配列の場合、imfilter は指定された型の範囲を超える出力要素を切り捨て、小数部の値を丸めます。

コード生成: imfilter は、MATLAB からのコード生成をサポートします。効率のよい、製品レベルの品質をもつ C/C++ コードを生成できます。コードを生成するとき、入力イメージ A は 2 次元または 3 次元でなければなりません。入力引数 options の値はコンパイル時の定数でなければなりません。この関数で生成されるコードでは、プリコンパイルされた、プラットフォーム固有の共有ライブラリを使用します。コード生成をサポートするツールボックス関数の詳細な一覧を確認するには、「サポートされている関数の一覧と使用上の注意事項」を参照してください。

gpuarrayB = imfilter(gpuArrayA,h) は、GPU で処理を実行します。gpuArrayAlogical または任意のクラスと次元の非スパース数値配列を含む gpuArray です。gpuArray と併用する場合、H はベクトルまたは 2 次元行列でなければなりません。この構文では Parallel Computing Toolbox™ が必要です。

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

すべて展開する

フィルターの作成と適用

ワークスペースにカラー イメージを読み取り、それを表示します。

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

元のイメージ

フィルター h を作成し、これを使用して、カメラの線形移動を近似します。

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

imfilter を使用して、フィルターをイメージ originalRGB に適用し、新しいイメージ filteredRGB を作成します。

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

フィルター処理されたイメージ

imfilter は、入力イメージ配列と同じデータ型の配列を出力するため、他のフィルター処理よりも、メモリ効率に優れています。この例では、出力は uint8 の配列です。

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

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

Replicate 境界が指定されたイメージ

フィルターの作成と GPU での適用

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

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

元のイメージ

フィルター h を作成し、これを使用して、カメラの線形移動を近似します。

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

imfilter を使用して、フィルターをイメージ originalRGB に適用し、新しいイメージ filteredRGB を作成します。イメージが gpuArray として返されます。

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

フィルター処理されたイメージ

imfilter は、入力イメージ配列と同じデータ型の配列を出力するため、他のフィルター処理よりも、メモリ効率に優れています。この例では、出力は uint8 の配列です。

whos
Name               Size               Bytes  Class       Attributes

  filteredRGB      384x512x3              108  gpuArray              
  h                 37x37               10952  double                
  originalRGB      384x512x3              108  gpuArray                    

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

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

Replicate 境界が指定されたイメージ

入力引数

すべて展開する

A — フィルター処理されるイメージ任意のクラスと次元の非スパース数値配列

フィルター処理されるイメージであり、任意のクラスと次元の非スパース数値配列として指定されます。

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

h — 多次元フィルターdouble の N 次元配列

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

データ型: double

gpuArrayA — フィルター処理されるイメージgpuArray オブジェクト

フィルター処理されるイメージ。gpuArray オブジェクトとして指定します。gpuArray と併用する場合、imfilter では、gpuArrayA のデータ型に応じて単精度と倍精度いずれかの浮動小数点を使用して、gpuarrayB を計算します。gpuArrayA に倍精度値または uint32 値が含まれている場合、imfilter では倍精度値を使用します。他のすべてのデータ型に対しては、imfilter は単精度を使用します。gpuarrayA が整数配列または論理配列の場合、imfilter は指定された型の範囲を超える出力要素を切り捨て、小数部の値を丸めます。

options — フィルター処理を制御するオプション文字列 | 数値

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

境界オプション

オプション

説明

境界オプション

X

配列の境界の外に位置する入力配列値は、暗黙的に値 X と仮定します。境界オプションを指定しない場合、既定値は 0 となります。

'symmetric'

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

'replicate'

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

'circular'

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

出力サイズ

'same'

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

'full'

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

相関とコンボリューションのオプション

'corr'

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

'conv'

imfilter は、コンボリューションを使用して、多次元フィルター処理を実行します。

出力引数

すべて展開する

B — フィルター処理されたイメージサイズとクラスが入力イメージと同じ数値配列

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

gpuarrayB — フィルター処理されたイメージgpuArray

フィルター処理されたイメージであり、クラスとサイズが gpuarrayA と同じ gpuArray として返されます。

詳細

すべて展開する

ヒント

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

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