用于在Matlab中平滑图像的均值滤波器

时间:2009-11-15 16:12:17

标签: matlab image-processing filtering

我需要在Matlab中测试一些基本的图像处理技术。我需要测试和比较两种类型的滤波器:均值滤波器和中值滤波器。

为了使用中值滤波来平滑图像,图像处理工具箱中有一个很棒的函数medfilt2。平均滤波器有类似的功能吗?或者如何使用filter2函数创建均值过滤器?

对我来说最重要的事情之一是有可能设置过滤器的半径。即对于中值滤波器,如果我想要[3 x 3]半径(掩码),我只需要使用

imSmoothed = medfilt2(img, [3 3]);

我想为平均过滤器实现类似的东西。

5 个答案:

答案 0 :(得分:28)

h = fspecial('average', n);
filter2(h, img);

请参阅doc fspecialh = fspecial('average', n)返回平均过滤器。 n是一个1 x 2的向量,用于指定h中的行数和列数。

答案 1 :(得分:6)

我看到已经给出了很好的答案,但我认为在没有特殊功能或工具箱的情况下,给出一种在MATLAB中执行均值滤波的方法可能会很好。这也非常有助于准确理解该过程如何工作,因为您需要显式设置卷积内核。幸运的是,平均滤波器内核非常简单:

I = imread(...)
kernel = ones(3, 3) / 9; % 3x3 mean kernel
J = conv2(I, kernel, 'same'); % Convolve keeping size of I

请注意,对于彩色图像,您必须将其应用于图像中的每个通道。

答案 2 :(得分:5)

I = imread('peppers.png');
H = fspecial('average', [5 5]);
I = imfilter(I, H);
imshow(I)

请注意,可以使用filter2将滤镜应用于强度图像(2D矩阵),而使用多维图像(RGB图像或3D矩阵)imfilter

同样在英特尔处理器上,imfilter可以使用英特尔集成性能基元(IPP)库来加速执行。

答案 3 :(得分:2)

并且通过变换域中的乘法来定义卷积:

conv2(x,y) = fftshift(ifft2(fft2(x).*fft2(y)))

如果考虑一个频道......对于更多频道,必须在每个频道完成

答案 4 :(得分:0)

f=imread(...);

h=fspecial('average', [3 3]);
g= imfilter(f, h);
imshow(g);