python 图片批量数据增强

图像旋转

import scipy 
from scipy import misc 
import os 
import time 
import glob 
from scipy import ndimage 

def get_image_paths(folder): 
    return glob.glob(os.path.join(folder, '*.png')) 

def create_read_img(filename): 
    im = misc.imread(filename) 
    img_rote_90 = ndimage.rotate(im, 90)  
    scipy.misc.imsave(filename[:-4]+'_90.png',img_rote_90) 
    
    img_rote_180 = ndimage.rotate(im, 180) 
    scipy.misc.imsave(filename[:-4]+'_180.png',img_rote_180) 

    img_rote_270 = ndimage.rotate(im, 270) 
    scipy.misc.imsave(filename[:-4]+'_270.png',img_rote_270) 
    print(filename)
img_path = '/media/wxy/000F8E4B0002F751/test/' 
imgs = get_image_paths(img_path) 
#print (imgs) 

for i in imgs: 
    create_read_img(i)

镜像翻转

import cv2
import os

for name in os.listdir("./HR_image/"):
    if len(name)==23:
        image = cv2.imread("./HR_image/"+name)
        h_flip = cv2.flip(image, 1) #左右
        cv2.imwrite("./HR_image/"+name[:-4]+"_flip_h.png", h_flip)
        w_flip = cv2.flip(image, 0) #上下
        cv2.imwrite("./HR_image/"+name[:-4]+"_flip_w.png", w_flip)
        print(name)

同时增强

from PIL import Image
import os 
import glob 

def get_image_paths(folder): 
    return glob.glob(os.path.join(folder, '*.png')) 

def create_read_img(filename): 
    #读取图像
    im = Image.open(filename)

    out_h = im.transpose(Image.FLIP_LEFT_RIGHT)
    out_w = im.transpose(Image.FLIP_TOP_BOTTOM)
    out_90 = im.transpose(Image.ROTATE_90)
    out_180 = im.transpose(Image.ROTATE_180)
    out_270 = im.transpose(Image.ROTATE_270)
    
    out_h.save(filename[:-4]+'_h.png')
    out_w.save(filename[:-4]+'_w.png')
    out_90.save(filename[:-4]+'_90.png')
    out_180.save(filename[:-4]+'_180.png')
    out_270.save(filename[:-4]+'_270.png')
    print(filename)
    
img_path = '/media/wxy/000F8E4B0002F751/test/' 
imgs = get_image_paths(img_path) 

for i in imgs: 
    create_read_img(i)

多线程图像增强

import time
import threadpool
import os
from PIL import Image

name = ["/media/wxy/000F8E4B0002F751/test/"+name_ for name_ in os.listdir("./test")]

def create_read_img(filename):
    # 读取图像
    im = Image.open(filename)
    out_h = im.transpose(Image.FLIP_LEFT_RIGHT)
    out_w = im.transpose(Image.FLIP_TOP_BOTTOM)
    out_90 = im.transpose(Image.ROTATE_90)
    out_180 = im.transpose(Image.ROTATE_180)
    out_270 = im.transpose(Image.ROTATE_270)

    out_h.save(filename[:-4] + '_h.png')
    out_w.save(filename[:-4] + '_w.png')
    out_90.save(filename[:-4] + '_90.png')
    out_180.save(filename[:-4] + '_180.png')
    out_270.save(filename[:-4] + '_270.png')
    print(filename)

start_time = time.time()
pool = threadpool.ThreadPool(5)
requests = threadpool.makeRequests(create_read_img, name)
[pool.putRequest(req) for req in requests]
pool.wait()
print ('%d second'% (time.time()-start_time))

随机旋转,裁剪,加噪

import cv2 
import numpy as np 
import os.path 
import random 
import math 

def rotate(img,angle):
    height = img.shape[0] 
    width = img.shape[1] 
    if angle%180 == 0: 
        scale = 1 
    elif angle%90 == 0: 
        scale = float(max(height, width))/min(height, width) 
    else: 
        scale = math.sqrt(pow(height,2)+pow(width,2))/min(height, width) 

    rotateMat = cv2.getRotationMatrix2D((width/2, height/2), angle, scale) 
    rotateImg = cv2.warpAffine(img, rotateMat, (width, height)) 
    return rotateImg 

def tfactor(img): 
    hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV) 
    hsv[:,:,0] = hsv[:,:,0]*(0.75+ np.random.random()*0.5)
    hsv[:,:,1] = hsv[:,:,1]*(0.75+ np.random.random()*0.5)
    hsv[:,:,2] = hsv[:,:,2]*(0.75+ np.random.random()*0.5) 
    img = cv2.cvtColor(hsv,cv2.COLOR_HSV2BGR)
    return img 

file_dir = "./data/" 
classes = {"LAKE"} 
i = 0 
for index,name in enumerate(classes): 
    class_path = file_dir + name + "/" 
    for img_name in os.listdir(class_path): 
        img_path = class_path + img_name 
        image = cv2.imread(img_path) 
        tfimg = tfactor(image) 
        rotateAngle = random.randrange(0,10) 
        rotateImg = rotate(tfimg,rotateAngle) 
        H,W,Channels = tfimg.shape 
        y = H//2+20 
        x = W//2+20 
        winW = random.randrange(80,x-20) 
        winH = random.randrange(80,y-20) 

        cropImg = rotateImg[int(y-winH):int(y + winH),int(x-winW):int(x + winW)] 

        cv2.imwrite('./data/LAKE/'+img_name[:-4]+'_cropRotatetf_{:04d}.jpg'.format(i),cropImg) 



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Python 语义分割批量数据增强可以通过使用 Python 库来实现。常用的库有 imgaug 和 albumentations。它们可以提供各种图像增强方法,如旋转、缩放、平移等。这些方法可以用于批量处理图像,从而让模型能够更好地处理不同姿态和尺度的图像。 ### 回答2: Python语义分割批量数据增强的主要目的是通过对训练数据进行一系列的转换和增强操作,提高模型的泛化能力和性能。以下是几种常见的Python语义分割批量数据增强的方法: 1. 随机翻转:通过随机地对图像进行水平或垂直翻转,可以增加数据的多样性,使模型更好地学习不同角度的物体。 2. 随机旋转:通过随机旋转图像,可以模拟不同角度的物体,从而增加数据的丰富性。 3. 随机裁剪:将原始图像随机地裁剪为不同的大小,并将其作为训练样本,可以增加数据的多样性,并且可以模拟物体位于不同位置的情况。 4. 调整亮度和对比度:通过对图像的亮度和对比度进行随机调整,可以增加数据的多样性,并增强模型对不同光照条件下物体的识别能力。 5. 添加噪声:在图像中添加随机噪声,可以模拟真实场景中的噪声,从而增加数据的鲁棒性。 6. 数据平衡处理:对于数据集中类别不平衡的情况,可以使用采样和重复样本等方法,使得各个类别的样本数量相对均衡,提高模型的训练效果。 借助Python图像处理库如OpenCV、PIL等,以上的数据增强方法可以通过编写相应的代码实现。通过批量应用这些数据增强方法,可以有效地增加语义分割模型的训练数据量,提高模型的泛化能力,从而获得更好的性能和鲁棒性。 ### 回答3: Python 语义分割中的批量数据增强是指在训练语义分割模型时,通过对原始图像和对应的标签图像进行一系列的变换操作,来生成更多的训练样本。这种数据增强的方式可以有效地提升模型的泛化能力和鲁棒性。 常见的批量数据增强操作包括:随机旋转、随机缩放、随机裁剪、水平翻转、垂直翻转等。具体操作如下: 1. 随机旋转:通过随机选择一个角度,在一定范围内对图像进行旋转,模拟不同角度的目标出现场景。 2. 随机缩放:随机选择一个缩放比例,并对图像进行相应的缩放操作,以增加模型对不同尺度的目标的识别能力。 3. 随机裁剪:随机选择一个裁剪区域,并对图像进行裁剪,模拟目标在不同位置出现的情况。 4. 水平翻转:对图像进行水平镜像操作,从而增加模型对目标在水平方向上的不变性。 5. 垂直翻转:对图像进行垂直镜像操作,增加模型对目标在垂直方向上的不变性。 通过对原始图像和标签图像同时进行这些批量数据增强操作,可以生成一系列新的训练样本。这些样本具有不同的变换,可以增加模型对目标的多样性识别能力。 在Python中,可以利用开源的图像处理库如OpenCV或PIL来实现这些数据增强操作。通过编写相应的代码,可以将原始图像和标签图像读入内存,然后对它们进行相应的变换操作,最终生成扩增后的训练样本。 总之,批量数据增强是一种有效的方法,可以通过对原始图像和标签图像进行一系列变换操作,生成更多的训练样本,提升语义分割模型的性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值