Python 图像数据增强方法 - 随机旋转、平移、裁剪、翻转和色彩变化
def data_augmentation(image):
# 随机旋转
angle = np.random.randint(-10, 10)
image = ndimage.rotate(image, angle, reshape=False)
# 随机平移
t_x, t_y = np.random.randint(-10, 10, size=(2,))
rows, cols = image.shape
M = np.float32([[1, 0, t_x], [0, 1, t_y]])
image = cv2.warpAffine(image, M, (cols, rows))
# 随机裁剪
crop_size = np.random.randint(280, 300)
if crop_size < rows and crop_size < cols:
x = np.random.randint(0, cols - crop_size)
y = np.random.randint(0, rows - crop_size)
image = image[y:y + crop_size, x:x + crop_size]
# 随机翻转
flip = np.random.randint(0, 2)
if flip:
image = cv2.flip(image, 1)
# 随机色彩变化
hsv_image = cv2.cvtColor(image, cv2.COLOR_GRAY2BGR)
h, s, v = cv2.split(hsv_image)
h = h.astype(np.float32)
s = s.astype(np.float32)
v = v.astype(np.float32)
h += np.random.randint(-10, 10)
s += np.random.randint(-10, 10)
v += np.random.randint(-10, 10)
h = np.clip(h, 0, 255).astype(np.uint8)
s = np.clip(s, 0, 255).astype(np.uint8)
v = np.clip(v, 0, 255).astype(np.uint8)
hsv_image = cv2.merge([h, s, v])
image = cv2.cvtColor(hsv_image, cv2.COLOR_BGR2GRAY)
return image
# 调用map方法执行数据增强
augmented_data = list(map(data_augmentation, original_data))
代码说明:
- 导入必要的库:
import numpy as np、from scipy import ndimage、import cv2 - 定义数据增强函数
data_augmentation(image):- 随机旋转: 使用
ndimage.rotate()函数随机旋转图像。 - 随机平移: 使用
cv2.warpAffine()函数随机平移图像。 - 随机裁剪: 随机选择一个区域进行裁剪。
- 随机翻转: 使用
cv2.flip()函数随机水平翻转图像。 - 随机色彩变化: 调整图像的 HSV 色彩空间中的 H、S、V 通道值。
- 随机旋转: 使用
- 使用
map()函数执行数据增强:map()函数将data_augmentation()函数应用于原始数据列表original_data中的每个图像,并返回一个包含增强后图像的列表。
使用示例:
# 假设 `original_data` 是一个包含原始图像的列表
augmented_data = list(map(data_augmentation, original_data))
注意:
- 需要安装
opencv-python、scipy等库。 - 可以根据需要调整数据增强参数,例如旋转角度、平移范围、裁剪大小等。
- 数据增强可以有效提高模型的泛化能力,尤其在训练数据量不足的情况下。
原文地址: https://www.cveoy.top/t/topic/mQey 著作权归作者所有。请勿转载和采集!