通过颜色扰动完成数据增广
Posted Eureka
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过颜色扰动完成数据增广相关的知识,希望对你有一定的参考价值。
# -*- coding:utf-8 -*-
from PIL import Image, ImageEnhance
import numpy as np
import random
import cv2
def randomColor(image):
"""
对图像进行颜色抖动
:param image: PIL的图像image
:return: 有颜色色差的图像image
"""
image = Image.fromarray(np.uint8(image))
random_factor = np.random.randint(0, 21) / 10. # 随机因子
color_image = ImageEnhance.Color(image).enhance(random_factor) # 调整图像的饱和度
random_factor = np.random.randint(10, 21) / 10. # 随机因子
brightness_image = ImageEnhance.Brightness(color_image).enhance(random_factor) # 调整图像的亮度
random_factor = np.random.randint(10, 21) / 10. # 随机因1子
contrast_image = ImageEnhance.Contrast(brightness_image).enhance(random_factor) # 调整图像对比度
random_factor = np.random.randint(0, 21) / 10. # 随机因子
sharp_image = ImageEnhance.Sharpness(contrast_image).enhance(random_factor) # 调整图像锐度
final = np.asarray(sharp_image)
return final
def randomGaussian(img, mean=0.2, sigma=0.5):
"""
对图像进行高斯噪声处理
:param image:
:return:
"""
def gaussianNoisy(im, mean=0.2, sigma=0.5):
"""
对图像做高斯噪音处理
:param im: 单通道图像
:param mean: 偏移量
:param sigma: 标准差
:return:
"""
for _i in range(len(im)):
im[_i] += random.gauss(mean, sigma)
return im
img.flags.writeable = True # 将数组改为读写模式
width, height = img.shape[:2]
img_r = gaussianNoisy(img[:, :, 0].flatten(), mean, sigma)
img_g = gaussianNoisy(img[:, :, 1].flatten(), mean, sigma)
img_b = gaussianNoisy(img[:, :, 2].flatten(), mean, sigma)
img[:, :, 0] = img_r.reshape([width, height])
img[:, :, 1] = img_g.reshape([width, height])
img[:, :, 2] = img_b.reshape([width, height])
return img
# 均值滤波
def ranndom_blur(img, ksize=(3, 3)):
img_blur = cv2.blur(src=img, ksize=ksize)
return img_blur
if __name__ == \'__main__\':
pic = cv2.imread(\'./test.jpg\')
a = randomColor(pic)
cv2.imwrite(\'randomColor.jpg\', a)
b = randomGaussian(pic)
cv2.imwrite(\'randomGaussian.jpg\', b)
c = ranndom_blur(pic)
cv2.imwrite(\'ranndom_blur.jpg\', c)
以上是关于通过颜色扰动完成数据增广的主要内容,如果未能解决你的问题,请参考以下文章
Pytorch中的图像增广和预处理方法(transforms类)