Main Content

imgaborfilt

将 Gabor 滤波器或滤波器组应用于二维图像

说明

示例

[mag,phase] = imgaborfilt(A,wavelength,orientation) 计算输入灰度图像 A 的 Gabor 滤波器的幅值和相位响应。wavelength 描述正弦载波的波长,以像素/周期为单位。orientation 是滤波器的方向,以度为单位。

[mag,phase] = imgaborfilt(A,wavelength,orientation,Name,Value) 使用名称-值参数应用单个 Gabor 滤波器来控制滤波的各个方面。

示例

[mag,phase] = imgaborfilt(A,gaborbank) 将 Gabor 滤波器组 gaborbank 应用于输入图像 A

示例

全部折叠

将图像读入工作区,并将图像转换为灰度图像。

I = imread('board.tif');
I = im2gray(I);

对图像应用 Gabor 滤波器。

wavelength = 4;
orientation = 90;
[mag,phase] = imgaborfilt(I,wavelength,orientation);

同时显示原始图像以及用 Gabor 滤波器计算的幅值图和相位响应图。

tiledlayout(1,3)
nexttile
imshow(I)
title('Original Image')
nexttile
imshow(mag,[])
title('Gabor Magnitude')
nexttile
imshow(phase,[])
title('Gabor Phase')

Figure contains 3 axes objects. Axes object 1 with title Original Image contains an object of type image. Axes object 2 with title Gabor Magnitude contains an object of type image. Axes object 3 with title Gabor Phase contains an object of type image.

将图像读入工作区。

I = imread('cameraman.tif');

创建 Gabor 滤波器数组,称为滤波器组。此滤波器组包含两个方向和两个波长。

gaborArray = gabor([4 8],[0 90]);

对输入图像应用滤波器。

gaborMag = imgaborfilt(I,gaborArray);

显示结果。图窗显示每个滤波器的幅值响应。

figure
subplot(2,2,1);
for p = 1:4
    subplot(2,2,p)
    imshow(gaborMag(:,:,p),[]);
    theta = gaborArray(p).Orientation;
    lambda = gaborArray(p).Wavelength;
    title(sprintf('Orientation=%d, Wavelength=%d',theta,lambda));
end

Figure contains 4 axes objects. Axes object 1 with title Orientation=0, Wavelength=4 contains an object of type image. Axes object 2 with title Orientation=0, Wavelength=8 contains an object of type image. Axes object 3 with title Orientation=90, Wavelength=4 contains an object of type image. Axes object 4 with title Orientation=90, Wavelength=8 contains an object of type image.

输入参数

全部折叠

二维灰度图像,指定为数值矩阵。

正弦载波的波长,指定为大于或等于 2 的数字,以像素/周期为单位。wavelength 的典型值范围是从 2 到输入图像的斜边长度[1]

以度为单位的滤波器方向,指定为范围 [0, 360] 内的数值标量。方向定义为正弦平面波的法线方向。

Gabor 滤波器组,指定为 gabor 对象或 gabor 对象数组。

名称-值参数

将可选的参数对组指定为 Name1=Value1,...,NameN=ValueN,其中 Name 是参数名称,Value 是对应的值。名称-值参数必须出现在其他参数后,但对各个参数对组的顺序没有要求。

如果使用的是 R2021a 之前的版本,请使用逗号分隔每个名称和值,并用引号将 Name 引起来。

示例: 'SpatialFrequencyBandwidth',2 指定两个倍频程的空间频率带宽

空间频率带宽,指定为一个表示倍频程数的数值标量。空间频率带宽决定滤波器响应的截止,因为输入图像中的频率成分不同于首选频率 1/lambda。空间频率带宽的典型值在 [0.5, 2.5] 范围内。

高斯包络的半长轴与半短轴之比 (semiminor /semimajor),指定为正数。此参数控制高斯包络的椭圆率。空间纵横比的典型值在 [0.23, 0.92] 范围内。

输出参数

全部折叠

Gabor 滤波器或滤波器组的幅值响应,以单个滤波器的数值矩阵或滤波器组的数值数组形式返回。mag 的第 p 个平面是具有相同索引的 Gabor 滤波器 gaborbank(p) 的幅值响应。

数据类型: double

Gabor 滤波器或滤波器组的相位响应,以单个滤波器的数值矩阵或滤波器组的数值数组形式返回。phase 的第 p 个平面是具有相同索引的 Gabor 滤波器 gaborbank(p) 的相位响应。

数据类型: double

提示

  • 如果图像包含 InfNaN,则 imgaborfilt 的行为是未定义的,因为 Gabor 滤波在频域中执行。

  • 对于除 single 以外的所有输入数据类型,imgaborfiltdouble 类型执行计算。single 类型的输入图像以 single 类型进行滤波。在调用 imgaborfilt 之前,将输入图像转换为 single 可能有助于性能优化。

参考

[1] Jain, Anil K., and Farshid Farrokhnia. "Unsupervised Texture Segmentation Using Gabor Filters." Pattern Recognition 24, no. 12 (January 1991): 1167–86. https://doi.org/10.1016/0031-3203(91)90143-S.

扩展功能

版本历史记录

在 R2015b 中推出