主要内容

使用Gabor过滤器的纹理分割

此示例显示如何使用纹理分段基于其纹理识别区域。目标是将狗分成浴室地板。由于浴室地板的常规,周期性模式之间的质地和狗毛皮的常规,平滑质地之间的质地差异,分割是视觉上的显而易见的。

从实验中,已知Gabor过滤器是哺乳动物视觉系统中的简单细胞的合理模型。因此,Gabor过滤器被认为是人类如何区分纹理的良好模型,因此是在设计算法以识别纹理时使用的有用模型。此示例使用(A.K.Jain和F.Farrokhnia,使用Gabor Filters“,1991)中描述的基本方法,无监督的纹理分割”,1991)来执行纹理分割。

读取和显示输入图像

读取并显示输入图像。此示例缩小图像以使示例更快地运行。

a = imread('kobi.png');a = imresize(a,0.25);Agray = RGB2GRAY(A);图imshow(a)

图包含轴。轴包含类型图像的对象。

Gabor过滤器的设计阵列

设计一系列Gabor过滤器,这些滤波器被调谐到不同的频率和方向。该集合频率和方向旨在本地化输入图像中的不同,大致正交,频率和方向信息的不同子集。在30度的步长的[0,150]度之间定期定制取向。在从4 / SQRT(2)开始到输入图像的斜边长度的两个从4 / SQRT(2)开始的力量增加的样本波长。这些频率和方向的组合是从引言中引用的[Jain,1991]中的。

图像zeed = size(a);numrows = absageize(1);numcols =图像化(2);波长= 4 / sqrt(2);wavelengthmax = ambot(numrows,numcols);n =楼层(log2(波长扬声器/波长升温));波长= 2。^(0:(n-2))*波长升温;Deltatheta = 45;orientation = 0:Deltatheta:(180-Deltatheta);g = gabor(波长,方向);

从源图像中提取Gabor幅度特征。使用Gabor过滤器时,通常使用每个过滤器的幅度响应。Gabor幅度响应也有时被称为“Gabor能量”。每个MXN Gabor幅度输出图像GaborMag(:,:,Ind)是相应的gabor滤波器的输出G(IND)

gabormag = imgaborfilt(Agray,G);

后处理Gabor幅度图像到Gabor特征。

要使用Gabor幅度响应作为分类的功能,需要一些后处理。此后处理包括高斯平滑,将其他空间信息添加到功能集中,将我们的功能设置为预期的表格PCA.威彻斯函数,并将特征信息归一化为常见方差和均值。

即使在恒定纹理的良好分段区域内,每个Gabor幅度图像也包含一些局部变化。这些本地变体将丢弃分割。我们可以使用简单的高斯低通滤波来弥补这些变化,以平滑Gabor幅度信息。我们选择一个匹配的Sigma,它与提取每个功能的Gabor过滤器匹配。我们介绍了一种平滑的术语k,可以控制对Gabor幅度响应应用多少平滑。

为了i = 1:长度(g)sigma = 0.5 * g(i)。波长;k = 3;gabormag(:,:,i)= Imgaussfilt(GaborMag(:,:,i),k * sigma);结尾

当构建用于分类的Gabor特征集时,在X和Y中添加空间位置信息的地图是有用的。该附加信息允许分类器更喜欢在空间靠近在一起的分组。

x = 1:numcols;Y = 1:numrows;[x,y] = meshgrid(x,y);特点=猫(3,GaborMag,X);特点=猫(3,Heveryte,Y);

将数据重塑为矩阵X预期的形式威彻斯功能。图像网格中的每个像素是单独的数据点,以及变量中的每个平面设施是一个单独的功能。在该示例中,Gabor滤波器组中的每个滤波器存在单独的特征,以及来自前一步骤中添加的空间信息的两个附加功能。总共有24个Gabor功能和2个输入图像中的每个像素的空间特征。

numpoints = numrows * numcols;X = RESHAPE(HEDSETET,NUMROWS * NUMCOL,[]);

将特征标准化为零平均值,单位方差。

x = bsxfun(@minus,x,均值(x));x = bsxfun(@ rdivide,x,std(x));

可视化功能集。为了了解Gabor幅度特征的看起来,主成分分析可用于从输入图像中的每个像素的26-d表示移动到每个像素的1-d强度值。

coeff = pca(x);feature2dimage = REPAPE(x * coeff(:,1),numrows,numcols);图imshow(feature2dimage,[])

图包含轴。轴包含类型图像的对象。

在这种可视化中显而易见的是,Gabor特征信息存在足够的方差,以获得该图像的良好分割。由于狗和地板之间的纹理差异,狗与地板相比是非常暗的。

使用kemeans对Gabor纹理功能进行分类

重复k-means聚类五次以避免在搜索最小化目标函数的装置时避免本地最小值。该示例中唯一的现有信息是在分段的图像中存在许多不同的纹理区域。在这种情况下有两个不同的区域。该示例的这一部分需要统计和机器学习工具箱™。

l = kmeans(x,2,'复制'5);

可视化分割使用label2RGB.

l =重塑(l,[numrows numcols]);数字imshow(label2rgb(l))

图包含轴。轴包含类型图像的对象。

使用可视化分段图像imshowpair.。检查由与标签矩阵L相关联的掩模BW产生的前景和背景图像。

Aseg1 =零(大小(a),'喜欢',一种);ASEG2 =零(大小(a),'喜欢',一种);bw = l == 2;bw = repmat(bw,[1 1 3]);ASEG1(BW)= A(BW);aseg2(〜bw)= a(〜bw);图imshowpair(aseg1,aseg2,'剪辑');

图包含轴。轴包含类型图像的对象。