在基于块的工作流中计算分割指标
这个例子展示了如何计算单个块的语义分割混淆矩阵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;结束
另请参阅
应用
|bigimage
|segmentationConfusionMatrix
|semanticSegmentationMetrics
|evaluateSemanticSegmentation