非対称ガウス フィルターカーネルを使用して、MATLAB を使用して画像を滑らかにしたいと考えています。これは、垂直方向と水平方向で同じ滑らかさを必要としないためです (ガウス モードのサイズと標準偏差が異なります)。しかし、この仕事をするためのシステム関数が見つかりません。機能fspecial()
はこれをサポートしていないようです。
では、このフィルターをどのように実装できますか?
どうもありがとう。
非対称ガウス フィルターカーネルを使用して、MATLAB を使用して画像を滑らかにしたいと考えています。これは、垂直方向と水平方向で同じ滑らかさを必要としないためです (ガウス モードのサイズと標準偏差が異なります)。しかし、この仕事をするためのシステム関数が見つかりません。機能fspecial()
はこれをサポートしていないようです。
では、このフィルターをどのように実装できますか?
どうもありがとう。
水平フィルタリングと垂直フィルタリングを別々に適用できます。
v = fspecial( 'gaussian', [11 1], 5 ); % vertical filter
h = fspecial( 'gaussian', [1 5], 2 ); % horizontal
img = imfilter( imfilter( img, h, 'symmetric' ), v, 'symmetric' );
さらに、外積を使用して2つのフィルターを「構成」できます
f = v * h; % this is NOT a dot product - this returns a matrix!
img = imfilter( img, f, 'symmetric' );
PS
方向性フィルタリングを探している場合は、検討することをお勧めしますfspecial('motion'...)
fspecial
たとえば、ひねりを加えて使用できます。
H= fspecial('gaussian',15,2) ;
H2=imresize(H,[1.5*size(H,1) size(H,2)]);
Img=conv2(Img,H2,'same');
フィルターを使用imresize
すると、ガウスの x 軸と y 軸の非対称性を制御できます。imtransform
同様に、スキュー ストレッチなどを想像できる 任意のタイプの画像変換 (「 」を参照) を使用できます。
ボックス フィルターを複数回適用することで、ガウス フィルターを近似できます。ガウスは分離可能であるため、これを両方の次元で別々に行うことができます。1 次元のボックス フィルターは、ピクセルの線形セグメントの単純な平均です。私はmatlabについて何も知りませんが、これができると思います。matlab が長方形フィルターを実行できる場合は、それを分離する必要さえありません。
ガウス近似の詳細については、http://nghiaho.com/?p=1159を参照してください。