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

Gac*_*cek 15 matlab filtering image-processing

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

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

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

imSmoothed = medfilt2(img, [3 3]);
Run Code Online (Sandbox Code Playgroud)

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

rcs*_*rcs 29

h = fspecial('average', n);
filter2(h, img);
Run Code Online (Sandbox Code Playgroud)

请参阅doc fspecial: h = fspecial('average', n)返回平均滤波器.n是一个1乘2的向量,指定行数和列数h.


Han*_*rén 7

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

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

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


Amr*_*mro 5

I = imread('peppers.png');
H = fspecial('average', [5 5]);
I = imfilter(I, H);
imshow(I)
Run Code Online (Sandbox Code Playgroud)

注意,在使用filter2多维图像(RGB图像或3D矩阵)时,imfilter可以使用滤波器应用于强度图像(2D矩阵).

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

  • 您无法为中值滤波设计内核,因为它是非线性卷积:对于每个NxN邻域,计算不仅仅涉及产品和总和. (3认同)