主要内容

使用图像处理工具箱增强图像用于深度学习工作流

此示例示出了如何MATLAB®和图像处理工具箱™可以执行常见的种类的图像增强的深学习工作流的一部分。

图像处理工具箱功能使您可以实现图像增强的常见样式。此示例演示了五种常见类型的转换:

然后,该示例展示了如何执行对数据存储中的图像数据应用增强使用多种类型转换的组合。

您可以使用增强训练数据来训练网络。有关使用增强图像训练网络的示例,请参见准备图像到图像回归的数据存储

读取并显示的样本图像。为了比较不同类型的图像增强的效果,每个变换使用相同的输入图像。

imOriginal = imread ('kobi.png');imshow(imoriginal)

随机图像扭曲转换

ronceaffine2d.(图像处理工具箱)函数创建一个随机化2 d仿射变换从旋转,平移,缩放(调整大小),反射的组合,和剪断。您可以指定要包含的转换和变换参数的范围。如果指定的范围内为两个元素的数值向量,那么ronceaffine2d.从指定的间隔中选择均匀概率分布中参数的值。有关更多控制参数值范围的控制,您可以使用函数句柄指定范围。

控制由所创建的翘曲图像的空间范围和分辨率imwarp.(图像处理工具箱)通过使用affineOutputView(图像处理工具箱)函数。

回转

创建随机旋转变换其旋转的角度在输入图像从范围[-45,45]度随机选择的。

TForm的= randomAffine2d('回转',[ -  45 45]);outputView = affineOutputView(大小(imOriginal), tform);inaugmented = imwarp(imoriginal,tform,“OutputView”, outputView);imshow (imAugmented)

翻译

创建一个转换变换,通过从范围[-50,50]像素随机选择的距离水平和垂直移动输入图像。

TForm的= randomAffine2d(“XTranslation”50 [-50],'ytranslation',[ -  50 50]);outputView = affineOutputView(大小(imOriginal), tform);inaugmented = imwarp(imoriginal,tform,“OutputView”, outputView);imshow (imAugmented)

规模

创建一个刻度转换,用于使用从范围[1.2,1.5]中随机选择的比例因子来调整输入图像的大小。该转换在水平和垂直方向上的相同因子调整图像大小。

TForm的= randomAffine2d(“规模”,[1.2,1.5]);outputView = affineOutputView(大小(imOriginal), tform);inaugmented = imwarp(imoriginal,tform,“OutputView”, outputView);imshow (imAugmented)

反射

创建一个反射变换,以50%的概率在每个维度上翻转输入图像。

TForm的= randomAffine2d('XReflection',真的,“YReflection”,真的);outputView = affineOutputView(大小(imOriginal), tform);inaugmented = imwarp(imoriginal,tform,“OutputView”, outputView);imshow (imAugmented)

创建具有剪切角的水平剪切变换从[-30,30]的范围内随机地选择。

TForm的= randomAffine2d('XShear'[-30] 30日);outputView = affineOutputView(大小(imOriginal), tform);inaugmented = imwarp(imoriginal,tform,“OutputView”, outputView);imshow (imAugmented)

使用自定义选择函数控制转换参数的范围

在前面的变换中,变换参数的范围由二元数值向量指定。要对转换参数的范围进行更多的控制,请指定函数句柄而不是数字向量。函数句柄不接受输入参数,并为每个参数生成一个有效值。

例如,该代码从一组离散的90度旋转角度中选择一个旋转角度。

角度= 0:90:270;TForm的= randomAffine2d('回转'@()角度(randi (4)));outputView = affineOutputView(大小(imOriginal), tform);inaugmented = imwarp(imoriginal,tform,“OutputView”, outputView);imshow (imAugmented)

控制填值

当您使用几何变换翘曲图像时,输出图像中的像素可以映射到输入图像的边界之外的位置。在这种情况下,imwarp.将填充值分配给输出图像中的那些像素。默认情况下,imwarp.选择黑色作为填充值。您可以通过指定来更改填充值'FillValues'名称 - 值对的参数。

创建随机旋转变换,然后应用转换并指定灰色填充值。

TForm的= randomAffine2d('回转',[ -  45 45]);outputView = affineOutputView(大小(imOriginal), tform);inaugmented = imwarp(imoriginal,tform,“OutputView”,outputview,'FillValues', (128 128 128));imshow (imAugmented)

种植的转换

要创建所需大小的输出图像,请使用randomWindow2d(图像处理工具箱)CenterCropWindow2d.(图像处理工具箱)职能。小心选择包括图像中所需的内容的窗口。

指定裁剪区域的所需尺寸为以下形式的2元素的矢量[高度宽度].

targetsize = [200,100];

从图像的中心裁剪图像,以目标尺寸。

WIN = CONTERCROPWINDOW2D(尺寸(imoriginal),靶向化);imcentercrop = imcrop(imoriginal,win);imshow(imcentercrop)

从图像中的随机位置裁剪图像,以目标尺寸。

赢得= randomWindow2d(大小(imOriginal), targetSize);imRandomCrop = imcrop (imOriginal,赢得);imshow (imRandomCrop)

颜色转换

您可以通过使用通过使用彩色图像随机调整色调,饱和度,亮度和对比度jittercolorhsv.(图像处理工具箱)函数。您可以指定哪些颜色转换包含和变换参数的范围。

您可以使用基本的数学运算随机调整灰度图像的亮度和对比度。

色调抖动

色调指定颜色的深浅,或颜色的上的色轮的位置。如色调从0变化到1,颜色从红色通过黄色,绿色,青色,蓝色,紫色,品红色,和返回到红色变化。色调抖动转移的颜色的灯罩显而易见的图像。

通过一个小的正调整输入图像的色调偏移从范围[0.05,0.15]随机选择的。现在是红三种颜色显得更橙色或黄色,那是橙色出现黄色或绿色等颜色。

imjittered = jittercolorhsv(imoriginal,'色调'[0.05 - 0.15]);蒙太奇({imoriginal,imjittered})

饱和抖动

饱和度是颜色的纯度。作为饱和度从0变化到1,从色调灰色(表示所有颜色的混合物)到单个纯色变化。饱和度抖动的变化如何钝痛或鲜艳的色彩。

通过从范围[-0.4,-0.1]中随机选择一个偏移量来调整输入图像的饱和度。当饱和度降低时,输出图像中的颜色显得更加柔和。

imjittered = jittercolorhsv(imoriginal,'饱和',[ -  0.4-0.1]);蒙太奇({imoriginal,imjittered})

亮度抖动

亮度是色调的量。由于亮度变化从0到1,颜色黑色变为白色。亮度抖动移位输入图像的暗度和亮度。

通过调整输入图像的亮度偏离范围随机选择的[-0.3,-0.1。图像显得较暗,当亮度降低预期。

imjittered = jittercolorhsv(imoriginal,'亮度',[ -  0.3-0.1]);蒙太奇({imoriginal,imjittered})

对比抖动

相反,随机抖动调整在输入图像中最暗和最亮的区域之间的区别。

通过从范围[1.2,1.4]中随机选择一个比例因子来调整输入图像的对比度。对比度增加,阴影变得更暗,高光变得更亮。

imjittered = jittercolorhsv(imoriginal,“对比”[1.2 - 1.4]);蒙太奇({imoriginal,imjittered})

灰度图像的亮度和对比度抖动

通过使用基本的数学运算,可以对灰度图像应用随机亮度和对比度抖动。

将样本图像转换为灰度。在[0.8,1]的范围内随机对比度刻度因子和[-0.15,0.15]的随机亮度偏移。将图像乘以对比度刻度因子,然后添加亮度偏移量。

imGray = rgb2gray (im2double (imOriginal));contrastFactor = 1 - 0.2 *兰德;brightnessOffset = 0.3 *(兰德- 0.5);imJittered = imGray。* contrastFactor + brightnessOffset;imJittered = im2uint8 (imJittered);蒙太奇({imGray, imJittered})

随机颜色到灰度

一种类型的颜色增强随机将来自RGB图像的颜色信息随机丢弃,同时保留网络所期望的信道数。该代码显示了“随机灰度”变换,其中RGB图像随着80%的概率随机转换为三个通道输出图像,其中r == g == b。

desiredProbability = 0.8;如果rand <= desiredProbability imJittered = repmat(rgb2gray(imOriginal),[1 1 3]);结尾imshow(imJittered)

其他图像处理操作

使用变换函数将图像处理工具箱函数的任意组合应用于输入图像。添加噪声和模糊是深度学习应用程序中常用的两种图像处理操作。

合成噪声

合成噪声适用于输入图像,使用imnoise.(图像处理工具箱)函数。您可以指定使用哪种噪声模型,如高斯噪声、泊松噪声、椒盐噪声和乘性噪声。您还可以指定噪音的强度。

imSaltAndPepperNoise = imnoise (imOriginal,'椒盐', 0.1);imGaussianNoise = imnoise (imOriginal,“高斯”);蒙太奇({imSaltAndPepperNoise, imGaussianNoise})

合成模糊

要对图像应用随机高斯模糊,请使用Imgaussfilt.(图像处理工具箱)函数。您可以指定平滑量。

sigma = 1 + 5 *兰特;Imblurred = Imgaussfilt(Imoriginal,Sigma);imshow(imblurred)

对数据存储中的图像数据应用增强

在实际的深度学习的问题,图像增强管通常结合了多种操作。数据存储是阅读和增强图像集的便捷方式。

数据存储是阅读和增强图像集的便捷方式。该示例的本部分显示了如何在培训图像分类和图像回归问题的上下文中定义增强数据存储的数据增强管道。

首先,创建一个imageDatastore包含未处理的图像。本例中的图像数据存储包含带有标签的数字图像。

digitDatasetPath =完整文件(matlabroot,“工具箱”'nnet'......'nndemos''nndatasets'“DigitDataset”);imd = imageDatastore (digitDatasetPath,......“IncludeSubfolders”,真的,......“LabelSource”'foldernames');imds.ReadSize = 6;

图像分类

在图像分类中,分类器应该知道随机改变的图像版本仍然代表相同的图像类别。为了增加图像分类的数据,在保持相应的分类标签不变的情况下增加输入图像就足够了。

在原始图像数据存储中增加随机高斯模糊,盐和胡椒噪声,随机缩放和旋转的图像。这些操作在helper函数中定义classificationAugmentationPipeline在这个例子的最后。对训练数据进行数据增强变换函数。

dsTrain =变换(IMDS,@ classificationAugmentationPipeline,'inclordinfo',真的);

可视化来自增强管道的输出示例。

datapreview = preview(dstrain);蒙太奇(DataPreview(:,1))标题(“图像分类的增强图像”

形象回归

图像到图像回归的图像增强更加复杂,因为您必须对输入和响应图像应用相同的几何变换。关联输入和响应图像对使用结合函数。通过使用变换一个或两个图像中的每对变换函数。

合并图像数据存储的两个相同副本IMDS。当从组合数据存储读取数据时,在双列单元阵列中返回图像数据,其中第一列表示网络输入图像,第二列包含网络响应。

dsCombined =结合(imd, imd);蒙太奇(预览(dsCombined) ','尺寸',[6 2])标题(“增强前的输入和响应组合”

用一系列的图像处理操作来增强每对训练图像:

  • 调整输入和响应图像的大小为32 × 32像素。

  • 加入盐和胡椒噪声只有输入图像。

  • 创建一个具有随机缩放和旋转的转换。

  • 对输入和响应图像应用相同的转换。

这些操作在helper函数中定义imageRegressionAugmentationPipeline在这个例子的最后。对训练数据进行数据增强变换函数。

dsTrain =变换(dsCombined @imageRegressionAugmentationPipeline);蒙太奇(预览(dsTrain) ','尺寸',[6 2])标题(“增强后的组合输入和响应对”

有关包含训练和评估图像到图像回归网络的完整示例,请参见准备图像到图像回归的数据存储

金宝app支持功能

classificationAugmentationPipeline辅助功能增强图像分类。数据输入dataOut是两个元素单元阵列,其中第一元素是网络输入图像,第二个元素是分类标签。

函数[DATAOUT,信息] = classificationAugmentationPipeline(DATAIN,信息)DATAOUT =细胞([大小(DATAIN,1),2]);为了idx = 1:大小(数据,1)temp = datain {idx};%添加随机高斯模糊temp = imgaussfilt(临时、1.5 *兰德);%加盐和辣椒噪音temp = imnoise(临时'椒盐');%添加随机旋转和比例TForm的= randomAffine2d(“规模”,[0.95,1.05],'回转'[-30] 30日);outputView = affineOutputView(大小(临时),tform);temp = imwarp(临时、tform“OutputView”, outputView);%形态第二列通过trainNetwork预期它是希望的响应,%在这种情况下,分类标签dataOut (idx:) = {temp, info.Label (idx)};结尾结尾

imageRegressionAugmentationPipeline辅助函数增强图像,用于图像到图像的回归。数据输入dataOut是二元单元阵列,其中第一个元素是网络输入图像,第二个元素是网络响应图像。

函数DataOut = ImageEriventionAugmentationPipine(Datain)DataOut = Cell([大小(数据,1),2]);为了IDX = 1:尺寸(DATAIN,1)%调整图像大小为32 × 32像素,并转换为数据类型单一inputImage = im2single(imresize(dataIn{idx,1},[32 32]));targetImage = im2single(imresize(dataIn{idx,2},[32 32]));%加盐和辣椒噪音inputImage = imnoise (inputImage,'椒盐');%添加随机旋转和比例TForm的= randomAffine2d(“规模”[0.9, 1.1],'回转'[-30] 30日);OutputView = AffineOutputView(大小(InputImage),TForm);%使用具有相同TForm和OutporView的IMWARP来增加图像% 以同样的方式InputImage = IMWARP(InputImage,Tform,“OutputView”, outputView);targetImage = imwarp (targetImage tform,“OutputView”, outputView);dataOut (idx:) = {inputImage, targetImage};结尾结尾

也可以看看

|

相关的例子

更多关于