引言
中值滤波器是一种非线性滤波器,广泛用于数字图像处理中的噪声消除。它的工作原理是将图像中每个像素的值替换为其邻域(通常是一个正方形或圆形区域)中像素值的中位数。
中值滤波器对处理某些类型的噪声特别有效,例如"盐和胡椒"噪声,即随机出现的亮点(盐)和暗点(胡椒)。这是因为中位数对极端值不敏感,所以中值滤波器可以消除这些噪声点,而不会像平均滤波器那样模糊图像。
函数详解
medfilt2
medfilt2
是 MATLAB 的一个函数,用于对图像进行二维中值滤波。这是其基本语法和参数详解:
基本语法:
B = medfilt2(A)
B = medfilt2(A, [m n])
B = medfilt2(A, [m n], padopt)
参数详解:
-
A
:这是一个二维的图像矩阵,需要进行滤波的图像。 -
[m n]
:这是一个可选参数,用于指定滤波器的大小。m
和n
分别表示滤波器的行数和列数。如果省略此参数,那么默认的滤波器大小是[3 3]
。 -
padopt
:这是一个可选参数,用于指定边界处理方法。可以是 ‘zeros’(对边界进行零填充),‘symmetric’(对边界进行对称扩展),‘replicate’(对边界进行复制扩展)等。如果省略此参数,那么默认的边界处理方法是 ‘zeros’。
返回值详解:
B
:这是一个与输入图像A
同样大小的矩阵,表示滤波后的图像。
应用案例
% 读取图像
img1 = imread("Fig0335(a)(ckt_board_saltpep_prob_pt05).tif");
% 显示原始图像
figure;
subplot(1, 3, 1);
imshow(img1, []);
title("Original image");
% 创建一个3x3的平均滤波器并对图像进行滤波
h = fspecial("average", [3 3]);
img2 = imfilter(img1, h);
% 显示平均滤波后的图像
subplot(1, 3, 2);
imshow(img2, []);
title("Average filtered");
% 对图像进行中值滤波
img3 = medfilt2(img1);
% 显示中值滤波后的图像
subplot(1, 3, 3);
imshow(img3, []);
title("Median filtered");