主要内容

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

这个例子展示了如何用MATLAB®和图像处理工具箱™可以执行常见类型的图像增强作为深度学习工作流程的一部分。

图像处理工具箱功能使您能够实现图像增强的共同风格。这个案例展示了五个常见的转换类型:

然后示例展示了如何申请增加数据存储的图像数据使用多种类型的转换的结合。

您可以使用增强训练数据训练网络。训练一个网络的例子使用增强图像,明白了数据存储准备Image-to-Image回归

读取和显示一个示例图像。比较不同类型的图像增强的影响,每一个转换都使用相同的输入图像。

imOriginal = imread (“kobi.png”);imshow (imOriginal)

随机图像扭曲的转换

randomAffine2d(图像处理工具箱)函数创建一个随机二维仿射变换的旋转、平移、尺度(调整),反射和剪切。您可以指定转换包括和转换参数的范围。如果您指定范围2-element数值向量,randomAffine2d选择一个参数的值从一个统一的概率分布在指定的时间间隔。更多的控制参数值的范围,您可以指定使用一个函数处理范围。

控制的空间范围和分辨率由扭曲的形象imwarp(图像处理工具箱)通过使用affineOutputView(图像处理工具箱)函数。

旋转

创建一个随机旋转变换,旋转输入图像的随机选取一个角度范围-45,45度。

tform = randomAffine2d (“旋转”45,[-45]);outputView = affineOutputView(大小(imOriginal), tform);imAugmented = imwarp (imOriginal tform,“OutputView”,outputView);imshow (imAugmented)

翻译

创建一个翻译转换,改变输入图像水平和垂直距离选择随机的范围(-50年,50)像素。

tform = randomAffine2d (“XTranslation”50 [-50],“YTranslation”,50 [-50]);outputView = affineOutputView(大小(imOriginal), tform);imAugmented = imwarp (imOriginal tform,“OutputView”,outputView);imshow (imAugmented)

规模

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

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

反射

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

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

剪切

创建一个水平剪切转换与剪切角随机选择的范围(-30,30)。

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

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

在前面的转换,转换参数的范围是由双元素指定数值向量。更多的控制范围的转换参数,指定一个函数处理而不是数值向量。函数句柄不接受输入参数和收益率每个参数的有效值。

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

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

控制填值

当你使用几何变换,经图像像素的输出图像可以映射到一个位置范围以外的输入图像。在这种情况下,imwarp分配一个填补这些输出图像的像素值。默认情况下,imwarp选择黑色作为填补值。你可以改变填充指定的值“FillValues”名称-值对的论点。

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

tform = randomAffine2d (“旋转”45,[-45]);outputView = affineOutputView(大小(imOriginal), tform);imAugmented = imwarp (imOriginal tform,“OutputView”outputView,“FillValues”,(128 128 128));imshow (imAugmented)

种植的转换

创建输出所需的大小的图像,使用randomWindow2d(图像处理工具箱)centerCropWindow2d(图像处理工具箱)功能。小心选择一个形象窗口,包括所需的内容。

指定所需的大小裁剪区域的2-element向量的形式高度,宽度]。

targetSize = [200100];

作物图像目标从图像的中心。

赢得= centerCropWindow2d(大小(imOriginal), targetSize);imCenterCrop = imcrop (imOriginal,赢得);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})

随机Color-to-Grayscale

一种颜色增加随机滴从RGB图像的颜色信息,同时保留所期望的数量的渠道网络。这个代码显示了一个“随机灰度”转换的RGB图像随机有80%概率转化为一个三个通道输出图像R = = G = = B。

desiredProbability = 0.8;如果兰德< = desiredProbability imJittered = repmat (rgb2gray (imOriginal) [1 1 3]);结束imshow (imJittered)

其他图像处理操作

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

合成噪声

应用合成噪声输入图像,使用imnoise(图像处理工具箱)函数。您可以指定使用哪个噪声模型,如高斯、泊松分布、盐和胡椒,乘法噪声。您还可以指定的强度噪声。

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

合成模糊

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

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

申请增加数据存储的图像数据

在实际深入学习问题,图像增强管道通常结合了多个操作。数据存储是一个便捷的途径,阅读和增强图像的集合。

本节的例子显示了如何定义数据增加管道,增加数据存储的环境中训练图像分类和图像回归问题。

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

digitDatasetPath = fullfile (matlabroot,“工具箱”,“nnet”,“nndemos”,“nndatasets”,“DigitDataset”);imd = imageDatastore (digitDatasetPath,“IncludeSubfolders”,真的,“LabelSource”,“foldernames”);洛桑国际管理发展学院。ReadSize = 6;

图像分类

在图像分类,分类器应该学习随机改变版本的图像仍然是相同的图像类。增加数据的图像分类,是足以增加而相应的输入图像分类标签不变。

增强图像的原始图像数据存储与随机高斯模糊,椒盐噪声,随机的规模和旋转。这些操作定义的helper函数classificationAugmentationPipeline最后这个例子。应用数据增加训练数据使用变换函数。

@classificationAugmentationPipeline dsTrain =变换(imd,“IncludeInfo”,真正的);

想象一个示例的输出来自增强管道。

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

形象回归

图像增强image-to-image回归更为复杂,因为你必须申请相同的几何转换输入和响应图像。副双输入和响应图像通过使用结合函数。对每组图像变换一个或两个使用变换函数。

将两个相同的副本的图像数据存储洛桑国际管理发展学院。当数据从数据存储,读取图像数据被返回为一个两列单元阵列,其中第一列表示网络输入图像和第二列包含网络响应。

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

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

  • 调整输入和响应图像32-by-32像素。

  • 盐和胡椒噪声添加到输入图像。

  • 创建一个随机的规模和旋转变换。

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

这些操作定义的helper函数imageRegressionAugmentationPipeline最后这个例子。应用数据增加训练数据使用变换函数。

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

对于一个完整的示例,包括培训和评估一个image-to-image回归网络,看到的数据存储准备Image-to-Image回归

金宝app支持功能

classificationAugmentationPipelinehelper函数增加图像的分类。dataIndataOut双元素细胞阵列,其中第一个元素是网络输入图像和第二个元素是分类标签。

函数[dataOut,信息]= classificationAugmentationPipeline (dataIn信息)dataOut =细胞([大小(dataIn, 1), 2));idx = 1:尺寸(dataIn 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)};结束结束

imageRegressionAugmentationPipelinehelper函数增加图像image-to-image回归。dataIndataOut双元素细胞阵列,其中第一个元素是网络输入图像和第二个元素是网络响应的形象。

函数dataOut = imageRegressionAugmentationPipeline (dataIn) dataOut =电池([大小(dataIn, 1), 2));idx = 1:尺寸(dataIn, 1)% 32-by-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 imwarp outputView来增强图像%相同的方式inputImage = imwarp (inputImage tform,“OutputView”,outputView);targetImage = imwarp (targetImage tform,“OutputView”,outputView);dataOut (idx:) = {inputImage, targetImage};结束结束

另请参阅

|

相关的例子

更多关于