1. 加载和显示图片

由于imgaug只处理增强而不是图像输入/输出,我们需要另一个库来加载图像。在Python中,常见的选择是imageio和CV2。然而,()以BGR颜色空间返回图像,而不是RGB,需要重新排序通道轴。后一种方法的缺点是所有可视化函数(例如下面的())仍然需要输入RGB格式。

观察imshow源码后发现,imshow只能输入RGB格式,如果采用imageio读取不用转换通道格式,而使用CV2的话,需要转成RGB格式。其实当使用CV2的时候,()内部还是调用了(),只不过又把RGB转成了BGR……所以感觉这个()相当鸡肋。


(资料图片仅供参考)

2. 图像增强

imgaug的增强技术是从Augmenter父类派生的。要使用一种增强技术,我们需要用一组参数实例化增强对象。

仿射变换

Augmenter to apply affine transformations to images.

Affine类是对图片进行仿射变化的增强类,包括平移旋转缩放

如果不传入参数,该类会自动赋值一些变换参数,内部实现如下

几个主要的参数如下:

scale=None

缩放因子,表示无变化,表示缩小50%,还支持其他类型的参数以对不同轴做不同变化。

translate_percent=None

其中0表示无变化,表示平移图片大小的一半。常用的方式如下:

x轴随机平移左右平移0~比例,y轴同理上下平移

translate_px=None

以像素单位平移,和上面相同。

rotate=None

旋转取值范围在[-360,360],如果是元组,例如(30,60),会在范围内随机均匀采样。如果是列表,随机取列表中的某个值。

shear=None

错切角度在[-360,360],但是合适的范围在[-45,45]

order=1

插值方法,0表示最近邻,1表示双线性,常用的是这两个,还有其他方法。

cval=0

mode="constant"时要填充的常数值,输入元组代表范围取值,列表代表随机取值。

mode="constant"

填充新创建的像素时要使用的模式,默认用常数填充。

fit_output=False

经过一些仿射变化后,图像的一些边缘可能就会丢失,如果将该参数设置为True,那么整张图片会完整的显示出来,但是此时图像大小会发生改变。如果不想图像大小发生变化,用包裹增强对象即可。

以上输入的参数类型大致分为三类,数字,元组,列表,字典。其中数字就是对应的值,元组就是在这个范围内部均匀随机采样,列表就是随机采样列表值,字典可以针对x轴和y轴做不同变化,字典key对应的value可以是数字,元组,列表类型。此外,还有一种随机数类型,这里不做介绍。

 批量增强

imgaug支持批量图片的增强,如果这批图片的大小不一,那么只能使用数组,如果图片大小相同例如一批图片为[B,H,W,C],可以使用numpy张量格式,速度上会更快一些。

注意这里传入的参数是images。

 同时使用多种增强

我们可以使用Sequential来整合一系列增强对象,这和pytorch里面的有异曲同工之妙。如果希望增强不是按照定义的顺序而是随机,可以设置random_order=True。

其他的类似方法还有:

SomeOf表示选取给定增强中的某些增强;

OneOf表示只应用所有给定增强中的一个;

Sometimes按概率随机增强;

推荐内容