MATLAB の「ガウス」フィルターは画像をガウス カーネルで畳み込みますか? また、パラメーター hsize (フィルターのサイズ) と sigma をどのように選択しますか? 何に基づいていますか?
3 に答える
最初にfspecialでフィルターを作成し、次にimfilter(例のように多次元画像で機能します)を使用してフィルターで画像を畳み込みます。
で指定sigmaします。hsizefspecial
コード:
%%# 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)
@Jacobは、Matlab でガウス フィルターを使用する方法を既に示しているので、繰り返しません。
各方向で約 3*シグマになるようにフィルター サイズを選択します (奇数に丸めます)。したがって、フィルターはエッジでほぼゼロに減衰し、フィルター処理された画像に不連続性が生じることはありません。
シグマの選択は、何をしたいかによって大きく異なります。ガウス スムージングはローパス フィルタリングです。つまり、画像の低周波部分 (つまり、あまり変化しない部分) を維持しながら、高周波の詳細 (ノイズだけでなくエッジも) を抑制します。つまり、フィルタは、フィルタより小さいものすべてをぼかします。
たとえば、小さな特徴の検出を強化するために画像のノイズを抑制しようとしている場合は、ガウスが特徴よりもわずかに小さくなるようなシグマを選択することをお勧めします。
MATLAB R2015a 以降では、この操作を 1 ステップでより効率的に実行する新しい関数が呼び出されるため、fspecialfollowed byを使用する必要はありません (パフォーマンスの観点から推奨されます) 。imfilterimgaussfilt
基本的な構文:
B = imgaussfilt(A,sigma)Aで指定された標準偏差を持つ 2 次元ガウス平滑化カーネルでイメージをフィルター処理しますsigma。
特定のガウス標準偏差 ( ) に対するフィルターのサイズはsigam自動的に選択されますが、手動で指定することもできます。
B = imgaussfilt(A,sigma,'FilterSize',[3 3]);
デフォルトは です2*ceil(2*sigma)+1。
の追加機能として、imgaussfilterを操作する機能gpuArray、周波数または空間ドメインでのフィルタリング、および高度な画像パディング オプションがあります。それはIPPによく似ています...うーん。さらに、 と呼ばれる 3D バージョンもありimgaussfilt3ます。