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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。