关于数据扩充

本文代码将从现有文件夹中选择一些随机图像并进行转换,例如添加噪点、旋转、翻转等等。

Step 1: 图像转换(transformations)

现有的python库例如 OpenCV 或 Pillow 都具备有图像转换的功能。这里我们将在scikit-image 上进行实现。

现在定义一些数据扩建所需要的 transformation functions。

import random

from scipy import ndarray

import skimage as sk

from skimage import transform

from skimage import util

def random_rotation(image_array: ndarray):

# pick a random degree of rotation between 25% on the left and 25% on the right

random_degree = random.uniform(-25, 25)

return sk.transform.rotate(image_array, random_degree)

def random_noise(image_array: ndarray):

# 给图像添加随机噪声

return sk.util.random_noise(image_array)

def horizontal_flip(image_array: ndarray):

# horizontal flip 不需要skimage

return image_array[:, ::-1]

到现在为止我们已经有了三种图像转变方式:随机旋转、随机噪声以及水平翻转。

*Note:*使用scipy.ndarray 来呈现图像。

Step 2: 列出文件夹中所有图片并且read

import random

import os

# my folder path containing some images

folder_path = '/Users/mac/Desktop/DATA/plankton41/train'

# the number of file to generate

num_files_desired = 1000

# loop on all files of the folder and build a list of files paths

images = [os.path.join(folder_path, f) for f in os.listdir(folder_path) if os.path.isfile(os.path.join(folder_path, f))]

num_generated_files = 0

while num_generated_files <= num_files_desired:

# random image from the folder

image_path = random.choice(images)

# read image as an two dimensional array of pixels

image_to_transform = sk.io.imread(image_path)

Step 3: Image transformations

# dictionary of the transformations functions we defined earlier

available_transformations = {

'rotate': random_rotation,

'noise': random_noise,

'horizontal_flip': horizontal_flip

}

# random num of transformations to apply

num_transformations_to_apply = random.randint(1, len(available_transformations))

num_transformations = 0

transformed_image = None

while num_transformations <= num_transformations_to_apply:

# choose a random transformation to apply for a single image

key = random.choice(list(available_transformations))

transformed_image = available_transformations[key](image_to_transform)

num_transformations += 1

这里我们将单个图像的变换数量和要应用的变换类型进行随机选取。然后,我们只调用定义在转换字典中的函数(倒数第二行)。

Step 4: 存储新图像

# define a name for our new file

new_file_path = '%s/augmented_image_%s.jpg' % (folder_path, num_generated_files)

# write image to the disk

sk.io.imsave(new_file_path, transformed_image)

Conclusion

现在,你可以通过data augmentation 生成1000个新图像。当然,还可以添加一些额外的变换,对于不同变换发生的可能性也可以自己调整。

希望本文能对你有所帮助~

ps:转自csdn博主爱喝奶茶的Ethan

data transformation python_Data augmentation: 利用python进行图像扩建相关推荐

  1. python 修图_利用python对图像加水印

    有时候我们需要对自己的摄影作品或者制作的图像加上水印,大部分修图软件都可以做到水印功能,可是如何做到批量加水印呢?Python就可以做到. 本教程中,我们将学习如何利用python中的matplotl ...

  2. 利用 Python 让图像变卡通

    欢迎关注 "小白玩转Python",发现更多 "有趣" 引言 正如你可能知道的,素描或创作卡通并不总是需要手动完成.现在,许多应用程序可以把你的照片变成卡通.但 ...

  3. 利用Python实现图像的二值化

    目录 1.全局阈值法 1.1主要函数: 1.2全局阈值的代码实现 1.3特点 2.自适应阈值法 2.1主要函数: 2.2实现代码: 2.3特点: 3.OTSU二值化(最大类间方差法) 3.1实现代码: ...

  4. 利用python对图像进行傅里叶变换_Python 实现图像快速傅里叶变换和离散余弦变换...

    图像的正交变换在数字图像的处理与分析中起着很重要的作用,被广泛应用于图像增强.去噪.压缩编码等众多领域.本文手工实现了 二维离散傅里叶变换 和 二维离散余弦变换 算法,并在多个图像样本上进行测试,以探 ...

  5. 利用python提取图像轮廓

    from PIL import Imagefrom pylab import * # 读取图像到数组中 # convert('L')表示将RGB转换为L模式,表示像素点在[0,255]之间im = a ...

  6. 利用python进行图像视觉基础练习

    练习内容为: 1. 对于图像进行均值滤波和中值滤波: 2. 对于图像的第二个波段,进行灰度图自适应均衡化,输出为单波段影像: 3. 对于图像的第三个波段进行阈值处理和自适应阈值处理,输出为单波段影像: ...

  7. Data transformation R语言与python

    https://r4ds.had.co.nz/transform.html 这些R也可以通过python实现,如下 pyrhon: pip install nycflights13 pip insta ...

  8. 利用python对图像进行傅里叶变换_python用opencv 图像傅里叶变换

    傅里叶变换 dft = cv.dft(np.float32(img),flags = cv.DFT_COMPLEX_OUTPUT) 傅里叶逆变换 img_back = cv.idft(f_ishift ...

  9. 利用python对图像进行傅里叶变换_(九)OpenCV-Python学习—图像傅里叶变换

    对于二维图片,可以对其进行傅里叶变换,获取图片的频谱信息.频谱有很多应用,包括显著性检测,卷积定理,频率域滤波等,下面是图片傅里叶变换的一些基本概念: 1. 图像傅里叶变换 对于M行N列的图像矩阵f( ...

最新文章

  1. POJ-2771 Guardian of Decency 最大独立子集
  2. AVPlayer 之avcore模块
  3. Android获取网络状态
  4. 有效数据外含有额外数据_Excel|应用数据有效性规范数据录入
  5. ASP.NET AJAX Advance Tips Tricks (11) 三种方法动态创建Tooltip
  6. Pycharm 2018 1.2版本 Mac注册码激活码
  7. codeforces332B - Maximum Absurdity 线段数 or dp
  8. 处理接口超时_开发中那些事儿:为啥update会超时呢?
  9. maven(二) maven项目构建ssh工程(父工程与子模块的拆分与聚合)
  10. Spring源码下载编译阅读
  11. 2019java后端面试集合篇最值得收藏的(一)
  12. AMOS分析技术:结构方程模型的拟合度评价指标
  13. breadweb控制台下载_路由器刷breed web控制台通用版
  14. centos linux引导修复_Linux 引导修复
  15. 腾讯视频Node.js服务是如何支撑国庆阅兵直播高并发的?
  16. unraid虚拟linux系统,UNRAID教程:3分钟 用unraid自带的虚拟机 安装 黑群晖NAS DSM系统 很强大!...
  17. [语音处理] .flac文件转.wav文件
  18. Excel数值累加操作演示(一)
  19. 用php编写的简单个人主页,如何制作个人主页
  20. 算法设计 - 寻找一个字符串的重复子串LRS

热门文章

  1. android adb复制粘贴工具
  2. Win10推荐一款Terminal
  3. Android handler.obtainMessage()传字符串用法
  4. Android OTA升级(1):编译升级全包
  5. and5.1PowerManagerService深入分析(四)PMS与Display模块
  6. 获取Android 光感Sensor的值
  7. C#之float数组转字节流
  8. linux中查看网卡型号的命令
  9. nginx location 匹配 多个规则_nginx配置location与rewrite规则教程
  10. opencv用python进行物体识别_教你用Python+opencv来识别物体的轮廓并标识显示