目录
????????medfilt2函数的功能是二维中位数滤波。
J = medfilt2(I)
J = medfilt2(I,[m n])
J = medfilt2(___,padopt)
J = medfilt2(I) 对图像 I 执行二维中位数滤波。每个输出像素包含输入图像中对应像素周围 3×3 邻域的中位数值。
J = medfilt2(I,[m n]) 执行中位数滤波,其中每个输出像素包含输入图像中对应像素周围的 m×n 邻域中的中位数值。
J = medfilt2(___,padopt) 控制 medfilt2 如何填充图像边界。
????????将图像读入工作区并显示它。
I = imread('eight.tif');
figure, imshow(I)
如图所示:
????????添加椒盐噪声。
J = imnoise(I,'salt & pepper',0.02);
????????使用中位数滤波器滤除该噪声。
K = medfilt2(J);
????????并排显示结果。
imshowpair(J,K,'montage')
如图所示:
参数说明
I — 输入图像
????????输入图像,指定为二维灰度图像或二值图像。
[m n] — 邻域大小
????????邻域大小,指定为由正整数组成的二元素向量。
padopt — 填充选项
填充选项,指定为下列值之一。
值 | 描述 |
---|---|
'zeros'(默认值) | 用 0 填充图像。 |
'symmetric' | 在边界处对称延伸图像。 |
'indexed' | ?如果?I?的类是?double,则用?1?填充图像;否则,用?0?填充。 |
J — 输出图像
????????输出图像,以与输入图像 I 具有相同类的数值矩阵形式返回。
提示
?中位数滤波是图像处理中一种常用的非线性运算,用于减少“椒盐”噪声。当目标是同时减少噪声和保持边缘时,中位数滤波比卷积更高效。有关性能方面的信息,请参阅 ordfilt2。
?如果输入图像 I 属于整数类,则所有输出值都以整数形式返回。如果邻域 (m*n) 中的像素数是偶数,则一些中位数值可能不是整数。在这些情况下,会丢弃小数部分。逻辑输入的处理方式与之类似。例如,uint8 数组中以下 2×2 邻域的真实中位数为 4.5,但 medfilt2 会丢弃小数部分并返回 4。
1 5
4 8
?如果您将 padopt 指定为 'zeros' 或 'indexed',则填充会使图像边界附近的中位数发生偏斜。边缘的邻域 ([m n]/2) 一半宽度内的像素可能出现变形。
算法
?????????在 CPU 上,medfilt2 使用 ordfilt2 来执行滤波。
参考
[1] Lim, Jae S., Two-Dimensional Signal and Image Processing, Englewood Cliffs, NJ, Prentice Hall, 1990, pp. 469-476.