Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

medfilt2

二维中位数滤波

说明

示例

J = medfilt2(I) 对图像 I 执行二维中位数滤波。每个输出像素包含输入图像中对应像素周围 3×3 邻域的中位数值。

J = medfilt2(I,[m n]) 执行中位数滤波,其中每个输出像素包含输入图像中对应像素周围的 m×n 邻域中的中位数值。

J = medfilt2(___,padopt) 控制 medfilt2 如何填充图像边界。

示例

全部折叠

将图像读入工作区并显示它。

I = imread('eight.tif');
figure, imshow(I)

Figure contains an axes object. The axes object contains an object of type image.

添加椒盐噪声。

J = imnoise(I,'salt & pepper',0.02);

使用中位数滤波器滤除该噪声。

K = medfilt2(J);

并排显示结果。

imshowpair(J,K,'montage')

Figure contains an axes object. The axes object contains an object of type image.

输入参数

全部折叠

输入图像,指定为二维灰度图像或二值图像。

数据类型: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32 | logical

邻域大小,指定为由正整数组成的二元素向量。

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

填充选项,指定为下列值之一。

描述
'zeros'(默认值)0 填充图像。
'symmetric'在边界处对称延伸图像。
'indexed'如果 I 的类是 double,则用 1 填充图像;否则,用 0 填充。

数据类型: char | string

输出参数

全部折叠

输出图像,以与输入图像 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.

扩展功能

版本历史记录

在 R2006a 之前推出

另请参阅

| | |