2 次元データをイメージとみなすことができ、フィルタリングを行う関数を用いてノイズを除去および平滑化を行うことができます。
1. Image Processing Toolbox の 関数 medfilt2 を用いて 2 次元のメディアンフィルタリングを行うことが可能です。
B=medfilt2(A, [m n], padopt)
は、行列 A に2次元のメディアンフィルタリングを実行します。各出力ピクセルには、入力イメージの対応するピクセル周囲の M 行 N 列の近傍の中央値を設定します。'padopt' は、どのように行列の境界を付加するかを制御します。A の境界で対称的に拡張したい場合、'symmetric' と指定してください。関数 medfilt2 の詳細情報を、MATLAB コマンドプロンプトより以下のコマンドを実行でご参照いただけます。
web([docroot '/toolbox/images/medfilt2.html'])
2. MATLAB 関数 filter2 を用いてもフィルタリングを行うことが可能です。
は、2 次元 FIR フィルタ行列 h を使って、X 内のデータをフィルタリングします。結果の Y として、'shape' で指定されるサイズで、2次元コンボリューションによって計算される値が出力されます。ゼロを加えずに計算されたコンボリューションの結果のみを出力したい場合、'shape' パラメーターとして 'valid' を指定してください。この場合、。size(Y) < size(X) となります。関数 filter2 の詳細情報を、MATLAB コマンドプロンプトより以下のコマンドを実行でご参照いただけます。
web([docroot '/techdoc/ref/filter2.html'])
関数 filter2 を適用するため、フィルタ 'h' を指定することが必要です。このフィルタは例えば Image Processing Toolbox の fspecial 関数を用いて生成することができます。
h = fspecial(type, parameters)
は、指定した 'type' の 2 次元フィルタ h を作成します。'type' に依存して、fspecial は、設定できる付加的なパラメータを使用することができます(これらのパラメータには、すべてデフォルト値が用意されています)。関数 fspecial の詳細情報を、MATLAB コマンドプロンプトより以下のコマンドを実行でご参照いただけます。
web([docroot '/toolbox/images/fspecial.html'])
具体的には以下の例をお試しください。
dfpos = get(0,'DefaultFigurePosition');
figure('Position',dfpos([1 2 3 4]).*[1 1 1.5 1]);
ZN_smooth1=medfilt2(ZN, [15 15],'symmetric');
subplot(1,2,1);
surf(ZN_smooth1);
title('Peaks Surface (2-D median filter applied)')
h = fspecial('average', [10 10]);
ZN_smooth2=filter2(h,ZN,'valid');
subplot(1,2,2);
surf(ZN_smooth2);
title('Peaks Surface(2-D digital averaging filter applied)')