python图像数据增强,图像处理Python

  python图像数据增强,图像处理Python

  AI预导:图像增强是一项非常强大的技术。它人为地为现有图像创建各种变化来增强图像数据集,包括缩放现有图像、将现有图像旋转几度以及切割和剪切图像。本文通过imgaug库探索Python的图像增强技术。为什么需要图像增强?

  深度学习卷积神经网络(CNN)需要大量图像才能有效训练模型。增强功能可以提高模型性能并减少过度拟合。可用于分类和对象发现的最常见数据集包括成千上万的图像。

  归纳是指在模型训练中,基于前所未有的数据对模型进行性能测试和验证。CNN是不可变的,所以物体即使根据大小、方向、光照可以看到,也是可以分类的。因此,您可以通过拍摄图像的小数据集、放大或缩小、垂直或水平翻转或改变亮度来调整对象的大小。这可以创建各种图像数据集。使用图像增强功能,可以从一组图像中创建各种图像集,用于图像分类、目标检测或图像分割。在充分了解问题域后,有必要采用增加训练数据集规模的扩展策略。什么时候需要应用图像增强?

  在训练模型之前,可以使用图像增强作为预处理。增强离线或预处理

  扩展被用作增加数据集大小的预处理步骤。通常,如果您有一个小的训练数据集要扩展,您可以这样做。

  在小型数据集上生成扩展是有用的,但是在应用于大型数据集时必须考虑磁盘空间。在线或实时扩展

  实用犀牛,实时应用增强。这通常适用于大型数据集,因为不需要将扩展映像保存到磁盘。

  在这种情况下,转换是小批量应用的,并输入到模型中。

  在线扩展模型在每个时间段显示不同的图像。在离线扩展中,扩展图像是训练集的一部分,根据持续时间显示多次。

  在通过在线数据扩展进行训练的过程中,会展示更多的样本,因此通过在线扩展可以更有效地部署模型。

  使用imgaug类演示图像扩展。基本图像处理技术翻转:垂直或水平翻转图像。

  将图像旋转指定的角度。

  剪切:像平行四边形一样移动图像的一部分。

  裁剪:对象在图像的不同位置以不同的比例显示。

  放大和缩小

  更改亮度和对比度

  现在,我们将使用imgaug库来探索这些数据扩展技术。

  Imgaug是一个用于图像扩展、关键/标志、包围盒、热图和分割图的库。

  pip安装imgaug

  在某些情况下,可能会出现形状错误。在这些情况下,请尝试使用以下命令pippintallimgaug-upgrade-no-deps。

  拍照,并使用基本的数据增强技术进行转换练习。导入所需的库。

  导入图像

  将imgaug作为ia导入

  将imgaug.augmenters作为iaa导入

  将numpy作为np导入

  进口熊猫作为pd

  将matplotlib.pyplot作为plt导入

  importmatplotlib . patchesapatches

  导入映射

  %matplotlib inline显示原始图像。

  查看原图image=imageio.imread "。\ car2.jpeg”,使用imageio。

  ia.imshow(image)).

  旋转图像

  您可以通过指定旋转角度来旋转图像。将图像旋转-50度到30度

  rotate=IAA.affine (rotate=(-50,30))

  rotated _ image=rotate . augment _ image(image)

  ia.imshow(rotated_image))。

  给图像添加噪声。

  我们将从模糊的高跟鞋分布中采样的不同噪声值添加到图像中。gu ssian _ noise=IAA . additionvegaussiannoise(10,20 ) ) ) )0) 0

  noise _ image=Gaussian _ noise . augment _ image(图像)

  ia.imshow(noise_image)).

  裁剪图像

  图像旁边的像素列/行被删除。以下示例将图像的一边裁剪30%。

  crop=IAA.crop (percent=(0,0.3 ) ) #裁剪图像

  corp _ image=crop . augment _ image(image)

  ia.imshow(CORP_image)).

  畸变像

  将shear=IAA.affine (shear=(0=(0,40))设置为0到40度。

  /p shear _ image=shear . augment _ image(image)

  ia.imshow(shear_image)

  翻转图像

  我们可以垂直或水平翻转图像。Fliplr水平翻转图像。

  #水平翻转图像

  flip_hr=iaa。Fliplr(p=1.0)

  flip _ HR _ image=flip _ HR . augment _ image(image)

  ia.imshow(flip_hr_image)

  翻转竖图flip_vr=iaa。Flipud(p=1.0)

  flip _ VR _ image=flip _ VR . augment _ image(image)

  ia.imshow(flip_vr_image)

  更改图像的亮度

  我们使用GammaContrast通过缩放像素值来调整图像亮度。gamma=(0.5,2.0)范围内的值似乎是合理的。我们也可以使用SigmoidContrast或LinearContrast来改变图像的亮度。

  image=imageio.imread("。\\img Aug\\car2.jpeg ")

  对比度=iaa。伽玛对比度(伽玛=2.0)

  contrast _ image=contrast . augment _ image(图像)

  ia.imshow(对比度_图像)

  缩放图像

  我们可以用变焦来放大或缩小图像。我们已经将图像缩放到图像高度/宽度的150%到80%。我们可以独立缩放每个轴。

  增强的对象检测

  我们绘制物体检测的包围盒。当我们放大图像时,我们希望边界框会相应地更新。

  Imgaug支持边界框。当我们旋转、剪切或裁剪图像时,对象周围的边界框会相应地更新。

  从imgaug导入边界框从imgaug.augmentables.bbs导入边界框,边界框。

  初始化原始图像周围的边界框。

  bbs=BoundingBoxesOnImage([

  边界框(x1=10,x2=520,y1=10,y2=300)

  ],shape=image.shape)

  在原图上方显示边框ia . im show(BBS . draw _ on _ image(image,size=2))。

  在下面的代码中,我们使用translate_percentage来移动图像,放大边界框并将其应用于图像。

  move=iaa。仿射(translate_percent={x: 0.1},scale=0.8)

  image_aug,bbs_aug=move(image=image,bounding _ boxes=bbs)

  ia . im show(BBS _ aug . draw _ on _ image(image _ aug,size=2))

  应用图像增强后,在图像外部处理边界框

  有时边界可能会延伸到图像之外,所以我们需要其他代码来处理这种情况。

  我们旋转图像,并尝试在对象周围绘制一个边界rotate _ bb=IAA . affine(rotate=(-50,30))

  image_aug,bbs_aug=rotate_bb(image=image,bounding _ boxes=bbs)

  ia . im show(BBS _ aug . draw _ on _ image(image _ aug,size=2))

  部分边框在图像之外。在下面的代码中,我们将完全或部分地将边框移出图像。

  裁剪部分位于外部的边界框,使其完全位于图像内部。

  我们创建一个填充函数,用1像素的白色边框和1像素的黑色边框填充图像:

  def pad(图像,由):

  image_border1=ia.pad(image,top=1,right=1,bottom=1,left=1,

  mode=常量,cval=255)

  image _ border 2=ia . pad(image _ border 1,top=减1,right=减1,

  底部=减1,左侧=减1,

  模式=常数,cval=0)

  返回图像_边框2

  然后,我们在图像上绘制一个边界框。我们先通过边界像素扩展图像平面,然后在图像平面中标记边界框def draw_bbs(image,bbs,BORDER):

  绿色=[0,255,0]

  橙色=[255,140,0]

  红色=[255,0,0]

  image_border=pad(image,border)

  对于bbs.bounding _ boxes中的bb:

  如果bb . is _ fully _ within _ image(image . shape):

  颜色=绿色

  elif bb . is _ partial _ within _ image(image . shape):

  颜色=橙色

  否则:

  颜色=红色

  image _ border=bb . shift(left=border,top=border)\。draw_on_image(image_border,size=2,color=颜色)

  返回图像_边框

  现在,我们对图像应用相同的旋转,并绘制边界框。

  旋转=iaa。仿射(旋转=(-50,30))

  image_aug,bbs_aug=rotate(image=image,bounding _ boxes=bbs)

  image_after=draw_bbs(image_aug,bbs_aug.remove_out_of_image()。clip_out_of_image(),100)

  ia.imshow(image_after)

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: