这个例子展示了如何使用MATLAB®,计算机视觉工具箱™,和图像处理工具箱™执行常见类型的图像和像素标签增强作为语义分割工作流的一部分。
语义分割训练数据包括由数字矩阵表示的图像和由分类矩阵表示的像素标签图像。在增强培训数据时,必须对图像和相关的像素标签应用相同的变换。此示例演示了三种常见类型的转换:
然后,该示例展示了如何应用增强到数据存储中的语义分段培训数据使用多种转换类型的组合。
您可以使用增强培训数据来培训网络。有关显示如何培训语义分段网络的示例,请参阅利用深度学习的语义分割(电脑视觉工具箱)。
为了演示不同类型的增强的效果,本例中的每个转换都使用相同的输入图像和像素标签图像。
读取样本图像。
filenameImage ='kobi.png';I = imread (filenameImage);
读取像素标签图像。图像有两个类。
filenameLabels ='kobipixellabeled.png';l = imread(FilenameLabels);类= [“地面”那“狗”];id = [1 2];
将像素标签图像转换为分类数据类型。
C =分类(L,ID,类);
控件在图像上显示标签Labeloverlay.
函数。标签为“地板”的像素具有蓝色色调,标签为“狗”的像素具有青色色调。
B = labeloverlay (C);imshow(b)标题('原始图像和像素标签')
您可以使用使用方法调整数字和分类图像的大小imresize
函数。将图像和像素标签图像的大小调整为相同的大小,并在图像上显示标签。
targetSize = [300 300];resizedI = imresize(我targetSize);resizedC = imresize (C, targetSize);
在调整大小的图像上显示调整大小的标签。
B = labeloverlay (resizedI resizedC);imshow(b)标题('调整大小的图像和像素标签')
裁剪是一个常见的预处理步骤,使数据匹配网络的输入大小。要创建所需大小的输出图像,首先使用使用的指定裁剪窗口的大小和位置OrneClopwindow2d.
(图像处理工具箱)和CenterCropWindow2d.
(图像处理工具箱)职能。确保选择包含图像中所需内容的裁剪窗口。然后,使用的裁剪图像和像素标签图像到同一窗口im
。
指定裁剪区域的期望大小为窗体[高度那宽度].
targetSize = [300 300];
将图像从图像中心裁剪到目标大小。
赢得= centerCropWindow2d(大小(I), targetSize);croppedI = imcrop(我,赢);croppedc = imcrop(c,win);
在裁剪图像上显示裁剪标签。
B = Labeloverlay(Comppedi,Croppedc);imshow(b)标题(“中心裁剪图像和像素标签”)
将图像从图像中的随机位置裁剪到目标大小。
win = rondomcropwindow2d(大小(i),targetsize);croppedI = imcrop(我,赢);croppedc = imcrop(c,win);
在裁剪图像上显示裁剪标签。
B = Labeloverlay(Comppedi,Croppedc);imshow(b)标题(“随机裁剪图像和像素标签”)
这randomAffine2d
(图像处理工具箱)函数从旋转、平移、缩放(调整大小)、反射和剪切的组合创建一个随机的2-D仿射变换。通过使用对图像和像素标签图像应用变换imwarp.
(图像处理工具箱)。使用使用的控制空间界限和分辨率的分辨率affineOutputView
(图像处理工具箱)函数。
从[-50,50]度范围中随机选择一个角度旋转输入图像和像素标签图像。
tform = ronstaffine2d(“回转”, 50 [-50]);
为翘曲图像和像素标签图像创建输出视图。
rut = AffineOutputView(大小(i),tform);
使用imwarp.
旋转图像和像素标签图像。
rotatedI = imwarp (tform,我“OutputView”,溃败);RotatedC = IMWARP(C,TForm,“OutputView”,溃败);
在旋转的图像上显示旋转的标签。
B = labeloverlay (rotatedI rotatedC);imshow(b)标题('旋转图像和像素标签')
数据存储是一种方便的方式来读取和增加图像集合。创建存储图像和像素标签图像数据的数据存储,并通过一系列的多个操作来扩充数据。
为了增加示例数据存储的大小,复制图像和像素标签图像的文件名。
numobservations = 4;TrainImages = Repelem({filenameImage},numobservations,1);TrainLabels = Repelem({filenameLabels},numobservations,1);
创建一个imageDatastore
从训练图像文件中。创建一个pixelLabelDatastore
从训练像素标签文件。数据存储包含相同数据的多个副本。
imd = imageDatastore (trainImages);pxds = pixelLabelDatastore (trainLabels、类id);
通过组合图像数据存储和像素标签数据存储来关联图像和像素标签对。
trainingdata =组合(IMDS,PXD);
从组合数据存储中读取第一个图像及其关联的像素标签图像。
数据=读取(TrainingData);我={1}数据;C =数据{2};
显示图像和像素标签数据。
B = labeloverlay (C);imshow (B)
使用该数据将数据增强应用于培训数据变换
函数。此示例对培训数据执行两个单独的增强。
第一增强使图像的颜色抖动,然后对图像和像素标签图像对执行相同的随机缩放、水平反射和旋转。类中定义了这些操作jitterImageColorAndWarp
辅助功能在此示例结束时。
AugmentedTrainingData =变换(TrainingData,@ jitterimageColorandwarp);
读取所有扩增数据。
数据= Readall(AugmentedTrainingData);
显示增强图像和像素标签数据。
RGB = Cell(numobservations,1);为了k = 1:numobservations i = data {k,1};c =数据{k,2};RGB {K} = Labeloverlay(I,C);结尾蒙太奇(RGB)
第二个增强中心将图像和像素标签图像裁剪成目标大小。类中定义了这些操作centerCropImageAndLabel
辅助功能在此示例结束时。
targetsize = [800 800];PreprocessedTrainingData = Transform(AugmentedTrainingData,......@(数据)centerCropImageAndLabel(数据、targetSize));
读取所有预处理数据。
data = readall (preprocessedTrainingData);
显示预处理的图像和像素标签数据。
RGB = Cell(numobservations,1);为了k = 1:numobservations i = data {k,1};c =数据{k,2};RGB {K} = Labeloverlay(I,C);结尾蒙太奇(RGB)
这jitterImageColorAndWarp
Helper函数对图像数据应用随机颜色抖动,然后对图像和像素标签图像数据应用相同的仿射变换。变换由[0.8 1.5]范围内的缩放因子、水平反射和[- 30,30]范围内的旋转的随机组合组成。输入数据
和输出出
是两元素单元数组,其中第一个元素是图像数据,第二个元素是像素标签图像数据。
函数OUT = jitterimageColorandwarp(数据)%解压原始数据。我={1}数据;C =数据{2};%应用随机颜色抖动。我= jitterColorHSV (,“亮度”, 0.3,“对比”, 0.4,“饱和”,0.2);%定义随机仿射变换。tform = ronstaffine2d(“规模”,[0.8 1.5],“Xreflection”,真的,'回转'[-30] 30日);rut = AffineOutputView(大小(i),tform);%变换图像和边界框标签。augmentedImage = imwarp (tform,我“OutputView”,溃败);AugmentedLabel = IMWARP(C,TForm,“OutputView”,溃败);%返回增强数据。= {augmentedImage, augmentedLabel};结尾
这centerCropImageAndLabel
Helper函数创建一个以图像为中心的裁剪窗口,然后使用该裁剪窗口对图像和像素标签图像进行裁剪。输入数据
和输出出
是两元素单元数组,其中第一个元素是图像数据,第二个元素是像素标签图像数据。
函数out = centerCropImageAndLabel(data,targetSize) win = centerCropWindow2d(size(data{1}),targetSize);{1} = imcrop(数据{1},赢得);{2} = imcrop(数据{2},赢得);结尾
CenterCropWindow2d.
(图像处理工具箱)|randomAffine2d
(图像处理工具箱)|OrneClopwindow2d.
(图像处理工具箱)