主要内容

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

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

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

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

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

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

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

随机图像扭曲变换

randomAffine2d(图像处理工具箱)功能从旋转,翻译,刻度(调整大小),反射和剪切的组合中创建随机的2-D仿射转换。您可以指定要包含的转换和转换参数范围。如果将该范围指定为双元数字矢量,则randomAffine2d在指定的区间内从均匀概率分布中选择参数的值。要更多地控制参数值的范围,可以使用函数句柄指定范围。

控制由此创建的翘曲图像的空间范围和分辨率imwarp(图像处理工具箱)通过使用仿射输出视图(图像处理工具箱)功能。

旋转

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

tform = ronstaffine2d('回转'45, [-45]);outputView = affineOutputView(大小(imOriginal), tform);imAugmented = imwarp (imOriginal tform,“OutputView”,OutputView);imshow(占用)

翻译

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

tform = ronstaffine2d('Xtranslation',[-50 50],“YTranslation”, 50 [-50]);outputView = affineOutputView(大小(imOriginal), tform);imAugmented = imwarp (imOriginal tform,“OutputView”,OutputView);imshow(占用)

规模

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

tform = ronstaffine2d(“规模”[1.2, 1.5]);outputView = affineOutputView(大小(imOriginal), tform);imAugmented = imwarp (imOriginal tform,“OutputView”,OutputView);imshow(占用)

反射

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

tform = ronstaffine2d('Xreflection',真的,“YReflection”,真正的);outputView = affineOutputView(大小(imOriginal), tform);imAugmented = imwarp (imOriginal tform,“OutputView”,OutputView);imshow(占用)

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

tform = ronstaffine2d('xshear'[-30] 30日);outputView = affineOutputView(大小(imOriginal), tform);imAugmented = imwarp (imOriginal tform,“OutputView”,OutputView);imshow(占用)

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

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

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

角度= 0:90:270;tform = ronstaffine2d('回转',@()角(randi(4));outputView=仿射输出视图(大小(原始),tform);imAugmented=imwarp(imOriginal,tform,“OutputView”,OutputView);imshow(占用)

控制填充值

当您使用几何变换扭曲图像时,输出图像中的像素可以映射到输入图像边界之外的位置。在这种情况下,imwarp为输出图像中的像素赋一个填充值。默认情况下,imwarp选择黑色作为填充值。属性可以更改填充值'fillvalues'名称值对参数。

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

tform = ronstaffine2d('回转'45, [-45]);outputView = affineOutputView(大小(imOriginal), tform);imAugmented = imwarp (imOriginal tform,“OutputView”outputView,'fillvalues',[128 128 128]); imshow(图像增强)

裁剪变换

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

将裁剪区域的所需大小指定为表格的2元素矢量[高度宽度].

targetSize = [200100];

将图像从图像中心裁剪到目标大小。

赢得= centerCropWindow2d(大小(imOriginal), targetSize);imCenterCrop = imcrop (imOriginal,赢得);imshow (imCenterCrop)

从图像中的随机位置裁剪到目标大小。

win=randomWindow2d(大小(imOriginal),目标大小);imRandomCrop=imcrop(imOriginal,win);imshow(imRandomCrop)

彩色变换

属性可以随机调整彩色图像的色调、饱和度、亮度和对比度jitterColorHSV(图像处理工具箱)功能。您可以指定包含哪些颜色转换和转换参数范围。

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

色相抖动

Hue指定颜色的阴影,或颜色轮子上的颜色位置。随着色调的变化从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));对比度= 1-0.2 *兰特;Brightnessoffset = 0.3 *(兰德-0.5);imjittered = imgray。*对比度+亮度OFFSET;imjittered = im2uint8(imjittered);蒙太奇({imgray,imjittered})

随机颜色到灰度

一种颜色增强随机地从RGB图像中删除颜色信息,同时保留网络所期望的通道数量。这段代码显示了一个“随机灰度”变换,其中RGB图像以80%的概率随机转换为三通道输出图像,其中R == G == B。

accepateprobability = 0.8;如果rand <= acceptprobiability imjittered = repmat(rgb2gray(imoriginal),[1 1 3]);结束imshow(imjittered)

其他图像处理操作

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

合成噪声

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

imsaltandpeppernise=imnoise(imOriginal,的盐和胡椒,0.1); imGaussianNoise=imnoise(原始,'高斯'); 蒙太奇({imsaltandpeppernise,imGaussianNoise})

合成模糊

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

σ= 1 + 5 *兰特;imBlurred = imgaussfilt (imOriginal,σ);imshow (imBlurred)

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

在实践深度学习问题中,图像增强流水线通常组合多个操作。数据存储是读取和增强图像集合的便捷方式。

数据存储是读取和增加图像集合的一种方便的方法。示例的这一部分展示了如何定义数据增强管道,以在训练图像分类和图像回归问题的上下文中增强数据存储。

首先,创建一个图像数据存储包含未处理的图像。此示例中的图像数据存储包含与标签的数字图像。

digitdatasetpath = fullfile(matlabroot,“工具箱”“nnet”......“nndemos”“nndatasets”“DigitDataset”);imds = imageageataStore(DigitDatasetPath,......“包含子文件夹”,真的,......“标签源”'foldernames');imds.readsize = 6;

图像分类

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

使用随机高斯模糊、椒盐噪声、随机缩放和旋转增强原始图像数据存储中的图像。这些操作在辅助函数中定义分类纯粹植物在本例的末尾,使用转变功能。

dstrain =转换(IMDS,@ ClassificationAtationPipine,“IncludeInfo”,真正的);

可视化来自扩展管道的输出示例。

dataPreview =预览(dsTrain);蒙太奇(dataPreview(: 1)标题(“用于图像分类的增强图像”

图像回归

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

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

dsCombined=联合收割机(imds,imds);蒙太奇(预览版(DSC),“大小”2[6])标题(“增强前的组合输入和响应对”

使用一系列图像处理操作增加每对训练图像:

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

  • 仅将盐和辣椒噪声加入到输入图像中。

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

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

这些操作在辅助功能中定义图像回归增强管道在本例的末尾,使用转变功能。

dstrain =转换(dscombined,@ imageErightionAugationPipine);蒙太奇(预览(Dstrain)',“大小”2[6])标题(“增强后的输入和响应组合”

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

万博1manbetx支持功能

分类纯粹植物辅助函数用于增强图像以进行分类。dat数据输出是双元素单元格数组,其中第一个元素是网络输入图像,第二个元素是分类标签。

功能[Dataout,Info] =分类应用程序(数据,信息)DataOut = Cell([大小(数据,1),2]);idx = 1:size(dataIn,1) temp = dataIn{idx};%添加随机高斯模糊temp = imgaussfilt(temp,1.5 * rand);加入盐和胡椒的声音温度=噪声(温度,的盐和胡椒);%添加随机旋转和缩放tform = ronstaffine2d(“规模”,[0.95,1.05],'回转'[-30] 30日);OutputView = AffineOutputView(大小(温度),TForm);temp = imwarp(temp,tform,“OutputView”,OutputView);%表格预期的第二栏,由Trainnetwork是预期的响应,在这种情况下的分类标签%dataout(idx,:) = {temp,info.label(idx)};结束结束

图像回归增强管道辅助函数为图像到图像的回归增加图像。dat数据输出是两个元素单元阵列,其中第一个元素是网络输入映像,第二个元素是网络响应映像。

功能dataOut = cell([size(dataIn,1),2]); / /删除数据IDX = 1:大小(数据,1)%将图像调整为32×32像素并转换为单个单个数据类型InputImage = IM2Single(IMResize(Datain {IDX,1},[32 32]));targetimage = im2single(Imresize(Datain {idx,2},[32 32]));加入盐和胡椒的声音InputImage = imnoise(InputImage,的盐和胡椒);%添加随机旋转和缩放tform = ronstaffine2d(“规模”,[0.9,1.1],'回转'[-30] 30日);outputView = affineOutputView(大小(inputImage), tform);%使用imwarp与相同的格式和outputView来增加两个图像% 以同样的方式inputImage = imwarp (inputImage tform,“OutputView”,outputView);targetImage=imwarp(targetImage,tform,“OutputView”,OutputView);dataout(idx,:) = {InneepImage,TargetImage};结束结束

另请参阅

|

相关例子

更多关于