主要内容

在基于块的工作流中计算分割指标

这个例子展示了如何计算单个块的语义分割混淆矩阵blockedImage对象,然后计算全局和块分割指标。

加载一个预先训练好的网络,在背景下对三角形进行二进制分割。

负载(“triangleSegmentationNetwork”);

triangleImages数据集有100张带有ground truth标签的测试图像。定义数据集的位置。

dataSetDir = fullfile(toolboxdir(“愿景”),“visiondata”“triangleImages”);

定义测试图像的位置。

testImagesDir = fullfile(dataSetDir,“testImages”);

读取三个测试图像。将每个图像的大小调整为四倍,将其转换为数据类型,然后创建一个blockedImage对象。一个blockedImage金宝app支持基于块的图像处理工作流。

numImages = 3;idx = 1:numImages im = imread(fullfile(testImagesDir,[“image_”“00”num2str (idx)“jpg”)));Im = imresize(Im,4);testImages(idx) = blockedImage(im);结束

显示第一个测试图像。

bigimageshow (testImages (1))

定义基本真值标签的位置。

testLabelsDir = fullfile(dataSetDir,“testLabels”);

定义类名及其关联的标签id。

classNames = [“三角形”“背景”];labelIDs = [255 0];

读入每个测试图像的ground truth标签。创建一个blockedImage对象从每个ground truth标签中获取。

idx = 1:numImages gtLabel = imread(fullfile(testLabelsDir,[“labeled_image_”“00”num2str (idx)“使用”)));gtLabel = imresize(gtLabel,4,“最近的”);groundTruthImages(idx) = blockedImage(gtLabel);结束

显示第一个地面真实图像。

bigimageshow (groundTruthImages (1))

对于每个测试图像,使用应用函数来处理每个块。的应用函数执行helper函数指定的操作segmentAndCalculateBlockMetrics,在本例的最后定义。该函数对每个块进行语义分割,并计算预测和真实值标签之间的混淆矩阵。

blockSize = [32 32];datasetConfMat = table;idx = 1:numImages [segmentedImages(idx),blockConfMatOneImage] = apply(testImages(idx),...@(块,labeledImageBlock) segmentAndCalculateBlockMetrics(块,labeledImageBlock,净,一会,labelIDs),...“ExtraImages”groundTruthImages (idx),“PadPartialBlocks”,真的,“BlockSize”blockSize,“UseParallel”、假);读取一个图像的所有块结果,并更新图像号blockConfMatOneImageDS = blockkedimagedatastore (blockConfMatOneImage);blockConfMat = readall(blockConfMatOneImageDS);blockConfMat = struct2table([blockConfMat{:}]);blockConfMat。ImageNumber = idx.*ones(height(blockConfMat),1);datasetConfMat = [datasetConfMat;blockConfMat];结束

显示第一个分段图像。

bigimageshow (segmentedImages (1))

评估数据集指标和块指标的细分。

[metrics,blockMetrics] = evaluateSemanticSegmentation(datasetConfMat,classNames,“指标”“所有”);
评估语义分割结果---------------------------------------- *选择的指标:全局精度,类精度,IoU,加权IoU。*处理3张图片。*完成……完成了。*数据集指标:GlobalAccuracy MeanAccuracy MeanIoU WeightedIoU  ______________ ____________ _______ ___________ 0.95428 0.82739 0.69927 0.92533

计算所有图像的Jaccard分数。

jaccardSimilarity = metrics.ImageMetrics.MeanIoU
jaccardSimilarity =3×10.7664 0.7277 0.6538

金宝app支持函数

segmentAndCalculateBlockMetrics函数对单个块进行语义分割,然后计算预测和真实值标签的混淆矩阵。

函数[outputLabeledImageBlock,blockConfMatPerBlock] = segmentAndCalculateBlockMetrics(block,labeledImageBlock,net,classNames,labelIDs) outputLabeledImageBlock = semanticseg(block. data,net);将基本真理标签转换为分类标签。labeledImageBlock = categorical(labeledImageBlock,labelIDs,classNames);confusimatrix = segmentationconfusimatrix (outputLabeledImageBlock,labeledImageBlock);% blockConfMatPerBlock是一个结构与混淆矩阵,图像编号%和blockInfo。使用带有evaluateSemanticSegmentation的结构体来%计算指标和聚合基于块的结果。blockConfMatPerBlock。ConfusionMatrix = ConfusionMatrix;blockConfMatPerBlock。ImageNumber = block.ImageNumber;blockInfo。Start = block.Start;blockInfo。End = block.End;blockConfMatPerBlock。BlockInfo = BlockInfo;结束

另请参阅

||||

相关的例子

更多关于