主要内容

基于小波图像散射的纹理分类

这个例子展示了如何使用小波图像散射对纹理进行分类。除了小波工具箱™,本示例还需要并行计算工具箱™和图像处理工具箱™。

在数字图像中,纹理提供了关于颜色或像素强度的空间排列的信息。颜色或像素强度的特定空间排列对应于被成像的物理材料的不同外观和一致性。图像的纹理分类和分割具有许多重要的应用领域。一个特别重要的例子是生物医学图像分析,其中正常和病理状态通常以形态学和组织学特征为特征,表现为纹理[4]的差异。

小波图像散射

对于分类问题,通常有用的方法是将数据映射到一些替代表示中,这种表示在保留每个类的鉴别属性的同时丢弃了不相关的信息。小波图像散射构造了图像的低方差表示,对平移和小变形不敏感。由于图像中的平移和小变形不影响类的成员关系,散射变换系数提供了可以构建健壮分类模型的特征。

小波散射的工作原理是通过一系列小波变换,非线性和平均[1][3][5]级联图像。结果是特征提取是在散射变换表示中,将同类别的图像彼此移近,而将不同类别的图像彼此移远。

KTH-TIPS

这个例子使用了一个公开的纹理数据库,KTH-TIPS(不同照明、姿势和比例下的纹理)图像数据库[6]。本例中使用的KTH-TIPS数据集是灰度版本。共有810张图片,10个纹理,每个纹理81张图片。大多数图片的尺寸是200 * 200。这个例子假设你已经下载了KTH-TIPS灰度数据集并解压了它,这样10个纹理类就包含在一个公共文件夹的单独子文件夹中。每个子文件夹都以它所包含的纹理类命名。卸载下载的kth_tips_grey_200x200.tar文件足以提供顶级文件夹KTH_TIPS和所需的子文件夹结构。

使用imageDatastore读取数据。设置位置的属性imageDatastore到包含您已访问的KTH-TIPS数据库的文件夹。

Location = fullfile(tempdir,“kth_tips_grey_200x200”“KTH_TIPS”);Imds = imageDatastore(location,“IncludeSubFolders”,真的,“FileExtensions”“使用”“LabelSource”“foldernames”);

从数据集中随机选择并可视化20张图像。

numImages = 810;perm = randperm(numImages,20);np = 1:20 subplot(4,5,np) im = imread(Imds.Files{perm(np)});显示亮度图像(im);colormap灰色的;轴结束

纹理分类

这个例子使用了MATLAB™的并行处理能力数组接口。如果当前没有并行池,则启动并行池。

如果parpool isempty (gcp);结束
使用“本地”配置文件启动并行池(parpool)…连接到并行池(工作人员数量:6)。

为了再现性,请设置随机数生成器。打乱KTH-TIPS数据集的文件,并将810张图像随机选择为两组,一组用于训练,一组用于测试。使用大约80%的图像从散射变换建立一个预测模型,并使用剩余的测试模型。

rng(100) Imds = imageDatastore(location,“IncludeSubFolders”,真的,“FileExtensions”“使用”“LabelSource”“foldernames”);Imds = shuffle(Imds);[trainImds,testImds] = splitEachLabel(Imds,0.8);

我们现在有两个数据集。训练集由650张图像组成,每个纹理65张图像。测试集由160张图像组成,每个纹理16张图像。要进行验证,请计算每个数据集中的标签。

countEachLabel (trainImds)
ans =10×2表标签数量______________ _____铝箔65棕面包65灯芯绒65棉花65饼干65亚麻65橙皮65砂纸65海绵65泡沫聚苯乙烯65
countEachLabel (testImds)
ans =10×2表标签数量______________ _____铝箔16棕面包16灯芯绒16棉花16花炮16亚麻16橙皮16砂纸16海绵16泡沫聚苯乙烯16

创建用于调整大小的图像的数组。

Ttrain =高(trainImds);Ttest = tall(testImds);

为200 * 200的图像输入创建一个散射框架InvarianceScale150股。不变性比例超参数是我们在本例中设置的唯一一个。对于散射变换的其他超参数,使用默认值。

sn = waveletScattering2(“图象尺寸”(200 200),“InvarianceScale”, 150);

为每个训练集和测试集提取分类的特征helperScatImages_mean函数。的代码helperScatImages_mean在本例的末尾。helperScatImages_mean将图像调整为普通的200 * 200大小,并使用散射框架,sn,得到特征矩阵。在这种情况下,每个特征矩阵是391 × 7 × 7。有391条散射路径,每个散射系数图像为7 × 7。最后,helperScatImages_mean沿第2维和第3维求均值,得到每个图像的391元素特征向量。这是数据从40000个元素减少到391个元素的显著减少。

trainfeatures = cellfun(@(x)helperScatImages_mean(sn,x),Ttrain,“大学”, 0);testfeatures = cellfun(@(x)helperScatImages_mean(sn,x),Ttest,“大学”, 0);

使用收集能力,收集所有的训练和测试特征向量,并将它们连接成矩阵。

Trainf = gather(trainfeatures);
使用Parallel Pool 'local'计算高表达式:-通过1 / 1:在1分39秒内完成计算
trainfeatures = cat(2,Trainf{:});Testf =集合(testfeatures);
使用并行池“local”计算高表达式:-通过1 / 1:在23秒内完成计算
testfeatures = cat(2,Testf{:});

前面的代码得到两个矩阵,行维391,列维分别等于训练集和测试集中的图像数量。每一列都是一个特征向量。

PCA模型与预测

本例基于每个类的散射特征向量的主成分构建了一个简单的分类器。分类器在函数中实现helperPCAModel而且helperPCAClassifier.这个函数helperPCAModel根据散射特征确定每个数字类的主成分。的代码helperPCAModel在本例的末尾。这个函数helperPCAClassifier通过在每个测试特征向量的主成分与训练集之间找到最接近的匹配(最佳投影),并据此分配类,对保留测试数据进行分类。的代码helperPCAClassifier在本例的末尾。

model = helperpcammodel (trainfeatures,30,trainImds.Labels);predlabels = helperPCAClassifier(testfeatures,model);

在建立模型并对测试集进行分类后,确定测试集分类的准确性。

accuracy = sum(testImds.)label == predlabels)./numel(testImds.Labels)*100
准确度= 99.3750

对于测试集中的160张图像,我们已经实现了99.375%的正确分类,错误率为0.625%。混淆矩阵图表明,我们的简单模型错误分类了一个纹理。

图confusionchart (testImds.Labels predlabels)

总结

在本例中,我们使用小波图像散射来创建用于分类的低方差纹理表示。使用散射变换和一个简单的主成分分类器,我们获得99.375%的准确率。这个结果与KTH-TIPS数据库上的最新性能相当

参考文献

[1]布鲁娜,J.和S.马拉特。"不变散射卷积网络"模式分析与机器智能汇刊.2013年第8期第35卷,第1872-1886页。

[2]海曼,E., B.卡普托,M.弗里茨,J. O.埃克伦德。《关于物质分类的现实条件的意义》在计算机视觉- ECCV 2004,由Tomás Pajdla和Jiří Matas编辑,3024:253-66。柏林,海德堡:施普林格柏林海德堡,2004年。https://doi.org/10.1007/978 - 3 - 540 - 24673 - 2 - _21。

[3]南卡罗来纳州马拉特“群不变散射。”纯数学与应用数学通信“,.2012年第10期第65卷第1331-1398页。

Pujol, O.和P. Radeva。血管内组织表征的监督纹理分类在生物医学图像分析手册由Jasjit S. Suri, David L. Wilson和Swamy Laxminarayan编辑,57-109。马萨诸塞州波士顿:施普林格美国,2005年。https://doi.org/10.1007/0 - 306 - 48606 - 7 _2。

[5]西弗尔,L.和S.马拉。“旋转,缩放和变形不变散射纹理识别。”2013年IEEE计算机视觉与模式识别会议.2013, pp 1233-1240。10.1109 / CVPR.2013.163。

[6]KTH-TIPS图像数据库主页https://www.csc.kth.se/cvap/databases/kth-tips/

附录-辅助功能万博1manbetx

helperScatImages_mean

函数features = helperScatImages_mean(sf,x) x = imresize(x,[200 200]);smat = featureMatrix(sf,x);特征=均值(均值(smat,2),3);结束

helperPCAModel

函数model = helperpcammodel (features,M,Labels)此函数仅支持小波图像散射的例子万博1manbetx%小波工具箱。它可能在未来的版本中更改或删除。% model = helperpcammodel (features,M,Labels)版权所有2018 MathWorks初始化结构数组以保存仿射模型模型= struct(“暗”[],“亩”[],“U”[],“标签”分类([]),“年代”[]);模型。Dim = M;%获取类的数量LabelCategories =类别(标签);Nclasses = numel(categories(Labels));k = 1:Nclasses Class = LabelCategories{kk};查找对应于每个类的索引idxClass =标签==类;提取每个类的特征向量tmpFeatures = features(:,idxClass);确定每个类的平均值模型。mu{kk} = mean(tmpFeatures,2);[model.U {kk},模型。S{kk}] = scatPCA(tmpFeatures);如果size(model. u {kk},2) > M模型。U{kk} = model.U{kk}(:,1:M);模型。S{kk} = model.S{kk}(1:M);结束model.Labels(kk) = Class;结束函数[u,s,v] = scatPCA(x,M)沿二次元计算x的主成分。如果nargin > 1 && M > 0%如果M非零,计算前M个主成分。[u,s,v] = svds(x-sig_mean(x),M);S = abs(diag(S)/√(size(x,2)-1)).^2;其他的%否则,计算所有主成分。每一行都是一个观测值,即散射路径的数量每一列都是一个类观察值[u,d] = eig(cov(x'));[s,ind] = sort(diag(d),“下”);U = U (:,ind);结束结束结束

helperPCAClassifier

函数标签= helperPCAClassifier(特征,型号)此函数仅支持小波图像散射的例子万博1manbetx%小波工具箱。它可能在未来的版本中更改或删除。%模型是一个包含字段M、mu、v和标签的结构数组%的特征是测试数据的矩阵,它是Ns乘l, Ns是的个数%散射路径,L为测试样例数。每一栏% features是一个测试示例。版权所有2018 MathWorkslabelIdx = determineClass(特征,模型);labels = model.Labels(labelIdx);返回列向量以与imageDatastore标签一致标签=标签(:);%--------------------------------------------------------------------------函数labelIdx = determineClass(特征,模型)确定类的数量Nclasses = numel(model.Labels);%初始化错误矩阵errMatrix = Inf(Nclasses,size(features,2));nc = 1:Nclasses%类形心Mu = model.mu{nc};u = model.U{nc};% 1-by-LerrMatrix(nc,:) = projectionError(features,mu,u);结束确定沿类尺寸的最小值[~,labelIdx] = min(errMatrix,[],1);%--------------------------------------------------------------------------函数totalerr = projectionError(features,mu,u)Npc = size(u,2);L = size(features,2);减去类均值:Ns-by-L - Ns-by-1S = features-mu;% 1-by-LnormSqX = sum(abs(s).^2,1)';err = Inf(Npc+1,L);err(1,:) = normSqX;Err (2:end,:) = -abs(u'*s).^2;% 1-by-LTotalerr =√(sum(err,1));结束结束结束

另请参阅

相关的例子

更多关于