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)) 

代码说明:

  1. 导入必要的库: import numpy as npfrom scipy import ndimageimport cv2
  2. 定义数据增强函数 data_augmentation(image):
    • 随机旋转: 使用 ndimage.rotate() 函数随机旋转图像。
    • 随机平移: 使用 cv2.warpAffine() 函数随机平移图像。
    • 随机裁剪: 随机选择一个区域进行裁剪。
    • 随机翻转: 使用 cv2.flip() 函数随机水平翻转图像。
    • 随机色彩变化: 调整图像的 HSV 色彩空间中的 H、S、V 通道值。
  3. 使用 map() 函数执行数据增强: map() 函数将 data_augmentation() 函数应用于原始数据列表 original_data 中的每个图像,并返回一个包含增强后图像的列表。

使用示例:

# 假设 `original_data` 是一个包含原始图像的列表
augmented_data = list(map(data_augmentation, original_data))

注意:

  • 需要安装 opencv-pythonscipy 等库。
  • 可以根据需要调整数据增强参数,例如旋转角度、平移范围、裁剪大小等。
  • 数据增强可以有效提高模型的泛化能力,尤其在训练数据量不足的情况下。
Python 图像数据增强方法 - 随机旋转、平移、裁剪、翻转和色彩变化

原文地址: https://www.cveoy.top/t/topic/mQey 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录