验证码识别的原理和过程


第一步:    二值化

所谓二值化就是把不需要的信息通通去除,比如背景,干扰线,干扰像素等等,只剩下需要识别的文字,让图片变成2进制点阵。

第二步: 文字分割

为了能识别出字符,需要对要识别的文字图图片进行分割,把每个字符作为单独的一个图片看待。

第三步:标准化

对于部分特殊的验证码,需要对分割后的图片进行标准化处理,也就是说尽量把每个相同的字符都变成一样的格式,减少随机的程度

最简单的比如旋转还原,复杂点的比如扭曲还原等等

第四步:识别

这一步可以用很多种方法,最简单的就是模板对比,对每个出现过的字符进行处理后把点阵变成字符串,标明是什么字符后,通过字符串对比来判断相似度。

在文章的后半部分会详细解释每步的各种算法

二值化实现方法有

1.1图像灰度化-中值滤波等,同时可以实现背景的去除

1.2图像灰度化-根据灰度值

1.3根据图像色系范围进行二值化处理

图像二值化的意思就是将图像的有效点给分离出来,然后将图片用0和1两个值进行表 示,因为我们没必要知道他们的具体色值,我们的目的就是要知道他们的具体形状,他们 的特征

譬如说淘宝的验证码,和盛大的验 证码, 他们的有效点无非就是U3FM和YPZ7等字符所占据的空间,我们不用管他们是黑色还是红色 ,我们将所有他们所占据的位置都给置为1,其他位置都给置为0

然后我将1的位置用黑色给画出来,0的位置用白色给画出来,就是和

1.2图像灰度化-根据灰度值

这种方式主要适用于对图片进行灰度化(转黑白)处理以后,图片的有效点和背景能 够通过他们的亮度很完美的给分离开的情况,譬如说17GAME的验证码经过灰度化处 理以后是,他的有效点的亮度为0,而背景都有一定的亮度,因此我们之类就可以采取根据亮度 值0-0的限度进行分离,凡是亮度为0的位置,我们都置为1,否则多置为0,这样验证码就 变为了 ,这样图片的二值化就处理成功了,其实17GAME的验证码我们也可以根据色值进行直接的 二值化,因为他的有效点的颜色为#00000,我们直接根据这个就可以直接二值化;

1.3根据图像色系范围进行二值化处理

譬如说有些图片他是全部采用了红色系,然后中间使用了渐变,这样我们可以通过获 取他们的色系范围,即R-G-B各自的取值范围,然后根据这个范围进行直接二值化,此方 法跟灰度化处理大同小异

1.1图像灰度化-中值滤波等,同时可以实现背景的去除

这个步骤为走向二值化的中间步骤,譬如说遇到稍微变态的图片,譬如说新浪博客 ,他含有 背景的杂色,我们就需要先对其进行灰度化处理,然后再根据 中值滤波算法对其进行二值化处理,将背景和前景分离开来,得到

基本经过这几种方式,我们就成功的对图片进行了二值化处理,得到了图片的有效位 置信息,接下来我们还要对其进行去噪,干扰线之类的

matlab:

读入的图像是rgb图像,要先转换成灰度图,阈值的选取有很多种方法,可以用灰度直方图,取谷点;

1、若想快速转变成二值图像则:

i=imread('tuxiang.jpg');

i1=rgb2gray(i);%i1灰度图像

i2=im2bw(i1);% i2是二值图像,不需要求阈值

2、如果你要找直方图谷点,可以imhist(i1)画出灰度直方图,然后观察出谷底,若想编程求谷点的我就不给你编了,不太难;

3、或者你可以自己设经验值

Imax=max(max(i1));

Imin=min(min(i1));

T=round(Imax-(Imax-Imin)/2);%我随便取的,但基本较为好用

i2=(i1)>=T;%i2是二值图像

imshow(i2)

图像识别-纯数字识别相关推荐

  1. 2021全国电设(F题)openmv的图像识别之数字识别

    基于openmv的图像识别 通过参加全国电子设计大赛F题总结出openmv4的数字识别(其它版本暂时没试过,欢迎交流!) openmv简介 OpenMV是一个开源,低成本,功能强大的机器视觉模块,以S ...

  2. 图像识别:利用KNN实现手写数字识别(mnist数据集)

    图像识别:利用KNN实现手写数字识别(mnist数据集) 步骤: 1.数据的加载(trainSize和testSize不要设置的太大) 2.k值的设定(不宜过大) 3.KNN的核心:距离的计算 4.k ...

  3. 【Matlab数字识别】数字仪表图像识别【含源码 693期】

    一.代码运行视频(哔哩哔哩) [Matlab数字识别]数字仪表图像识别[含源码 693期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅.MATLAB ...

  4. Tensorflow 学习入门(二) 初级图像识别——手写数字识别

    初级图像识别--手写数字识别 背景知识储备 Softmax Regression MNIST 矩阵相乘 One Hot 编码 Cross Entropy(交叉熵) 代码实现 引入数据 设计数据结构 完 ...

  5. 误差反向传播法实现手写数字识别(纯numpy实现)

    前面一篇博客中我们讲解了仅仅使用numpy实现了数值微分法的梯度下降完成手写数字识别,使用数值微分的计算量会非常大,因此耗时也非常久.在这里我们使用另外一种快速计算梯度的方式-误差反向传播法. 代码如 ...

  6. Python纯手动搭建BP神经网络--手写数字识别

    1 实验介绍 实验要求: 实现一个手写数字识别程序, 如下图所示, 要求神经网络包含一个隐层, 隐层的神经元个数为 15. 整体思路:主要参考西瓜书第五章神经网络部分的介绍,使用批量梯度下降对神经网络 ...

  7. 图像识别技术解析:手写数字识别(一)

    本文通过构建一个手写数字识别的程序来解析来自机器学习与深度学习的不同算法的特点,以及如何对识别效果进行改进. 一.如何构建一个手写数字识别程序 首先可以考虑构建一个简单的页面用于用户输入,也就是前端: ...

  8. 【opencv】(9) 图像识别实战:银行卡数字识别,附python完整代码和数据集

    各位同学大家好,今天我和大家分享一下opencv机器视觉实战项目,识别银行卡上的数字,该方法也同样适用于车牌数字识别. 数据集免费: https://download.csdn.net/downloa ...

  9. 【图像识别】基于卷积神经网络cnn实现银行卡数字识别matlab源码

    1 基于卷积神经网络cnn实现银行卡数字识别模型 模型参考这里. 2 部分代码 %印刷体识别 clc;clear;close all; addpath('util/'); addpath('data/ ...

最新文章

  1. .NET面向上下文、AOP架构模式(实现)
  2. .net mvc 获取url中controller和action
  3. 产品研发管理(二):使用SubVersion进行代码管理
  4. kdchxue讲解V9父栏目调用子栏目的办法
  5. 给钱,才是真的对你好
  6. hse是什么意思的缩写_什么是HSE
  7. 人类附身机器人获得永生_人类能否借助纳米机器人获得永生?
  8. t480 拆触摸板_thinkpadt480 win10电脑触摸板键盘失效怎么修复
  9. Mooc_AutoCAD绘制建筑施工图_单元平面图测验题
  10. unicode字符转换成中文
  11. html垂直线性渐变,CSS线性渐变 垂直和水平渐变linear-gradient
  12. Padavan 路由器获取唯一IPv6 解决无网络访问权限
  13. 在Eclipse中关联源代码
  14. c语言中f1等于f2详细意思,请c语言高手给我讲解一下这个题
  15. 音视频开发总结之一理论基础
  16. 看了下面的关于大亚湾核电站的一些报道,我终于明白为什么老弟在惠阳买的房子会这么便宜了
  17. 华为无线设备配置动态负载均衡
  18. 全套学习!系统学Android从零开始,详细的Android学习指南
  19. Xcode 7 导入.h文件不联想
  20. Office 365 备份与恢复

热门文章

  1. 怎样做C语言课程设计?(一)
  2. 编写非递归算法实现二叉树的中序遍历
  3. 简单工厂/工厂方法/抽象工厂
  4. 雅思成绩单上的这个符号, CEFR 究竟是什么意思
  5. 03-Mono Flux操作
  6. B2B和大宗B2C企业的自媒体代运营
  7. 在计算机中文字的表示
  8. cf103202M. United in Stormwind
  9. fileinfo的作用以及如何开启fileinfo扩展
  10. 敏感文件/目录扫描工具 dirsearch