目录
一、数据集缺点
1.数据集样本量少,总共只有117张样本图片,其中的缺陷样本图片数量更少。数据样本不足容易导致模型发生过拟合现象,泛化能力不强。
2.图片像素大小为512*512,计算量大。如果对图片大小进行压缩或者将图片转为灰度图片都可能导致有用特征信息的丢失。
二、数据预处理
针对以上缺点,最简单有效的方法是对数据集样本量进行扩充,一般采用几何变换的方式来增加训练集样本。常用的几何变换方法有旋转、缩放平移。
1.图片的旋转和缩放
用cv2.getRotationMatrix2D生成变换矩阵M,再用warpAffine对图片应用仿射变换。为了生成多张不同旋转方式的图片,可以设定旋转角度范围,和图像缩放范围,每次在范围内随机取值生成旋转后图片。代码如下(代码仅展示思路,不严谨)
#设置图像旋转参数
RotateOrign=(250,250) #表示旋转中心
RotateAngle=(60,90) #表示顺时针旋转60-90度
RotateScale=(0.8,1) #表示图片旋转后会缩放到原来的0.8-1倍
#定义旋转操作函数
def Rotate(image,rotateOrign,rotateAngle,rotateScale):
img=cv2.imread(image)
rows,cols=img.shape[:2]
M=cv2.getRotationMatrix2D(rotateOrign,rotateAngle,rotateScale) #变换矩阵M
dst=cv2.warpAffine(img,M,(rows,cols))
return dst
#生成图片
for item in imgList:
for num in range(generateImgNum): #generateImgNum:生成图片数量
RotateAngleTmp=random.uniform(RotateAngle[0],RotateAngle[1])
RotateScaleTmp=random.uniform(RotateScale[0],RotateScale[1])
outImg=Rotate(item,RotateOrign,RotateAngleTmp,RotateScaleTmp)
cv2.imwrite(path,outImg)