Main Content

imfilter

多维图像的 N 维滤波

说明

示例

B = imfilter(A,h) 使用多维滤波器 h 对多维数组 A 进行滤波,并在 B 中返回结果。

示例

B = imfilter(A,h,options,...) 根据一个或多个指定的选项执行多维滤波。

示例

全部折叠

将一个彩色图像读入工作区中并显示该图像。

originalRGB = imread('peppers.png');
imshow(originalRGB)

使用 fspecial 函数创建一个运动模糊滤波器。

h = fspecial('motion', 50, 45);

将该滤波器应用于原始图像,以创建一个具有运动模糊的图像。请注意,imfilter 比其他一些滤波函数更节省内存,因为它输出的数组与输入图像数组具有相同的数据类型。在此示例中,输出是 uint8 数组。

filteredRGB = imfilter(originalRGB, h);
figure, imshow(filteredRGB)

再次对图像进行滤波,这次指定复制边界选项。

boundaryReplicateRGB = imfilter(originalRGB, h, 'replicate');
figure, imshow(boundaryReplicateRGB)

默认情况下,imfilter 使用相关性,因为工具箱滤波器设计函数生成相关性核。使用可选参数以使用卷积。

创建一个示例矩阵。

A = magic(5)
A = 5×5

    17    24     1     8    15
    23     5     7    14    16
     4     6    13    20    22
    10    12    19    21     3
    11    18    25     2     9

创建一个滤波器。

h = [-1 0 1];

使用相关性(默认值)进行滤波。

imfilter(A,h)
ans = 5×5

    24   -16   -16    14    -8
     5   -16     9     9   -14
     6     9    14     9   -20
    12     9     9   -16   -21
    18    14   -16   -16    -2

使用卷积进行滤波,用可选参数指定 imfilter

imfilter(A,h,'conv')
ans = 5×5

   -24    16    16   -14     8
    -5    16    -9    -9    14
    -6    -9   -14    -9    20
   -12    -9    -9    16    21
   -18   -14    16    16     2

在此示例中,当输入的类为 double 时,imfilter 的输出具有负值。为避免负值,请在调用 imfilter 之前将图像转换为不同数据类型。例如,当输入类型为 uint8 时,imfilter 将输出值截断为 0。将图像转换为有符号整数类型可能也是合适的。

A = magic(5)
A = 5×5

    17    24     1     8    15
    23     5     7    14    16
     4     6    13    20    22
    10    12    19    21     3
    11    18    25     2     9

imfilter 对图像进行滤波。

h = [-1 0 1];
imfilter(A,h)
ans = 5×5

    24   -16   -16    14    -8
     5   -16     9     9   -14
     6     9    14     9   -20
    12     9     9   -16   -21
    18    14   -16   -16    -2

请注意,结果包含负值。为避免输出图像中出现负值,请在执行滤波之前将输入图像转换为 uint8 类型。由于 imfilter 的输入的类为 uint8,输出的类也为 uint8,因此 imfilter 将负值截断为 0

A = uint8(magic(5));
imfilter(A,h)
ans = 5x5 uint8 matrix

   24    0    0   14    0
    5    0    9    9    0
    6    9   14    9    0
   12    9    9    0    0
   18   14    0    0    0

输入参数

全部折叠

要滤波的图像,指定为维度的数值数组。

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

多维滤波器,指定为数据类型为 double 的 N 维数组。

数据类型: double

控制滤波运算的选项,指定为字符向量、字符串标量或数值标量。下表列出了所有支持的选项。

边界选项

选项

描述

填充选项

数值标量,X

数组边界之外的输入数组值被赋予值 X。如果未指定填充选项,默认值为 0

'symmetric'

数组边界之外的输入数组值是通过沿数组边界对数组进行镜面反射得到。

'replicate'

数组边界之外的输入数组值假定为等于最近的数组边界值。

'circular'

数组边界之外的输入数组值是通过隐式假设输入数组具有周期性来计算的。

输出大小

'same'

输出数组与输入数组大小相同。这是未指定输出大小选项时的默认行为。

'full'

输出数组是完全滤波后的结果,因此比输入数组大。

相关性和卷积选项

'corr'

imfilter 使用相关性执行多维滤波,这与 filter2 执行滤波的方式相同。当未指定相关性或卷积选项时,imfilter 使用相关性。

'conv'

imfilter 使用卷积执行多维滤波。

输出参量

全部折叠

滤波后的图像,以与输入图像 A 大小和类相同的数值数组形式返回。

提示

  • 此函数可以使用针对数据类型 uint8uint16int16singledouble 的硬件优化来加快运行速度。

算法

  • imfilter 函数使用双精度浮点算术来计算每个输出像素的值。如果结果超出数据类型的范围,则 imfilter 会将结果截断到数据类型的允许范围。如果它是整数数据类型,则 imfilter 对小数值进行舍入。

  • 如果指定偶数大小的核 h,则核的中心是 floor((size(h) + 1)/2)

    例如,四元素滤波器 [0.25 0.75 -0.75 -0.25] 的中心是第二个元素 0.75。此滤波器与五元素滤波器 [0 0.25 0.75 -0.75 -0.25] 的滤波结果相同。

扩展功能

版本历史记录

在 R2006a 之前推出

全部展开