在没有其他的方式进行搜集图片时,数据增强是一种增加图片多样性的非常好的方式。在机器学习中特别是深度神经网络,数据是非常重要的,数据甚至可以提升网络一个量级。在训练的时候,我们需要成千上万张图片,甚至上千万的图片。 搜集这些图片,是非常繁琐的事情,但是有非常重要。没有好的数据可以说模型也就没啥用了。这里就有了不同的数据增强的方式。其中比较常用的数据增强的方式是:翻转,拉平,裁剪,对比度等等。这样可以将原来比较少的图片增加到可观的数量。
在本文中进行介绍将200多张图片,通过数据增强的方式增加到2000多张。使用的工具是numpy,opencv,sklearn以及python等工具。即使是刚入门的新手可以轻松使用。图片中包括一些rgb图像,也有一些灰度图。灰度图和rgb图像最大的不同是图像的通道数不同,rgb3通道,灰度图单通道。 numpy是一个使用起来非常简单的矩阵库,可以对矩阵进行各种操作,我们的图片就是一个矩阵,所以使用numpy对图像进行处理也非常简单。 下面是我们的一些操作: 翻转:我们要进行翻转图片,首先就要对图片的行和列进行翻转,即:第一列和最后一列进行交换,然后整个矩阵执行这个操作。numpy中有个方法可以实现:fliplr() 实现对矩阵进行水平翻转。如果是列进行翻转,numpy也有个函数实现:flipud(),下面是效果: 旋转:旋转实现我们使用的是sklearn库,sklearn可以对图像进行添加噪声,滤波等操作。如果是顺时针旋转,我们只要给函数一个负值,如果给函数一个正值,图片会进行逆时针旋转。下面是实现的效果。 变化:我们可以通过改变图像上的一些数值例如上,下,左,右,进而改变图片中的某些信息的位置。例如我们根据下面的公式去调整图中信息的位置。 这时就会原来的位置 添加噪声:我们使用sklearn库中的random_noise(),对图片进行随机添加噪声,这样做的好处是使图像的噪声达到正则化的目的,这个可以解决一些过拟合问题。 滤波:这里滤波使用的是高斯滤波,使用的库时opencv库,函数为gaussian_blur(),我们通过改变滤波核的大小,进行修改滤波的结果。 现在我们使用所有的方法进行图像增强,我们首先将图片的名字存储到一个数组里,然后随机从数组里取出一张图片,对这个图片进行随机操作,操作方式是按照上面的操作方式进行。就是随机变换。直到变换的图片达到2000张。 下面是我们的代码,我们对每一种操作都进行了函数定义,然后通过主函数进行调用。 我们来看下主函数,读取完图片后然后随机的进行图片变换 这里有两个路径,一个是读取原图片的路径,一个是保存图片的路径。 一旦外部while循环从图像数组中选择了一个随机图像,我们将读取该图像。从随机库中随机选取适用于读取图像的变换次数。这个外循环将运行,直到计数(I)达到2000(要生成的图像数)。 如果上述操作完成,我们的图像就增加到了2000张,即目标完成。这里有下载图片链接 图片 这里还有整个项目的 Images.zip |