通过颜色扰动完成数据增广

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

沙龙:如何使信息系统更加稳定

GLSL将颜色数据从片段着色器发送到顶点着色器似乎总是等于0

在片段中设置文本颜色

opencv实现数据增加小工具

大盘点 | 基于深度学习的数据增广技术一览