import random
import cv2
import numpy as np
from scipy import ndimage


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)

    # 随机颜色增强
    b, g, r = cv2.split(hsv_image)
    if random.choice([True, False]):
        b = cv2.equalizeHist(b)
    if random.choice([True, False]):
        g = cv2.equalizeHist(g)
    if random.choice([True, False]):
        r = cv2.equalizeHist(r)
    hsv_image = cv2.merge([b, g, r])
    image = cv2.cvtColor(hsv_image, cv2.COLOR_BGR2GRAY)

    # 随机对比度增强
    alpha = np.random.uniform(0.8, 1.2)
    beta = np.random.uniform(-10, 10)
    image = cv2.convertScaleAbs(image, alpha=alpha, beta=beta)

    return image

该代码使用 Python 实现图像数据增强,包括旋转、平移、裁剪、翻转、色彩变化和对比度增强等操作,为机器学习模型提供更多训练数据。

代码功能:

  • 旋转: 随机旋转图像,角度范围为 -10 到 10 度。
  • 平移: 随机平移图像,水平和垂直方向的偏移量范围为 -10 到 10 像素。
  • 裁剪: 随机裁剪图像,裁剪区域大小范围为 280 到 300 像素。
  • 翻转: 随机水平翻转图像。
  • 色彩变化: 随机调整图像的色调、饱和度和亮度。
  • 颜色增强: 随机对图像的蓝色、绿色和红色通道进行直方图均衡化。
  • 对比度增强: 随机调整图像的对比度。

使用方法:

  1. 导入必要的库:import random, cv2, numpy as np, scipy.ndimage
  2. 定义 data_augmentation 函数,该函数接受一个图像作为输入,并返回经过数据增强后的图像。
  3. 使用 data_augmentation(image) 函数对图像进行数据增强。

示例:

# 加载图像
image = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)

# 进行数据增强
augmented_image = data_augmentation(image)

# 显示增强后的图像
cv2.imshow('Augmented Image', augmented_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

注意:

  • 该代码适用于灰度图像,如果要处理彩色图像,需要修改代码中的颜色空间转换操作。
  • 您可以根据需要调整数据增强操作的参数,例如旋转角度、平移偏移量、裁剪区域大小等。

应用场景:

  • 提高机器学习模型的泛化能力
  • 解决数据不足问题
  • 增强模型对噪声和光照变化的鲁棒性

总结:

图像数据增强是一种有效的方法,可以提高机器学习模型的性能。本代码提供了一个简单易用的 Python 代码实现,可以帮助您快速完成图像数据增强操作。

图像数据增强 Python 代码实现 - 旋转、平移、裁剪、翻转、色彩变化、对比度增强

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

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