非对称高斯滤波器-水平和垂直滤波器的大小和STD不同

问题描述 投票:4回答:4

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

所以,如何实现此过滤器?

非常感谢。

matlab image-processing filtering convolution gaussian
4个回答
7
投票

您可以应用水平和垂直过滤单独地>>。

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

此外,您可以使用外部产品“组成”两个过滤器

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

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


5
投票

例如,您可以将fspecial用作扭曲:


3
投票

您可以通过多次应用Box滤波器来近似高斯滤波器。由于高斯是可分离的,因此可以在两个维度上分别进行分离。一维的盒式滤波器是像素线性段上的简单平均值。我对matlab一无所知,但我想它可以做到。如果matlab可以做矩形过滤器,那么您甚至不需要将其分开。


0
投票

您可以使用MATLAB的conv2()函数,该函数支持可分离的过滤器,并且比imfilter()还要快。

© www.soinside.com 2019 - 2024. All rights reserved.