python之图像仿射变换实战-提取手写数字图片样本!

Opencv-图像操作与处理入门基本知识(一) 文章目录前言一、图像基础知识二、opencv2.1 基础知识与应用2.1.1 读取图像2.1.2 显示图像2.1.3 显示图像2.1.4 基础操作示例2.2 色彩空间的改变2.3 图像的算术运算2.6 图像金字塔直方图原理与显示掩膜的应用直方图均衡化自适应的直方图均衡化总结 前言 基于python脚本语言开发的数字图片处理包,比如PIL(Python Image Library),Pillow, opencv, scikit-image等。 PIL和Pillow只提供最基础的数字图像处理,功能有限; 阅读详情

在进行实战项目之前,我们先来学习一个知识点: 连通域的外界矩形

寻找外接矩形有两种策略:

  • 一种是 寻找轮廓边缘的部分, 找到最外面的那个外接矩形 , 为了区分, 我们称之为正外接矩形 boundingRect, 如下图绿色矩形部分.
  • 另外一种策略是 矩形可以旋转, 找到面积最小的矩形, 刚刚好可以把轮廓套在里面,我们称之为 *最小外接矩形 * minAreaRect , 如下图蓝色矩形部分.

正外接矩形 boudningRect

函数比较简单, 传入唯一的参数是 轮廓点集(单个) Points .

rect = cv2.boundingRect(cnt)
(x, y, w, h) = rect
复制代码

返回值 rect , 数据结构是 tuple , 分别为矩形左上角坐标 (x, y) , 与矩形的宽度 w 高度 h

我们依次打印矩形区域的信息.

for cidx,cnt in enumerate(contours):
    (x, y, w, h) = cv2.boundingRect(cnt)
    print('RECT: x={}, y={}, w={}, h={}'.format(x, y, w, h))
复制代码

输出结果:

RECT: x=92, y=378, w=94, h=64
RECT: x=381, y=328, w=69, h=102
RECT: x=234, y=265, w=86, h=70
RECT: x=53, y=260, w=61, h=95
RECT: x=420, y=184, w=49, h=66
RECT: x=65, y=124, w=48, h=83
RECT: x=281, y=71, w=70, h=108
复制代码

绘制在画布上比较直观,具体代码如下:

import numpy as np
import cv2

# 读入黑背景下的彩色手写数字
img = cv2.imread("color_number_handwriting.png")
# 转换为gray灰度图
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 寻找轮廓
contours, hier = cv2.findContours(gray, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

# 声明画布 拷贝自img
canvas = np.copy(img)

for cidx,cnt in enumerate(contours):
    (x, y, w, h) = cv2.boundingRect(cnt)
    print('RECT: x={}, y={}, w={}, h={}'.format(x, y, w, h))
    # 原图绘制圆形
    cv2.rectangle(canvas, pt1=(x, y), pt2=(x+w, y+h),color=(255, 255, 255), thickness=3)
    # 截取ROI图像
    cv2.imwrite("number_boudingrect_cidx_{}.png".format(cidx), img[y:y+h, x:x+w])

cv2.imwrite("number_boundingrect_canvas.png", canvas)
复制代码

原始图像:

绘制结果:

截取ROI图片的操作比较简单 img[y:y+h, x:x+w] :

# 截取ROI图像
cv2.imwrite("number_boudingrect_cidx_{}.png".format(cidx), img[y:y+h, x:x+w])
复制代码

这样我们就截取到了独立的单个数字的图片:

最小外接矩形 minAreaRect

minAreaRect 函数用于 获取最小面积的矩形 。

minAreaRect = cv2.minAreaRect(cnt)
复制代码

我们打印一下minAreaRect 查看其返回的数据结构:

((133.10528564453125, 404.7727966308594), (100.10702514648438, 57.51853942871094), -49.184913635253906)
复制代码

数据结构解析

((cx, cy), (width, height), theta)
复制代码
cx
cy
width
height
theta

注意: 上述值均为小数, 不可以直接用于图片索引,或者矩形绘制.

详情见图

图片来源 python opencv minAreaRect 生成最小外接矩形

注意:旋转角度θ是水平轴(x轴)逆时针旋转,与碰到的矩形的第一条边的夹角。并且这个边的边长是width,另一条边边长是height。也就是说,在这里,width与height不是按照长短来定义的。

在opencv中,坐标系原点在左上角,相对于x轴,逆时针旋转角度为负,顺时针旋转角度为正。

为了直观起见, 我们可以直接这样赋值

((cx, cy), (width, height), theta) = cv2.minAreaRect(cnt)
1
复制代码

完整一些的演示样例:

for cidx,cnt in enumerate(contours):
    ((cx, cy), (width, height), theta) = cv2.minAreaRect(cnt)
    print('center: cx=%.3f, cy=%.3f, width=%.3f, height=%.3f, roate_angle=%.3f'%(cx, cy, width, height, theta))
复制代码

输出结果:

center: cx=133.105, cy=404.773, width=100.107, height=57.519, roate_angle=-49.185 
center: cx=415.190, cy=378.853, width=66.508, height=100.537, roate_angle=-1.710  
center: cx=278.323, cy=296.089, width=71.608, height=78.065, roate_angle=-78.440  
center: cx=83.000, cy=307.000, width=60.000, height=94.000, roate_angle=0.000     
center: cx=448.346, cy=213.731, width=47.068, height=64.718, roate_angle=-11.310  
center: cx=89.642, cy=164.695, width=17.204, height=88.566, roate_angle=-25.427   
center: cx=330.578, cy=123.387, width=92.325, height=72.089, roate_angle=-66.666 
复制代码

完整代码展示:

import numpy as np
import cv2

# 读入黑背景下的彩色手写数字
img = cv2.imread("color_number_handwriting.png")
# 转换为gray灰度图
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 寻找轮廓
contours, hier = cv2.findContours(gray, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

# 声明画布 拷贝自img
canvas = np.copy(img)

for cidx,cnt in enumerate(contours):
    minAreaRect = cv2.minAreaRect(cnt)
    # 转换为整数点集坐标
    rectCnt = np.int64(cv2.boxPoints(minAreaRect))
    # 绘制多边形
    cv2.polylines(img=canvas, pts=[rectCnt], isClosed=True, color=(0,0,255), thickness=3)

cv2.imwrite("number_minarearect_canvas.png", canvas)
复制代码

提取最小外接矩形区域

我们可以根据 minAreaRect 函数返回的数据结构, 以矩形中心 (cx, cy) 作为对原来图像旋转的中心点,旋转角度设定为 theta :

# 声明旋转矩阵
rotateMatrix = cv2.getRotationMatrix2D((cx, cy), theta, 1.0)
# 获取旋转后的图像
rotatedImg = cv2.warpAffine(img, rotateMatrix, (img.shape[1], img.shape[0]))
复制代码

具体代码如下:

'''
    利用minAreaRect绘制最小面积矩形并绘制
'''
import numpy as np
import cv2

# 读入黑背景下的彩色手写数字
img = cv2.imread("color_number_handwriting.png")
# 转换为gray灰度图
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 寻找轮廓
contours, hier = cv2.findContours(gray, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

for cidx,cnt in enumerate(contours):
    minAreaRect = cv2.minAreaRect(cnt)
    # 转换为整数点集坐标
    # rectCnt = np.int64(cv2.boxPoints(minAreaRect))
    ((cx, cy), (w, h), theta) = minAreaRect

    cx = int(cx)
    cy = int(cy)
    w = int(w)
    h = int(h)
    # 获取旋转矩阵
    rotateMatrix = cv2.getRotationMatrix2D((cx, cy), theta, 1.0)
    rotatedImg = cv2.warpAffine(img, rotateMatrix, (img.shape[1], img.shape[0]))
    pt1 = (int(cx - w/2), int(cy - h/2))
    pt2 = (int(cx + w/2), int(cy + h/2))
    # 原图绘制矩形区域
    cv2.rectangle(rotatedImg, pt1=pt1, pt2=pt2,color=(255, 255, 255), thickness=3)
    # 绘制中心点
    cv2.circle(rotatedImg, (cx, cy), 5, color=(255, 0, 0), thickness=-1)
    cv2.imwrite("minarearect_cidx_{}.png".format(cidx), rotatedImg)
复制代码

数字样本图像转换为统一尺寸

我们截取了包含数字的外接矩形, 他们形状各异。(可能需要手动旋转)

如果是制作神经网络所需要的样本图片的话, 我们就需要将其放缩到统一大小。

接下来我们将图片统一变换到 15*25 并转换为二值化图像。

具体代码如下:

import numpy as np
import cv2
from glob import glob

img_paths = glob('./数字图像处理/*.png')

# 新的维度为10×20
new_dimension = (15, 25)

for img_path in img_paths:
    # 读入灰度图
    img = cv2.imread(img_path,cv2.IMREAD_GRAYSCALE)
    img_name = img_path.split('/')[-1]
    # 缩放
    resized = cv2.resize(img, new_dimension)
    # 二值化图片
    ret,thresh = cv2.threshold(resized,10,255,0)

    cv2.imwrite('./number/'+img_name,thresh)
复制代码

完整项目源码点这里

 

python之图像仿射变换实战-提取手写数字图片样本 在进行实战项目之前,我们先来学习一个知识点:连通域的外界矩形 寻找外接矩形有两种策略: 一种是寻找轮廓边缘的部分, 找到最外面的那个外接矩形, 为了区分, 我们称之为正外接矩形 boundingRect, 如下图绿色矩形部分. 另外一种策略是矩形可以旋转, 找到面积最小的矩形, 刚刚好可以把轮廓套在里面,我们称之为*最小外接矩形 * minAreaRect, 如下图蓝色矩形部分. 提取手写数字图片样本正外接矩形 boudningRect最小外接矩形 minAreaRect提取最小外接矩形区域数字样本图 阅读详情

相关推荐

[Python图像处理] 十二.图像几何变换之图像仿射变换、图像透视变换和图像校正

该系列文章是讲解Python OpenCV图像处理知识,主要讲解图像入门、OpenCV基础用法。前面的第六篇文章讲解了图像缩放、图像旋转、图像翻转和图像平移的几何变换,本篇文章主要讲解图像仿射变换和图像透视变换,通过Python调用OpenCV函数实。基础性知识希望对您有所帮助。

杨秀璋的专栏 1万+

Python人工智能--实现手写数字识别

在做此项目之前,首先要明白何为KNN算法。 一 、 K-近邻算法(KNN)概述 最简单最初级的分类器是将全部的训练数据所对应的类别都记录下来,当测试对象的属性和某个训练对象的属性完全匹配时,便可以对其进行分类。但是怎么可能所有测试对象都会找到与之完全匹配的训练对象呢,其次就是存在一个测试对象同时与多个训练对象匹配,导致一个训练对象被分到了多个类的问题,基于这些问题呢,就产生了KNN。 KNN是通...

我是一只程序⚪的技术交流平台 2万+

[Python图像识别] 四十七.Keras深度学习构建CNN识别阿拉伯手写文字图像

该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门、OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子、图像增强技术、图像分割等,后期结合深度学习研究图像识别、图像分类应用。上一篇文章主要介绍ACE去雾算法、暗通道先验去雾算法以及雾化生成算法,并且参考了两位计算机视觉大佬(Rizzi 何恺明)的论文。本文主要通过Keras深度学习构建CNN模型识别阿拉伯手写文字图像,一篇非常经典的图像分类文字。本文参考并复现了刘润森老师的博客,推荐大家关注他的文章,真的非常棒!

杨秀璋的专栏 1万+

OpenCV-Python 通过边缘检测识别物体并批量提取(大米识别为例)——minAreaRect批量生成物体的最小外接矩形(旋转矩形)并批量裁剪

OpenCV版本:4.0.0.21 算法实现思路如下: 对图像做降噪滤波处理 提取边缘 检测轮廓 检测轮廓最小外接矩形(旋转矩形) 对图像先平移再旋转 最后裁剪 代码如下: import cv2 import numpy as np image = cv2.imread("rice.jpg") gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 转为灰度图 blurred = cv2.GaussianBlur(gray, (11,

weixin_41611054的博客 1万+

OpenCV项目开发实战--图像识别和目标检测之(手写数字分类)

详细介绍OpenCV项目开发实战--图像识别和目标检测之(手写数字分类)的代码实现

DT程序员的博客 465

python实现基于SVM手写数字识别功能

本文实例为大家分享了SVM手写数字识别功能的具体代码,供大家参考,具体内容如下 1、SVM手写数字识别 识别步骤: (1)样本图像的准备。 (2)图像尺寸标准化:将图像大小都标准化为8*8大小。 (3)读取未知样本图像,提取图像特征,生成图像特征组。 (4)将未知测试样本图像特征组送入SVM进行测试,将测试的结果输出。 识别代码: #!/usr/bin/env python import numpy as np import mlpy import cv2 print 'loading ...' def getnumc(fn): '''返回数字特征''' fnimg = cv2.i

最小外接矩形

https://blog.youkuaiyun.com/lanyuelvyun/article/details/76614872 使用python opencv返回点集cnt的最小外接矩形,所用函数为 cv2.minAreaRect(cnt) ,cnt是点集数组或向量(里面存放的是点的坐标),并且这个点集不定个数。 举例说明:画一个任意四边形(任意多边形都可以)的最小外接矩形,那么点集 cnt 存放...

计算机视觉 970

Langchain4j 文档处理实战:从加载到分割的完整流程解析

本文详细解析了使用Langchain4j进行文档处理的完整流程,涵盖从文档加载、解析到分割的核心步骤。通过实战代码示例,重点介绍了如何利用文档分割器将大文档切割为适合大语言模型处理的片段,并提供了参数调优与避坑指南,帮助Java开发者高效构建AI应用的数据处理基础。

smartcontract5的博客 543

Opencv之cv2.minAreaRect

目录 一、cv2.minAreaRect函数原型 二、minAreaRect函数返回rect对象   一、cv2.minAreaRect函数原型 cv2.minAreaRect(Points) 其中points是点集,数据类型为ndarray,array((x1,y1),(x2,y2),....,(xn,yn)) 而minAreaRect就是求出在上述点集下的最小面积矩形 eg. ...

qq_37385726的博客 5万+

ArcMap新手必看:Shape属性中的点ZM值到底是什么?如何快速处理

本文深入解析ArcMap中Shape属性中的点ZM值,揭示其在GIS数据中的隐藏维度作用,包括Z值(高程值)和M值(测量值)。针对ZM值可能引发的服务发布问题,提供三种高效处理方案,帮助新手快速掌握数据导入时的ZM值管控策略及精准去除方法。

weixin_42561476的博客 432

RDKit | 基于Pytorch和RDKit建立QSAR模型

QSAR 定量构效方法(quantitative structure-activity relationship, QSAR)是应用最为广泛的药物设计方法。所谓定量构效方法就是通过一些数理统计方法建立其一系列化合物的生理活性或某种性质与其物理化学性质之间的定量关系,通过这些定量关系。可以预测化合物的生理活性或某些性质,指导我们设计出具有更高活性的化合物。 早在...

DrugOne 5079

基于Python实现的手写数字图像识别

理解 HOG、ORC 过程,修改 digits.py 或独立编程,实现数字图像的识别,要求分别使用 SVM、knn(第六次课)以及 cnn 神经网络模型(第七次课),以群文件中 digit_data.rar 中 train 文件夹下数据作为训练集,test 文件夹下图片作为测试集,并计算测试集上分类正确率,本文转载自http://www.biyezuopin.vip/onews.asp?本篇实验报告所记录的内容仅为写报告时(2021/05/12)的情况,可能与实际实验时/04/28)结果有出入。

毕业作品网站 4216

手把手教你学simulink(8.3)--实例:基于 Simulink 的自动驾驶汽车速度控制系统设计与仿真

基于 Simulink 的自动驾驶汽车速度控制系统设计与仿真。

MHD0815的博客 1210

基于SVM,KNN,CNN的数字图像识别

文章目录一些瞎扯的话一、必备的有关 OpenCV 和 HOG 的前置知识1.关于OpenCV模块:图片读、写和显示操作,以及图片属性2.关于OpenCV模块:图片缩放和仿射变换3.有关 HSV 空间, Gramma变换, HOG 特征的知识。二、用 OpenCV 的仿射变换实现图片缩放三、理解 HOG、ORC 过程,使用SVM 和 KNN 模型实现数字图像的识别1.数字图像的类型2.提取数字图像的HOG特征3.训练模型并测试四、使用 CNN 神经网络模型实现数字图像的识别1.处理图像数据2.设置模型,训练.

总有人要摆烂的,为什么不能是我呢 5557

【异常】Nacos 2.x 核心报错:Server check fail (gRPC 端口连不通) 深度排查

如果 Nacos 运行在 K8s 中,需确保对应的Servicemetadata:spec:ports:port: 8848port: 9848 # 必须暴露此端口selector:app: nacos在 Nacos 2.x 时代,“端口成套出现”是基础设施配置的基本要求。遇到连接失败时,首要检查的不是业务配置,而是网络链路上主端口 + 1000的 TCP 通讯是否被放行。更多关于 AI + 教育领域的干货,可以关注我的微信公众号一时间获取哦~

奶爸的编程之路,也就一周冷个三天 325

【保姆级教程】基于UNet++&MobileNetv2的语义分割模型从训练到RK3588部署:让边缘AI落地效率提升300%

通过SMP库一键构建encoder_name="mobilenet_v2", # 选择MobileNetv2作为骨干encoder_weights="imagenet", # 加载预训练权重加速收敛in_channels=3, # 输入图像通道数(RGB)classes=29, # Cityscapes数据集类别数activation=None # 输出无激活,便于后续损失计算本教程从“模型设计-训练-转换-边缘部署”全链路拆解了。

m0_71589036的博客 89

如何使用OpenCV进行手写数字分类器C++/Python

在本教程中,我们将使用OpenCV构建一个简单的手写数字分类器。我们将共享用C ++和Python编写. 图像分类管道 本章节暂不讨论图像分类管道,大家可以自行搜索相关知识,下次我们补充。 我们将使用方向梯度直方图作为特征描述符和支持向量机(SVM)作为分类的机器学习算法。 使用OpenCV的光学字符识别(OCR)示例(C ++ / Python) 我想与代码共享一个示例,...

图像算法Imalg的博客 1745

基于深度学习的目标检测在 Android 端的优化实现:YOLO Mobile × NPU 加速实战教程

随着国产手机芯片日益强大,终端侧的目标检测任务已经具备实用性基础。本文围绕实际工程场景,详细讲解如何在 Android 应用中部署轻量级目标检测模型(如 YOLO Mobile、EfficientDet Lite),并结合国产手机 NPU 能力,实现高性能、低延迟、实时目标检测系统。文章将涵盖从模型选择、结构优化、量化转换到 Android 上推理加速、UI 实时渲染的全链路工程路径,强调每一环节的真实可复现性与部署细节,适合 AI 工程师、移动开发者及企业级应用落地团队参考使用。

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 1410

图片仿射变换-python源码

对像素点直接操作来实现仿射变换 第一部分:图片倒置 1.图片倒置就是将图片的像素点就行倒置,左上角的像素点 与对应右下角的像素点就行交换,经过这样的操作后,就实现了图片的倒置,下面给出操作的代码。 import cv2 import numpy as np img = cv2.imread("1.jpg") h,w = img.shape[:2] dst = np.zeros((h*2,w*...

weixin_44678052的博客 1173

基于simulink的电气弹簧ES稳压控制模型仿真

若要补偿母线电压的谐波,需控制ES上的谐波,即在单闭环母线电压有效值控制的基础上,增加谐波抑制环节来进行谐波控制,现有的各种检测和抑制谐波的方法有采用模拟滤波器、傅里叶分析进行谐波分析、基于瞬时无功功率理论的方法等。当关键负载ZC为电流源型非线性负载时,电路原理图如图7所示,由于电流源型非线性负载可以等效为谐波电流源,关键负载电流ic便会含有谐波分量,导致输电线电流is和母线电压VS同样会含有谐波分量,导致供电质量的严重下降,对用电设备的正常工作造成影响。分别为流过线路阻抗、非关键负载、关键负载的电流,

FPGA/MATLAB学习教程/源码/项目合作开发 1633

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

python-opencv学习笔记(九):图像的仿射变换与应用实例

引言 本篇是在实验楼所做实验,因为感觉整个过程做得十分通畅,另外脉络比较清晰,加上了点自己的理解,整理成学习笔记。 图像平移 图像平移的数学推导 简单来说,图像的本质可以看做一个三维矩阵,第一维为长度,第二维是宽度,第三维是通道数(RGB),如果一张图在 python 中是一个变量 image,那么其长宽即 width, height = image.shape[:2]。 图像的平移就是在 xy 平面内对图像进行移动,所以该操作有两个自由度。其表达式为: [x′y′]=[1001]×[xy]+[b0b1]

submarineas的博客 4784

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

图像到图像的映射-仿射变换的应用-图像扭曲实例

图像到图像的映射-仿射变换的应用-图像扭曲实例1. 原理2.代码实现 1. 原理 单应性变换: 单应变换矩阵是一个3*3的矩阵H。这个变换可以被任意乘上一个非零常数,而不改变变换本身。所以它虽然具有9个元素,但是具有8个自由度。这意味这它里面有8个未知参数待求。 仿射变换 仿射变换:(Affine Transformation 或Affine Map)是一种二维坐标(x, y)到二维坐标(u, ...

CAnCErWu的博客 1297

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

基于OpenCV拼接及变换图像增加训练样本

我们在做深度学习的过程中,经常面临图片样本不足、不平衡的情况,在本文中,作者结合实际工作经验,通过图像的移动、拼接、缩放、旋转、增加噪声等图像变换技术,能快速、简便的增加样本数量。

肖永威的专栏 2253

Python之图像处理OpenCV

文章目录前言一、图像基础1.1 理论介绍1.2 案例1-手写数字识别二、图像滤波与预处理三、图像变换1.引入库2.读入数据总结 前言 基础包 opencv-python 高配版 opencv-contrib-python 一、图像基础 1.1 理论介绍 使用了cv2.imread()即改变了存储格式: 由 jpg:rgb—>opencv:bgr 一张图像 处理: 1.三维数组 2.画过三维散点图 3.图像的直方图:统计像素点的分布特征 灰度图 三维的彩色图 ==》转为一维的灰度

HG0724的博客 1094

OpenCV-Python图形图像处理专栏文章目录

OpenCV-Python setMouseCallback回调函数中图像变量img的传递方法解析 OpenCV-Python图像乘法运算cv2.multiply函数详解及像素值溢出归一化处理 OpenCV-Python图像位与运算bitwise_and函数详解 OpenCV-Python图像的减法运算cv2.subtract函数详解以及和矩阵减法的差异对比 OpenCV-Python图像的加法运算cv2.add函数详解 OpenCV-Python图像融合cv2.addWeighted权重加法函数详解 Op

老猿Python 6717
上一篇: 爬虫实战系列!淘宝店铺各品牌手机售卖信息爬取及可视化!
下一篇: 教你如何用python轻轻松松操作Excel、Word、CSV,一文就够了,赶紧码住!!!
pythonlaodi
博客等级 码龄6年 286粉丝 244原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值