非对称高斯滤波器

Xia*_*Jun 4 matlab filtering image-processing gaussian convolution

我现在想使用非对称高斯滤波器内核来使用matlab平滑图像,因为我不希望在垂直和水平方面具有相同的平滑度(具有不同的高斯模式大小和不同的标准偏差).但我找不到一个系统功能来完成这项工作.似乎函数fspecial不支持这一点.

那么,我该如何实现这个过滤器呢?

非常感谢.

Sha*_*hai 7

您可以单独应用水平和垂直过滤.

v = fspecial( 'gaussian', [11 1], 5 ); % vertical filter
h = fspecial( 'gaussian', [1 5], 2 ); % horizontal
img = imfilter( imfilter( img, h, 'symmetric' ), v, 'symmetric' );
Run Code Online (Sandbox Code Playgroud)

此外,您可以使用外部产品"组合"两个过滤器

f = v * h; % this is NOT a dot product - this returns a matrix!
img = imfilter( img, f, 'symmetric' );
Run Code Online (Sandbox Code Playgroud)

PS
如果您正在寻找方向过滤,您可能需要考虑fspecial('motion'...)


bla*_*bla 5

你可以使用fspecial扭曲,例如:

 H= fspecial('gaussian',15,2) ;
 H2=imresize(H,[1.5*size(H,1) size(H,2)]);
 Img=conv2(Img,H2,'same');
Run Code Online (Sandbox Code Playgroud)

imresize在滤波器上使用允许控制高斯的x与y轴不对称性.同样,您可以使用任何类型的图像转换(请参阅imtransform),您可以想象歪斜拉伸等...