我现在想使用非对称高斯滤波器内核通过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' );
此外,您可以使用外部产品“组成”两个过滤器
f = v * h; % this is NOT a dot product - this returns a matrix! img = imfilter( img, f, 'symmetric' );
PS如果您正在寻找定向过滤,则可能需要考虑
fspecial('motion'...)
例如,您可以将fspecial
用作扭曲:
您可以通过多次应用Box滤波器来近似高斯滤波器。由于高斯是可分离的,因此可以在两个维度上分别进行分离。一维的盒式滤波器是像素线性段上的简单平均值。我对matlab一无所知,但我想它可以做到。如果matlab可以做矩形过滤器,那么您甚至不需要将其分开。
您可以使用MATLAB的conv2()
函数,该函数支持可分离的过滤器,并且比imfilter()
还要快。