web-dev-qa-db-ja.com

MATLABのガウスフィルター

MATLABの「ガウス」フィルターは、画像をガウスカーネルと畳み込みますか?また、パラメーターhsize(フィルターのサイズ)とシグマをどのように選択しますか?何に基づいていますか?

30
md86

最初に fspecial を使用してフィルターを作成し、次に imfilter (例のように多次元画像で機能します)。

sigmahsizefspecialを指定します。

コード:

%%# Read an image
I = imread('peppers.png');
%# Create the gaussian filter with hsize = [5 5] and sigma = 2
G = fspecial('gaussian',[5 5],2);
%# Filter it
Ig = imfilter(I,G,'same');
%# Display
imshow(Ig)
55
Jacob

@ Jacob は、Matlabでガウスフィルターを使用する方法を既に示しているので、繰り返しません。

フィルターサイズは、各方向で約3 * sigmaに選択します(奇数の整数に丸めます)。したがって、フィルターはエッジでほぼゼロに減衰し、フィルター処理された画像に不連続性は生じません。

シグマの選択は、何をしたいかによって大きく異なります。ガウス平滑化はローパスフィルター処理です。つまり、画像の低周波部分(それほど変化しない部分)を維持しながら、高周波の詳細(ノイズだけでなくエッジ)を抑制します。つまり、フィルターは、フィルターよりも小さいものすべてをぼかします。

たとえば、小さな特徴の検出を強化するために画像のノイズを抑制したい場合、ガウスを特徴よりもわずかに小さくするシグマを選択することをお勧めします。

21
Jonas

MATLAB R2015a以降では、この操作を実行する fspecial という新しい関数があるため、imfilterの後にimgaussfiltを使用する必要はなくなりました(またはパフォーマンスの観点から推奨されます)ワンステップ、より効率的に。

基本的な構文:

B = imgaussfilt(A,sigma)は、Aで指定された標準偏差の2次元ガウス平滑化カーネルを使用して、イメージsigmaをフィルター処理します。

指定されたガウス標準偏差(sigam)のフィルターのサイズは自動的に選択されますが、手動で指定することもできます。

_B = imgaussfilt(A,sigma,'FilterSize',[3 3]);
_

デフォルトは2*ceil(2*sigma)+1です。

imgaussfilterの追加機能は、gpuArraysを操作する機能、周波数または空間ドメインでのフィルタリング、高度な画像パディングオプションです。 IPPによく似ています...うーん。さらに、 _imgaussfilt3_ と呼ばれる3Dバージョンがあります。

14
chappjc