2011-08-09 21 views
5

私はn次元ベクトル(1xnデータセットであり、画像データではありません)を持っています。それにガウスフィルタを適用したいと思います。私にはImage Processing Toolkitとその他のものがあります(リストが必要かどうか質問してください)。Matlabのベクトル上のガウスフィルタ

おそらく私は[1 n]のようなfspecial関数のhsizeパラメータを作ることができます。 imfilterを使用して、それを次のステップとしてベクターに適用することができますか、それとも別のものを使用する必要がありますか?

私は、Matlabの2次元画像データにガウスフィルタを適用する方法の例をかなり見てきましたが、Matlabにはプラットフォームとして比較的新しいので、例が本当に良いでしょう。

注:現時点でMatlabがインストールされていないマシンでは何も起こらないのですが、そうでなければ最初に試してみましたが、問題に遭遇したかどうかを尋ねてきましたfspecialおよびimfilter

答えて

15

自分でガウスフィルタを作成してみませんか?あなたはfspecial(またはガウスの任意の他の定義)に式を見ることができます。

sigma = 5; 
sz = 30; % length of gaussFilter vector 
x = linspace(-sz/2, sz/2, sz); 
gaussFilter = exp(-x .^ 2/(2 * sigma^2)); 
gaussFilter = gaussFilter/sum (gaussFilter); % normalize 

、あなたがfilterを使用することができ、それを適用するために:

y = rand(500,1); 
yfilt = filter (gaussFilter,1, y); 

とフィルタを忘れないでくださいフィルタリングされた信号が入力信号と比較してシフトされることを意味する待ち時間を有する。まあ、私は本当に、他の場合には私自身の機能を記述する必要が表示されない

yfilt = conv (y, gaussFilter, 'same'); 
+2

:このフィルタは対称であるので、あなたはconv代わりのfilterを使用して非シフトされた出力を取得し、sameオプションを使用することができます既存の関数も同様に機能しますが、フィルタを自分で作成すると問題は解決します。ありがとう。ちなみに、サイズは一般的にシグマ値の6(プラスマイナス3)倍であると信じていますか? –

+1

これは本当にアプリケーションに依存しますが、フィルタを切り捨てることは重要な効果がありません(テールは+ - 無限に0になるので、有限の長さに切り捨てる必要がありますフィルタ)。そう、はい、各サイドに4つ以上のシグマを付けるとそれが保証されます。 –

+2

もちろん、特にコストのかかるツールボックスの一部である場合は、独自の関数を記述する必要があります。あなたの会社や大学でMatlab Image Toolboxライセンスの数が有限であればどうなりますか?それは起こる! – Wok

関連する問題