图像增强︱window7+opencv3.2+keras/theano简单应用(函数解读)

本文主要是介绍图像增强︱window7+opencv3.2+keras/theano简单应用(函数解读),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在服务器上安装opencv遇到跟CUDA8.0不适配的问题,于是不得不看看其他机器是否可以预装并使用。
.


一、python+opencv3.2安装

opencv在windows安装为啥这么简单?
安装流程:
1、下载opencv文件opencv-3.2.0-vc14.exe
2、点击下载,其实就是解压过程,随便放在一个盘里面。
3、python部署阶段,
进入OpenCV的安装目录下找到+复制:\build\python\2.7\x64\cv2.pyd
将cv2.pyd复制到python的子目录:\Lib\site-packages\
4、即可直接调用:

import cv2

.


二、windows+keras/theano

Keras深度学习框架是基于Theano或Tensorflow框架安装的,所以首先要准备底层框架的搭建,用tensorflow比较麻烦,所以选用Theano安装即可。

1、tensorflow/keras框架

同时如果要使用tensorflow0.12版本+python3.5及以上,也可以使用Anaconda 3.5.
一种比较好的方式使用docker:
参考:TensorFlow 官方文档中文版、下载与安装

如果要使用原生的window安装:

  • (1)前提:现有了python3.5或Anaconda 3.5
  • (2)下载:tensorflow-0.12.0rc0-cp35-cp35m-win_amd64.whl,下载的东西放在某文件夹中
  • (3)在Power Shell中输入下述命令实现本地安装:
pip install F:\DevResources\tensorflow_gpu-0.12.0rc0-cp35-cp35m-win_amd64.whl
  • (4)验证安装

到“所有程序”下找到”Python 3.5 64bit”,出现命令窗口,输入测试代码:

>>>import tensorflow as tf
>>>sess = tf.Session()
>>>a = tf.constant(10)
>>>b = tf.constant(22)
>>>print(sess.run(a + b))
32

正确输出32则为成功安装。

报错无法正常下载numpy 1.11.0:参考博客:原生Windows安装TensorFlow 0.12方法
.

2、theano/keras框架

安装过程:

  • (1)安装theano,Power Shell中输入:
pip install theano -U --pre
  • (2)安装keras:
pip install keras -U --pre
  • (3)修改默认后端:很关键,不然会一直报错:ImportError: No module named tensorflow
    因为,keras默认后端是给tensorflow,
    打开C:\Users\当前用户名.keras,修改文件夹内的keras.json文件如下:
{
"image_dim_ordering":"th",
"epsilon":1e-07,
"floatx":"float32",
"backend":"theano"
}
  • (4)验证安装
>>>import keras
Using Theano(Tensorflow) backend.
>>>

当然,还有theano的加速模式,可参考: Keras安装和配置指南(Windows)
.


三、用python+keras/theano进行图像增强(Data Augmentation)

1、图像增强的方式

以下一共有8中图像变换的方式:

  • 旋转 | 反射变换(Rotation/reflection): 随机旋转图像一定角度; 改变图像内容的朝向;
  • 翻转变换(flip): 沿着水平或者垂直方向翻转图像;
  • 缩放变换(zoom): 按照一定的比例放大或者缩小图像;
  • 平移变换(shift): 在图像平面上对图像以一定方式进行平移; 可以采用随机或人为定义的方式指定平移范围和平移步长,
    沿水平或竖直方向进行平移. 改变图像内容的位置;
  • 尺度变换(scale): 对图像按照指定的尺度因子, 进行放大或缩小; 或者参照SIFT特征提取思想,
    利用指定的尺度因子对图像滤波构造尺度空间. 改变图像内容的大小或模糊程度;
  • 对比度变换(contrast): 在图像的HSV颜色空间,改变饱和度S和V亮度分量,保持色调H不变.
    对每个像素的S和V分量进行指数运算(指数因子在0.25到4之间), 增加光照变化;
  • 噪声扰动(noise): 对图像的每个像素RGB进行随机扰动, 常用的噪声模式是椒盐噪声和高斯噪声;
  • 颜色变换(color): 在训练集像素值的RGB颜色空间进行PCA, 得到RGB空间的3个主方向向量,3个特征值
    .

2、图像增强的案例

网上有一个极为广泛的套路,参考博客《深度学习中的Data Augmentation方法和代码实现》、《深度学习中的数据增强实现(Data Augmentation)》、《keras中文文档-图片预处理》:

from keras.preprocessing.image import ImageDataGenerator, array_to_img, img_to_array, load_img# 主要的增强函数
datagen = ImageDataGenerator(rotation_range=0.2,# 整数,旋转范围, 随机旋转(0-180)度width_shift_range=0.2,# 浮点数,以图像的长宽小部分百分比为变化范围进行横向平移height_shift_range=0.2,# 浮点数,以图像的长宽小部分百分比为变化范围进行竖直平移shear_range=0.2,# 浮点数,水平或垂直投影变换zoom_range=0.2,# 浮点数,随机缩放的幅度,[lower,upper] = [1 - zoom_range, 1+zoom_range]horizontal_flip=True,# 布尔值,进行随机水平翻转fill_mode='nearest')# 填充像素,超出边界时,有四种方式:‘constant’、‘nearest’、‘reflect’、‘wrap’
# featurewise_center=True  # 使输入数据集去中心化(均值为0)
# featurewise_std_normalization=True #将输入除以数据集的标准差以完成标准化
# rescale=1./255,#重放缩因子,默认为None. 如果为None或0则不进行放缩,否则会将该数值乘到数据上(在应用其他变换之前)
# zca_whitening=True #对输入数据施加ZCA白化
# channel_shift_range=0.2 #随机通道偏移的幅度
# vertical_flip=True #布尔值,进行随机竖直翻转#数据导入
img = load_img('C:\\Users\\Desktop\\003.jpg')  
x = img_to_array(img)  
x = x.reshape((1,) + x.shape)  
# the .flow() command below generates batches of randomly transformed images
# and saves the results to the `preview/` directory
i = 0
for batch in datagen.flow(x, batch_size=1,save_to_dir='C:\\Users\\Desktop',  #存放文件夹save_prefix='lena', #存放文件名字save_format='jpg'):i += 1if i > 20:break 

其中:
ImageDataGenerator是图像增强的主要函数,里面包含了很多类型的增强方法
load_img、img_to_array、x.reshape图像载入函数
datagen.flow,增强执行函数

其中:

  • load_img函数:
load_img(path, grayscale=False, target_size=None)
#path:图像载入的路径
#grayscale:是否只载入灰度,默认为false
#target_size:是否需要重新框定大小,默认是原图大小,其中如果要修改,则类似:
image.load_img(img_path, target_size=(224, 224))
  • img_to_array函数:
img_to_array(img, dim_ordering='default')
#img,load_img之后的内容
#dim_ordering,图像的格式是否更改,一般是default,不做任何更改

函数源码来源:
https://github.com/fchollet/keras/blob/master/keras/preprocessing/image.py

.


延伸一:win下theano安装报错

ImportError: cannot import name gof

网上的解决方案为:

pip install --upgrade --no-deps git+git://github.com/Theano/Theano.git

但是windows里面没有git,于是我安装了git之后,执行上述内容,的确安装完成,但是就是Import不了… 无解了….

也有人说重新安装theano

http://blog.csdn.net/zhouyongsdzh/article/details/24449645
.


延伸二:python中常用数据增强的library

下面这个Github的作者做了一个library, 实现了N种 data augmentation, 还嫌你的数据太少吗。。。试试吧!! 输入一只小老鼠,输出一窝小老鼠。
github地址:https://github.com/aleju/imgaug
这里写图片描述

这篇关于图像增强︱window7+opencv3.2+keras/theano简单应用(函数解读)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/518502

相关文章

在Ubuntu上部署SpringBoot应用的操作步骤

《在Ubuntu上部署SpringBoot应用的操作步骤》随着云计算和容器化技术的普及,Linux服务器已成为部署Web应用程序的主流平台之一,Java作为一种跨平台的编程语言,具有广泛的应用场景,本... 目录一、部署准备二、安装 Java 环境1. 安装 JDK2. 验证 Java 安装三、安装 mys

Redis与缓存解读

《Redis与缓存解读》文章介绍了Redis作为缓存层的优势和缺点,并分析了六种缓存更新策略,包括超时剔除、先删缓存再更新数据库、旁路缓存、先更新数据库再删缓存、先更新数据库再更新缓存、读写穿透和异步... 目录缓存缓存优缺点缓存更新策略超时剔除先删缓存再更新数据库旁路缓存(先更新数据库,再删缓存)先更新数

Python中构建终端应用界面利器Blessed模块的使用

《Python中构建终端应用界面利器Blessed模块的使用》Blessed库作为一个轻量级且功能强大的解决方案,开始在开发者中赢得口碑,今天,我们就一起来探索一下它是如何让终端UI开发变得轻松而高... 目录一、安装与配置:简单、快速、无障碍二、基本功能:从彩色文本到动态交互1. 显示基本内容2. 创建链

基于Qt开发一个简单的OFD阅读器

《基于Qt开发一个简单的OFD阅读器》这篇文章主要为大家详细介绍了如何使用Qt框架开发一个功能强大且性能优异的OFD阅读器,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 目录摘要引言一、OFD文件格式解析二、文档结构解析三、页面渲染四、用户交互五、性能优化六、示例代码七、未来发展方向八、结论摘要

Node.js 中 http 模块的深度剖析与实战应用小结

《Node.js中http模块的深度剖析与实战应用小结》本文详细介绍了Node.js中的http模块,从创建HTTP服务器、处理请求与响应,到获取请求参数,每个环节都通过代码示例进行解析,旨在帮... 目录Node.js 中 http 模块的深度剖析与实战应用一、引言二、创建 HTTP 服务器:基石搭建(一

java中VO PO DTO POJO BO DO对象的应用场景及使用方式

《java中VOPODTOPOJOBODO对象的应用场景及使用方式》文章介绍了Java开发中常用的几种对象类型及其应用场景,包括VO、PO、DTO、POJO、BO和DO等,并通过示例说明了它... 目录Java中VO PO DTO POJO BO DO对象的应用VO (View Object) - 视图对象

Go信号处理如何优雅地关闭你的应用

《Go信号处理如何优雅地关闭你的应用》Go中的优雅关闭机制使得在应用程序接收到终止信号时,能够进行平滑的资源清理,通过使用context来管理goroutine的生命周期,结合signal... 目录1. 什么是信号处理?2. 如何优雅地关闭 Go 应用?3. 代码实现3.1 基本的信号捕获和优雅关闭3.2

正则表达式高级应用与性能优化记录

《正则表达式高级应用与性能优化记录》本文介绍了正则表达式的高级应用和性能优化技巧,包括文本拆分、合并、XML/HTML解析、数据分析、以及性能优化方法,通过这些技巧,可以更高效地利用正则表达式进行复杂... 目录第6章:正则表达式的高级应用6.1 模式匹配与文本处理6.1.1 文本拆分6.1.2 文本合并6

python中的与时间相关的模块应用场景分析

《python中的与时间相关的模块应用场景分析》本文介绍了Python中与时间相关的几个重要模块:`time`、`datetime`、`calendar`、`timeit`、`pytz`和`dateu... 目录1. time 模块2. datetime 模块3. calendar 模块4. timeit

MyBatis框架实现一个简单的数据查询操作

《MyBatis框架实现一个简单的数据查询操作》本文介绍了MyBatis框架下进行数据查询操作的详细步骤,括创建实体类、编写SQL标签、配置Mapper、开启驼峰命名映射以及执行SQL语句等,感兴趣的... 基于在前面几章我们已经学习了对MyBATis进行环境配置,并利用SqlSessionFactory核