ドキュメンテーション

このページは前リリースの情報です。該当の英語のページはこのリリースで変更されています。最新情報を確認するには、ページ左下にある国リストで [United States] を選択し、英語ドキュメンテーションに切り替えてください。

medfilt2

2 次元のメディアン フィルター処理

構文

B = medfilt2(A, [m n])
B = medfilt2(A)
gpuarrayB = medfilt2(gpuarrayA,___)
B = medfilt2(A,'indexed',___)
B = medfilt2(..., padopt)

説明

B = medfilt2(A, [m n]) は、行列 A に 2 次元のメディアン フィルター処理を適用します。各出力ピクセルには、入力イメージにおける対応するピクセルの周囲の mn 列の近傍の中央値が含まれています。medfilt2 ではイメージのエッジが 0 でパディングされるため、エッジから近傍の幅の 2 分の 1 ([m n]/2) の範囲にある点の中央値は歪んで見える可能性があります。

メディアン フィルター処理は、"ごま塩" ノイズを低減させるために画像処理の中でよく使われる非線形フィルター処理です。メディアン フィルターは、ノイズを低減し、かつエッジを保存することを目的とするとき、たたみ込みよりも、より効果的です。

この関数はコード生成をサポートしています (ヒントを参照してください)。

B = medfilt2(A) は、既定の 3 行 3 列の近傍を使って行列 A にメディアン フィルター処理を行います。

gpuarrayB = medfilt2(gpuarrayA,___) は、GPU でフィルター処理を実行します。入力イメージと出力イメージは gpuArray です。gpuArray を使用する場合、medfilt2 では辺の長さが 3 ~ 15 の奇数となる正方形の近傍のみがサポートされます。この構文を使用するには Parallel Computing Toolbox™ が必要です。

B = medfilt2(A,'indexed',___) はインデックス付きイメージ A のメディアン フィルター処理を実行し、A のクラスが uint8 の場合は 0 で、Adouble の場合は 1 でパディングを行います。

B = medfilt2(..., padopt) は行列の境界のパディング方法を制御します。padopt には次の表にあげるテキスト文字列のいずれかを使用できます。

説明
'zeros'0 でパディングします。これは既定の設定です。
'symmetric'境界で対称的に拡張します。
'indexed'A のクラスが double の場合は 1 で、その他の場合は 0 でパディングします。

クラス サポート

入力イメージ A のクラスは logical または numeric です。出力イメージ BA と同じクラスです。

入力 gpuArray イメージ gpuarrayA のクラスは logical または数値です。出力 gpuArray イメージ gpuarrayBgpuarrayA と同じクラスです。

    メモ:   性能に関する詳細は、「ordfilt2」を参照してください。

イメージからごま塩ノイズを除去します。

I = imread('eight.tif');
J = imnoise(I,'salt & pepper',0.02);
K = medfilt2(J);
imshow(J), figure, imshow(K)

GPU でイメージからごま塩ノイズを除去します。

I = gpuArray(imread('eight.tif'));
J = imnoise(I,'salt & pepper',0.02);
K = medfilt2(J);
figure, imshow(J), figure, imshow(K)

詳細

すべて折りたたむ

ヒント

  • この関数では MATLAB® Coder™ を使用した C コードの生成がサポートされています。この関数で生成されるコードでは、プリコンパイルされたプラットフォーム固有の共有ライブラリを使用します。共有ライブラリを使用するとパフォーマンスの最適化は維持されますが、コードを生成できるターゲット プラットフォームが限定されます。詳細は、「共有ライブラリを使用したコード生成」を参照してください。

    コードを生成する際、引数 padopt にはコンパイル時の定数を指定しなければなりません。

  • 入力イメージ A が、整数クラスの場合、出力値はすべて整数として返されます。近傍内のピクセル数 (たとえば m*n) が偶数の場合、中央値が整数にならない可能性があります。この場合、小数点以下が切り捨てられます。論理入力も同様に処理されます。たとえば、以下の uint8 配列内の 2 行 2 列の近傍における真の中央値は 4.5 ですが、medfilt2 は小数部を破棄し、4 を返します。

    1 5
    4 8

アルゴリズム

CPU では、medfilt2ordfilt2 を使用してフィルター処理を実行します。

参考文献

[1] Lim, Jae S., Two-Dimensional Signal and Image Processing, Englewood Cliffs, NJ, Prentice Hall, 1990, pp. 469-476.

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