MATLAB图像处理:146:为深度学习工作流做数据增强

您所在的位置:网站首页 紫色rgb范围 MATLAB图像处理:146:为深度学习工作流做数据增强

MATLAB图像处理:146:为深度学习工作流做数据增强

2023-05-06 00:12| 来源: 网络整理| 查看: 265

此示例演示如何执行常见类型的随机图像增强,如几何变换、裁剪和添加噪声。

图像处理工具箱函数使您能够实现图像增强的常见类型。此示例演示了五种常见的转换类型:

随机图像变形变换剪切变换颜色变换合成噪声合成模糊

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

您可以使用增强训练数据来训练网络。有关使用增强映像训练网络的示例,请参阅为映像到映像回归准备数据存储(深度学习工具箱)。

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

imOriginal = imresize(imread("kobi.png"),0.25); imshow(imOriginal)

图像的随机变形变换

randomAffine2d 函数从旋转、平移、缩放(调整大小)、反射和剪切的组合中创建随机的 2-D 仿射变换。您可以指定要包含的变换以及变换参数的范围。如果将范围指定为 2 元素的数值向量,则randomAffine2d从指定区间内的均匀概率分布中选择参数值。若要更好地控制参数值的范围,可以使用函数句柄指定范围。

使用affineOutputView函数,控制由 imwarp 创建的变形图像的空间边界和分辨率。

旋转

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

tform = randomAffine2d(Rotation=[-45 45]); outputView = affineOutputView(size(imOriginal),tform); imAugmented = imwarp(imOriginal,tform,OutputView=outputView); imshow(imAugmented)

平移

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

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

比例

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

tform = randomAffine2d(Scale=[1.2,1.5]); outputView = affineOutputView(size(imOriginal),tform); imAugmented = imwarp(imOriginal,tform,OutputView=outputView); imshow(imAugmented)

反射

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

tform = randomAffine2d(XReflection=true,YReflection=true); outputView = affineOutputView(size(imOriginal),tform); imAugmented = imwarp(imOriginal,tform,OutputView=outputView); imshow(imAugmented)

剪切

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

tform = randomAffine2d(XShear=[-30 30]); outputView = affineOutputView(size(imOriginal),tform); imAugmented = imwarp(imOriginal,tform,OutputView=outputView); imshow(imAugmented)

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

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

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

angles = 0:90:270; tform = randomAffine2d(Rotation=@() angles(randi(4))); outputView = affineOutputView(size(imOriginal),tform); imAugmented = imwarp(imOriginal,tform,OutputView=outputView); imshow(imAugmented)

控制填充值

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

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

tform = randomAffine2d(Rotation=[-45 45]); outputView = affineOutputView(size(imOriginal),tform); imAugmented = imwarp(imOriginal,tform,OutputView=outputView, ... FillValues=[128 128 128]); imshow(imAugmented)

裁剪变换

要创建所需大小的输出图像,请使用 randomWindow2d 和centerCropWindow2d 函数。请仔细选择图像中包含所需内容的窗口。

将裁剪区域的所需大小指定为 [height, width] 形式的 2 元素向量。

targetSize = [200,100];

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

win = centerCropWindow2d(size(imOriginal),targetSize); imCenterCrop = imcrop(imOriginal,win); imshow(imCenterCrop)

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

win = randomWindow2d(size(imOriginal),targetSize); imRandomCrop = imcrop(imOriginal,win); imshow(imRandomCrop)

颜色变换

您可以使用 jitterColorHSV 函数,随机调整彩色图像的色调、饱和度、亮度和对比度。您可以指定包含哪些颜色变换以及变换参数的范围。

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

色调抖动

色调指定颜色的阴影,或颜色在色轮上的位置。由于色调从 0 到 1 不等,颜色从红色到黄色、绿色、青色、蓝色、紫色、品红色,再回到红色。色调抖动会改变图像中颜色的阴影呈现。

通过从范围 [0.05, 0.15] 中随机选择的小正偏移调整输入图像的色调。红色的颜色现在看起来更橙色或黄色,橙色的颜色显示为黄色或绿色,依此类推。

imJittered = jitterColorHSV(imOriginal,Hue=[0.05 0.15]); montage({imOriginal,imJittered})

饱和抖动

饱和度是颜色的纯度。由于饱和度从 0 到 1 不等,因此色调从灰色(表示所有颜色的混合)变为单一纯色。饱和度抖动会改变颜色的暗淡或鲜艳程度。

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

imJittered = jitterColorHSV(imOriginal,Saturation=[-0.4 -0.1]); montage({imOriginal,imJittered})

亮度抖动

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

通过从范围 [-0.3, -0.1] 中随机选择的偏移量调整输入图像的亮度。当亮度降低时,图像会像预期的那样显得较暗。

imJittered = jitterColorHSV(imOriginal,Brightness=[-0.3 -0.1]); montage({imOriginal,imJittered})

对比度抖动

对比度抖动随机调整输入图像中最暗和最亮区域之间的差异。

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

imJittered = jitterColorHSV(imOriginal,Contrast=[1.2 1.4]); montage({imOriginal,imJittered})

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

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

将示例图像变换为灰度。指定 [0.8, 1] 范围内的随机对比度比例因子和 [-0.15, 0.15] 范围内的随机亮度偏移。将图像乘以对比度比例因子,然后添加亮度偏移。

imGray = rgb2gray(im2double(imOriginal)); contrastFactor = 1-0.2*rand; brightnessOffset = 0.3*(rand-0.5); imJittered = imGray.*contrastFactor + brightnessOffset; imJittered = im2uint8(imJittered); montage({imGray,imJittered})

随机化的彩色到灰度

有一类颜色增强,会随机删除 RGB 图像中的颜色信息,同时保留网络预期的通道数。以下代码显示了一个“随机灰度”变换,其中 RGB 图像以 80% 的概率随机变换为 R == G == B 的三通道输出图像。

desiredProbability = 0.8; if rand


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3