主要内容

纹理分类与小波图像散射

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

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

小波图像散射

对于分类问题,通常是有用的数据映射到一些备选表示,丢弃无关信息,同时保留每个类的区别的性质。图像的小波图像散射结构低温度差的表示这是对翻译和小变形。因为翻译和小变形图像中不影响类会员,散射变换系数提供功能,您可以构建健壮的分类模型。

小波散射是通过级联通过一系列的图像小波变换,非线性,平均[1][3][5]。这样的结果特征提取是图像在同一类相互靠拢的散射变换表示,虽然属于不同的类的图像移动的距离。

KTH-TIPS

这个例子使用一个公开的数据库结构,KTH-TIPS(纹理在不同光照、姿势和规模)图像数据库[6]。KTH-TIPS数据集这个示例中所使用的灰度版本。总共有810张图片和81图像纹理和纹理。大多数的图像是200 - 200的规模。这个示例假设您已经下载了KTH-TIPS灰度数据集,并解压它,这样10纹理类包含在单独的一个普通文件夹的子文件夹。每个子文件夹命名为纹理它包含的类。解压下载的kth_tips_grey_200x200.tar文件是充分的提供顶级文件夹KTH_TIPS和所需的子文件夹结构。

使用imageDatastore读取数据。设置位置财产的imageDatastore文件夹包含KTH-TIPS数据库访问。

位置= fullfile (tempdir,“kth_tips_grey_200x200”,“KTH_TIPS”);imd = imageDatastore(位置,“IncludeSubFolders”,真的,“FileExtensions”,“使用”,“LabelSource”,“foldernames”);

从数据集随机选择20和可视化图像。

numImages = 810;烫= randperm (numImages 20);np = 1:20次要情节(4、5、np) im = imread (Imds.Files{烫发(np)});显示亮度图像(im);colormap灰色的;轴;结束

纹理分类

这个示例使用通过MATLAB™的并行处理能力数组接口。开始如果没有当前运行的并行池。

如果parpool isempty (gcp);结束
开始平行池(parpool)使用“本地”概要文件…连接到平行池(工人数量:6)。

再现性,设置随机数发生器。洗牌KTH-TIPS数据集的文件和810年的图像分割成两个随机选择集,一个用于培训和一个伸出组进行测试。使用大约80%的图像构建预测模型的散射变换和使用用于测试该模型的其余部分。

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

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

countEachLabel (trainImds)
ans =10×2表_____ aluminium_foil标签数* * * 65 brown_bread 65灯芯绒65棉65饼干65麻65 orange_peel 65砂纸65海绵65塑料65
countEachLabel (testImds)
ans =10×2表_____ aluminium_foil标签数* * * 16 brown_bread灯芯绒16棉16饼干麻orange_peel 16砂纸海绵16聚苯乙烯泡沫塑料

创建数组大小的图像。

Ttrain =高(trainImds);tt =高(testImds);

创建一个散射图像输入框架200 -,- 200的规模InvarianceScale150股。不变性规模hyperparameter是唯一一个在本例中我们设置。的其他hyperparameters散射变换,使用默认值。

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

提取特征的分类对于每一个训练集和测试集,使用helperScatImages_mean函数。的代码helperScatImages_mean在这个例子中。helperScatImages_mean调整图像的大小以常见的200 - 200的大小和使用散射框架,sn,获取特征矩阵。在这种情况下,每个特征矩阵是391 - - 7 - 7。有391个散射路径和7-by-7每个散射系数图像。最后,helperScatImages_mean获得沿着第二和三维平均获得391元素为每个图像的特征向量。这是一个显著减少数据元素从40000降到391。

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

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

Trainf =收集(trainfeatures);
评估高表达式使用并行池“当地”:通过1对1:在1分39秒完成评估完成1分39秒
trainfeatures =猫(2,Trainf {:});Testf =收集(testfeatures);
评估高表达式使用并行池“当地”:通过1对1:在23秒评价完成23秒完成
testfeatures =猫(2,Testf {:});

前面的代码结果两个矩阵的行和列的尺寸391维度的数量等于图像训练集和测试集,分别。所以每一列是一个特征向量。

主成分分析模型和预测

这个例子构建一个简单的分类器基于散射的主成分特征向量为每个类。分类器实现的功能helperPCAModelhelperPCAClassifier。这个函数helperPCAModel确定主成分对每个数字类基于散射特性。的代码helperPCAModel在这个例子中。这个函数helperPCAClassifier分类伸出测试数据通过寻找最接近的匹配(最佳投影)之间的每个测试的主成分的特征向量训练集和分配相应的类。的代码helperPCAClassifier在这个例子中。

模型= helperPCAModel (trainfeatures 30 trainImds.Labels);predlabels = helperPCAClassifier (testfeatures模型);

构建分类模型和测试集后,确定测试集分类的准确性。

=总和(testImds准确性。标签= = predlabels)。/元素个数(testImds.Labels) * 100
精度= 99.3750

我们取得了99.375%正确分类,或者0.625%的错误率为160年的图像测试集。情节的混淆矩阵表明,我们的简单的模型是不是一个纹理。

图confusionchart (testImds.Labels predlabels)

总结

在这个例子中,我们使用小波图像散射创建低温度差的表征纹理的分类。利用散射变换和一个简单的主分量分类器,我们实现了99.375%的正确分类伸出测试集。这一结果与最先进的性能在KTH-TIPS数据库。[2]

引用

[1]布鲁纳,J。,和S. Mallat. "Invariant Scattering Convolution Networks."IEEE模式分析与机器智能。35卷,8号,2013年,页1872 - 1886。

[2]海曼,E。,B. Caputo, M. Fritz, and J. O. Eklundh. “On the Significance of Real-World Conditions for Material Classification.” In计算机视觉——2004年大会,由托马斯Pajdla编辑和Jiři Matas, 3024:253 - 66。柏林,海德堡:激飞柏林海德堡,2004。https://doi.org/10.1007/978 - 3 - 540 - 24673 - 2 - _21。

[3]Mallat, S。“集团不变的散射。”通信在纯和应用数学。10号卷。65年,2012年,页1331 - 1398。

[4]Pujol, O。,和P. Radeva. “Supervised Texture Classification for Intravascular Tissue Characterization.” In生物医学图像分析的手册,由亚斯耶特苏瑞,认为编辑大卫·l·威尔逊和哲人Laxminarayan 57 - 109。波士顿,MA:施普林格,2005年。https://doi.org/10.1007/0 - 306 - 48606 - 7 _2。

[5]Sifre, L。,和S. Mallat. "Rotation, scaling and deformation invariant scattering for texture discrimination."2013年IEEE计算机视觉与模式识别会议。2013年,页1233 - 1240。10.1109 / CVPR.2013.163。

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

附录-支持功能金宝app

helperScatImages_mean

函数特点= helperScatImages_mean(科幻,x) x = imresize (x, (200 200));smat = featureMatrix(科幻,x);特点=平均(平均(smat, 2), 3);结束

helperPCAModel

函数模型= helperPCAModel(特性、M标签)%这个函数只支持小波图像散射的例子金宝app%小波工具箱。它可能改变或在将来的版本中被删除。% = helperPCAModel模型(特性、M标签)% 2018年版权MathWorks%初始化结构数组以保存仿射模型模型=结构(“暗”[],“亩”[],“U”[],“标签”分类([]),“年代”[]);模型。昏暗的= M;%获得类的数量LabelCategories =类别(标签);类=元素个数(类别(标签));kk = 1:类类= LabelCategories {kk};%找到对应于每个类的指标idxClass = = =类标签;%提取特征向量为每个类tmpFeatures =特性(:,idxClass);%确定每个类的意思模型。μ{kk} =意味着(tmpFeatures, 2);[model.U {kk},模型。年代{kk}] = scatPCA (tmpFeatures);如果大小(model.U {kk}, 2) > M模型。U {kk} = model.U {kk} (:, 1: M);模型。年代{kk} = model.S {kk} (1: M);结束model.Labels (kk) =类;结束函数(u, v) = scatPCA (x, M)%计算沿二维x的主要组件。如果输入参数个数> 1 & & M > 0%如果M是零,计算第一主成分。(u, v) =圣言(x-sig_mean (x) M);s = abs(诊断接头(s) /√(大小(x, 2) 1)) ^ 2;其他的%否则,计算的所有主要组件。%每一行是一个观察,即散射路径的数量%每一列是一个类的观察(u, d) = eig (x (x '));位于[s] =排序(诊断接头(d),“下”);u = u(:,印第安纳州);结束结束结束

helperPCAClassifier

函数标签= helperPCAClassifier(特性,模型)%这个函数只支持小波图像散射的例子金宝app%小波工具箱。它可能改变或在将来的版本中被删除。%模型是一个结构数组字段,M,μ,v,标签%的功能是测试数据的矩阵Ns-by-L, Ns的数量%散射路径和L是测试例子的数量。每一列的%的特性是一个测试的例子。% 2018年版权MathWorkslabelIdx = determineClass(特性,模型);标签= model.Labels (labelIdx);%的回报是列向量同意imageDatastore标签标签=标签(:);% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -函数labelIdx = determineClass(特性,模型)%确定类的数量类=元素个数(model.Labels);%初始化误差矩阵errMatrix =正(类、尺寸(功能,2));数控= 1:类%类质心μ= model.mu{数控};u = model.U{数控};% 1-by-L:errMatrix (nc) = projectionError(特性、μu);结束%确定最小类维度[~,labelIdx] = min (errMatrix [], 1);% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -函数totalerr = projectionError(特性、μu)%人大=大小(u, 2);L =大小(功能,2);%减去类的意思是:Ns-by-L - Ns-by-1s = features-mu;% 1-by-LnormSqX =总和(abs (s)。^ 2, 1) ';呃=正(人大+ 1,L);:犯错(1)= normSqX;犯错(2:,:)= abs (u ' *。^ 2;% 1-by-Ltotalerr =√sum(呃,1));结束结束结束

另请参阅

相关的例子

更多关于