深度学习中的图片增强

 

 

图片数据增强:

包括重采样改变分辨率,裁剪,翻转和旋转,饱和度亮度对比度锐度变换,颜色变换,噪声,模糊

 

效果:

 

 

 

 

 

import os
import glob
import random
import shutil


import collections
import os.path as osp

import numpy as np
from PIL import Image,ImageEnhance,ImageFilter
import scipy.io
import torch
from torch.utils import data
from torchvision import transforms as T
from torch.utils.data import DataLoader
import fcn
import scipy.misc

def randomResampleTrans(img,lbl):
    height = random.randint(280,3000)
    width = random.randint(int(0.7*height),int(min(2*height,4000)))
    imgResized = img.resize((width, height), Image.ANTIALIAS)
    labelImg = lbl.resize((width, height), Image.NEAREST)
    return imgResized,labelImg


def randomCropTrans(img,lbl,tw,th):

    w, h = img.size
    assert  w>=tw and h>=th# 确保height 和width大于256,因为256时我们要裁剪的大小
    if w == tw and h == th:
        return 0, 0, h, w

    i = random.randint(0, h - th)
    j = random.randint(0, w - tw)
    imgCrop = img.crop((j,i,j+tw,i+th))
    lblCrop = lbl.crop((j,i,j+tw,i+th))
    return imgCrop,lblCrop



def randomFlipAndRotate(img,lbl):
    if random.random()<0.5:
        img = img.transpose(Image.FLIP_LEFT_RIGHT)
        lbl = lbl.transpose(Image.FLIP_LEFT_RIGHT)
    if random.random()<0.5:
        img = img.transpose(Image.FLIP_TOP_BOTTOM)
        lbl = lbl.transpose(Image.FLIP_TOP_BOTTOM)
    if random.random() < 0.5:
        img = img.transpose(Image.ROTATE_90)
        lbl = lbl.transpose(Image.ROTATE_90)
    if random.random()<0.5:
        img = img.transpose(Image.ROTATE_180)
        lbl = lbl.transpose(Image.ROTATE_180)
    if random.random()<0.5:
        img = img.transpose(Image.ROTATE_270)
        lbl =lbl.transpose(Image.ROTATE_270)
    return img,lbl



def randomHueBrightContrastShap(img,lbl=None):
    hue = random.uniform(0.5,1.5)#控制饱和度
    img = ImageEnhance.Color(img).enhance(hue)

    bri = random.uniform(0.8,1.5)#控制亮度
    img = ImageEnhance.Brightness(img).enhance(bri)

    con = random.uniform(0.8,1.5)#控制对比度
    img = ImageEnhance.Contrast(img).enhance(con)

    shap = random.uniform(0, 2)  # 控制对比度
    img = ImageEnhance.Sharpness(img).enhance(shap)

    return img,lbl


def randomColorChange(img,lbl=None):#最后在做实验查看 感觉随机在某个通道上全部减少只是一种方式,而是要随机在各个像素 各个通道上减少某个很小的值
    # imgArr = np.asarray(img)
    # rVal = random.randint(-20,20)
    # imgArr = [imgArr[i]+rVal for i in range(len(imgArr))]
    if random.random()<1:
        img = img.point(lambda i:i+random.randint(-20,20))
    return img,lbl




def randomNoise(img,lbl=None):#PIL中没有找到怎么加噪声 所以用cv2实现
    imgArr = np.asarray(img)
    imgArr2 = imgArr.copy()
    if random.random()<0.25:
        for i in range(random.randint(100,200)):  # 添加点噪声
            temp_x = np.random.randint(0, imgArr.shape[0])
            temp_y = np.random.randint(0, imgArr.shape[1])
            imgArr2[temp_x][temp_y] = random.randint(0,255)

    return Image.fromarray(imgArr2),lbl


def randomBlur(img,lbl=None):
    if random.random()<0.5:
        radius = random.randint(1,2)
        img = img.filter(ImageFilter.GaussianBlur(radius))
    return img,lbl

 

 

调用程序:

if __name__ == '__main__':


    img = Image.open('/home/mlxuan/project/DeepLearning/data/image_Segmentation/js-segment-annotator-master/data/images/DJI_0200.JPG')
    lbl = Image.open('/home/mlxuan/project/DeepLearning/FCN/fcn_mlx/data/dst.png')

    img,lbl = randomResampleTrans(img,lbl)
    img,lbl = randomCropTrans(img,lbl,256,256)
    img,lbl = randomFlipAndRotate(img,lbl)
    img,lbl = randomHueBrightContrastShap(img,lbl)
    img,lbl = randomColorChange(img,lbl)
    img,lbl = randomNoise(img,lbl)
    img,lbl = randomBlur(img,lbl)

    img.save('./1.png')
    lbl.save('2.png')
    resample('./1.png','./2.png')
    _ = fcn.utils.label2rgb(lbl=np.asarray(Image.open('./2.png')), img=np.asarray(Image.open('./1.png')),
                            label_names=['b', 'R', 'T', 'G', 'A', 'S', 'w', 'W', 'B', 'H'])
    # if dstVisPath not None:
    scipy.misc.imsave('./3.png', _)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值