图像数据增强方法综述及其python实现(包括随机裁剪、翻转、直方图均衡化、gamma变换、滤波和随机噪声)


图像数据增强广泛用于深度学习的训练,对模型的性能提升有很大的帮助;

这里列出了图像数据增强的几种方式,包括随机裁剪、翻转、直方图均衡化、gamma变换、滤波和随机噪声及其python实现。

1. 随机裁剪

1.1 random_crop

对图片随机0.6~1.0比率大小的区域裁剪,保持长宽比不变

1.1.1 代码


import random
import numpy as np

def random_crop(image, min_ratio=0.6, max_ratio=1.0):

    h, w = image.shape[:2]    
    ratio = random.random()    
    scale = min_ratio + ratio * (max_ratio - min_ratio)    
    new_h = int(h*scale)    
    new_w = int(w*scale)    
    y = np.random.randint(0, h - new_h)    
    x = np.random.randint(0, w - new_w)    
    image = image[y:y+new_h, x:x+new_w, :]    
    return image

1.1.2 效果

处理前:
在这里插入图片描述

处理后:
在这里插入图片描述

1.2 random_resize_and_crop

将一张图片裁剪出随机大小的224×224大小的正方形区域

1.2.1 代码

import random
import numpy as np
import cv2


def random_crop_and_resize(image, size=224):

    image = resize_image(image)

    h, w = image.shape[:2]

    y = np.random.randint(0, h-size)
    x = np.random.randint(0, w-size)

    image = image[y:y+size, x:x+size, :]

    return image


def resize_image(image, size=224, bias=5):

    image_shape = image.shape

    size_min = np.min(image_shape[:2])
    size_max = np.max(image_shape[:2])

    min_size = size + np.random.randint(1, bias)

    scale = float(min_size) / float(size_min)

    image = cv2.resize(image, dsize=(0, 0), fx=scale, fy=scale)

    return image

1.2.2 效果

处理前:
在这里插入图片描述
处理后:
在这里插入图片描述

1.3 random_crop_corner

裁剪出图片四角上和中间的共5个正方形

1.3.1 代码

import random
import numpy as np
import cv2

def random_crop_corner(image, size=224):

    image = resize_image(image)
    images = []

    h, w = image.shape[:2]

    Ys = (0, 0, h-size, h-size, int((h-size)/2))
    Xs = (0, w-size, 0, w-size, int((h-size)/2))

    for y, x in zip(Ys, Xs):
        value = image[y:y+size, x:x+size, :]
        images.append(value)

    return images


def resize_image(image, size=224, bias=10):

    image_shape = image.shape

    size_min = np.min(image_shape[:2])
    size_max = np.max(image_shape[:2])

    min_size = size + bias

    scale = float(min_size) / float(size_min)

    image = cv2.resize(image, dsize=(0, 0), fx=scale, fy=scale)

    return image

1.3.2 效果

处理前
在这里插入图片描述
处理后:
在这里插入图片描述

2. 随机翻转-random_flip

2.1 代码

import random
import numpy as np


def random_flip(image):

    if random.randint(0, 1):

        axis = random.randint(0, 2)

        return np.flip(image, axis=axis)

    return image

2. 2 效果

处理前
在这里插入图片描述
处理后
在这里插入图片描述
(注意最后一张是对RGB三通道翻转)

3. 直方图均衡化

3.1 概念

这种方法通常用来增加许多图像的全局对比度,尤其是当图像的有用数据的对比度相当接近的时候。

通过这种方法,亮度可以更好地在直方图上分布。这样就可以用于增强局部的对比度而不影响整体的对比度,直方图均衡化通过有效地扩展常用的亮度来实现这种功能。

3.2 代码


import numpy as np

def equalize(image):

    image = cv2.equalizeHist(image)

    return image.astype(np.int)

3.3 效果

处理前(灰度图)
在这里插入图片描述
处理后
在这里插入图片描述

4. gamma变换

4.1 概念

Gamma变换就是用来图像增强,通过非线性变换提升了暗部细节。

4.2 代码


import numpy as np

def gamma_transform(image, gamma=1.6):

    max_value = np.max(image)
    min_value = np.min(image)

    value_l = max_value - min_value

    image = (image - min_value)/value_l

    image = np.power(image, gamma)

    image = image * 255

    return image.astype(np.int)

4.3 效果

处理前
在这里插入图片描述
处理后

在这里插入图片描述

5. 滤波

5.1 高斯滤波

5.1.1 概念

高斯滤波器是根据高斯函数的形状来选择权值的线性平滑滤波器,滤波器符合二维高斯分布;
在这里插入图片描述

5.1.2 代码


import numpy as np
import cv2

def gaussian(image, k_size=5):

    image = cv2.GaussianBlur(image, (k_size, k_size), 3)

    return image

5.1.3 效果

处理前
在这里插入图片描述
处理后
在这里插入图片描述

5.2 中值滤波

5.2.1 概念

中值滤波是一种基于排序统计理论的非线性平滑计数,能有效平滑噪声,且能有效保护图像的边缘信息,其基本原理是把数字图像或数字序列中的一点的值用该点邻域内所有的点排序后的中值来代替。

5.2.2 代码


import numpy as np
import cv2

def Mean(image, k_size=5):

    image = cv2.medianBlur(image, k_size)

    return image

5.2.3 效果

处理前
在这里插入图片描述
处理后
在这里插入图片描述

6. 随机噪声

6.1 代码


import numpy as np
import cv2

def add_noise(image, threshold=32):

    noise = np.random.uniform(low=-1, high=1, size=image.shape)

    image = image + noise * threshold

    image = np.clip(image, 0, 255)

    return image.astype(np.int)

6.2 效果

处理前
在这里插入图片描述
处理后

在这里插入图片描述

发布了58 篇原创文章 · 获赞 117 · 访问量 6813

猜你喜欢

转载自blog.csdn.net/weixin_44936889/article/details/103742580
今日推荐