图像数据增强 Python 代码实现 - 旋转、平移、裁剪、翻转、色彩变化、对比度增强
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 像素。
- 翻转: 随机水平翻转图像。
- 色彩变化: 随机调整图像的色调、饱和度和亮度。
- 颜色增强: 随机对图像的蓝色、绿色和红色通道进行直方图均衡化。
- 对比度增强: 随机调整图像的对比度。
使用方法:
- 导入必要的库:
import random, cv2, numpy as np, scipy.ndimage - 定义
data_augmentation函数,该函数接受一个图像作为输入,并返回经过数据增强后的图像。 - 使用
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 代码实现,可以帮助您快速完成图像数据增强操作。
原文地址: https://www.cveoy.top/t/topic/mQi7 著作权归作者所有。请勿转载和采集!