MATLAB 7.7 (R2008b) で 2 次元データからノイズを除去することはできますか。

2 次元データからノイズを除去し、平滑化行いたいと考えています。方法を教えてください。
% set figure window size
dfpos = get(0,'DefaultFigurePosition');
figure('Position',dfpos([1 2 3 4]).*[1 1 1.5 1]);
% plot peaks surface
Z = peaks(100);
subplot(1,2,1);
surf(Z)
title('Peaks Surface (underlying data)')
% add noise to the peaks data and plot it
ZN = Z + 5*rand(100);
subplot(1,2,2);
surf(ZN)
title('Peaks Surface (noise added)')

 Accepted Answer

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 を用いてもフィルタリングを行うことが可能です。
Y = filter2(h,X,shape)
は、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'])
具体的には以下の例をお試しください。
% set figure window size
dfpos = get(0,'DefaultFigurePosition');
figure('Position',dfpos([1 2 3 4]).*[1 1 1.5 1]);
% smooth the noisy peaks data with MEDFILT2
ZN_smooth1=medfilt2(ZN, [15 15],'symmetric');
subplot(1,2,1);
surf(ZN_smooth1);
title('Peaks Surface (2-D median filter applied)')
% smooth the noisy peaks data with FILTER2
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)')

More Answers (0)

Categories

Find more on 2 次元および 3 次元プロット in Help Center and File Exchange

Tags

No tags entered yet.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!