このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
imfilter
多次元イメージの N 次元フィルター処理
説明
例
フィルターの作成と適用
カラー イメージをワークスペースに読み取って表示します。
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 と畳み込みを使用したイメージのフィルター処理
既定では、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
入力引数
A
— フィルター処理されるイメージ
数値配列
フィルター処理されるイメージ。次元の数値配列として指定します。
データ型: single
| double
| int8
| int16
| int32
| uint8
| uint16
| uint32
| logical
h
— 多次元フィルター
データ型 double
の N 次元配列
多次元フィルターであり、データ型 double
の N 次元配列として指定されます。
データ型: double
options
— フィルタリング演算を制御するオプション
文字ベクトル | string スカラー | 数値スカラー
フィルタリング演算を制御するオプション。文字ベクトル、string スカラーまたは数値スカラーとして指定します。サポートされているすべてのオプションは、次の表のとおりです。
境界オプション
オプション | 説明 |
---|---|
パディング オプション | |
数値スカラー | 配列の境界の外に位置する入力配列の値は、値 |
| 配列の境界の外に位置する入力配列値を計算するには、配列の境界をまたぐ配列の鏡像を使用します。 |
| 配列の境界の外に位置する入力配列値は、最近傍の配列境界値と等しいと仮定します。 |
| 配列の境界の外に位置する入力配列値は、入力配列が周期的であると暗黙的に仮定します。 |
出力サイズ | |
| 出力配列は、入力配列と同じサイズです。これは、出力サイズ オプションが指定されていない場合の既定の動作です。 |
| 出力配列は、すべてのフィルターを適用した結果です。そのため、入力配列より大きくなります。 |
相関と畳み込みのオプション | |
|
|
|
|
ヒント
この関数は、
uint8
、uint16
、int16
、single
および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]
によるフィルター処理と同一の結果が得られます。
拡張機能
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
使用上の注意および制限:
imfilter
では C コードの生成がサポートされています (MATLAB® Coder™ が必要)。汎用のMATLAB Host Computer
ターゲット プラットフォームを選択した場合、プリコンパイルされたプラットフォーム固有の共有ライブラリを使用するコードが、imfilter
によって生成されます。共有ライブラリを使用するとパフォーマンスの最適化は維持されますが、コードを生成できるターゲット プラットフォームが限定されます。詳細については、Image Processing Toolbox でサポートされているコード生成のタイプを参照してください。コードを生成する際、入力イメージ
A
は 2 次元または 3 次元でなければなりません。入力引数options
の値は、コンパイル時の定数でなければなりません。大きなカーネル
h
、大きな値を含むカーネル、または大きな値を含むイメージを指定すると、MATLAB と生成コードの間で浮動小数点データ型の結果が異なることがあります。これは、異なるアルゴリズムの実装による累積誤差が原因で発生します。
GPU コード生成
GPU Coder™ を使用して NVIDIA® GPU のための CUDA® コードを生成します。
使用上の注意および制限:
コードを生成する際、入力イメージ
A
は 2 次元または 3 次元でなければなりません。入力引数options
の値は、コンパイル時の定数でなければなりません。大きなカーネル
h
、大きな値を含むカーネル、または大きな値を含むイメージを指定すると、MATLAB と生成コードの間で浮動小数点データ型の結果が異なることがあります。これは、異なるアルゴリズムの実装による累積誤差が原因で発生します。CUDA® ツールキット v9.0 では、NVIDIA® 最適化のバグが原因で、生成コードと MATLAB の結果間で数値の不一致が発生します。回避方法として、コードを生成する前に次のフラグを構成オブジェクト (
cfg
) に渡すことで最適化をオフにします。cfg.GpuConfig.CompilerFlags = ‘-Xptxas -O0’
NVIDIA は、CUDA ツールキット v9.1 でこのバグを修正すると予想されます。
スレッドベースの環境
MATLAB® の backgroundPool
を使用してバックグラウンドでコードを実行するか、Parallel Computing Toolbox™ の ThreadPool
を使用してコードを高速化します。
この関数は、スレッドベースの環境を完全にサポートします。詳細については、スレッドベースの環境での MATLAB 関数の実行を参照してください。
GPU 配列
Parallel Computing Toolbox™ を使用してグラフィックス処理装置 (GPU) 上で実行することにより、コードを高速化します。
使用上の注意および制限:
フィルター処理カーネル
h
は、データ型がdouble
のベクトルまたは 2 次元行列でなければなりません。GPU を使用してイメージをフィルター処理する場合、
imfilter
では、A
のデータ型に応じて単精度と倍精度いずれかの浮動小数点を使用して、各出力ピクセルの値を計算します。A
に倍精度値またはuint32
値が含まれている場合、imfilter
では倍精度値を使用します。他のすべてのデータ型に対しては、imfilter
は単精度を使用します。A
が整数配列または logical 配列の場合、imfilter
は指定された型の範囲を超える出力要素を切り捨て、小数部の値を丸めます。
詳細については、GPU でのイメージ処理を参照してください。
バージョン履歴
R2006a より前に導入R2022b: スレッドベース環境のサポート
imfilter
は、スレッドベースの環境をサポートするようになりました。
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)