Java基于opencv实现图像数字识别(二)—基本流程
Java基于opencv实现图像数字识别(二)—基本流程
做一个项目之前呢,我们应该有一个总体把握,或者是进度条;来一步步的督促着我们来完成这个项目,在我们正式开始前呢,我们先讨论下流程。
我做的主要是表格中数字的识别,但这个不是重点。重点是通过这个我们可以举一反三,来实现我们自己的业务。
图像的识别主要分为两步:图片预处理和图像识别;这两步都很重要
图像预处理:
1、 图像灰度化;二值化
2、 图像降噪,去除干扰线
3、 图像腐蚀、膨胀处理
4、 字符分割
5、 字符归一化
图像识别:
1、 特征值提取
2、 训练
3、 测试
灰度化:
在RGB模型中,如果R=G=B时,则彩色表示灰度颜色,其中R=G=B的值叫灰度值;因此,灰度图像每个像素点只需一个字节存放灰度值(又称强度值、亮度值),灰度范围为0-255。一般常用的是加权平均法来求像素点的灰度值
常见的加权方法如下:
1:)Gray = B ; Gray = G ; Gray = R
2:)Gray = max({B , G , R})
3:)Gray = (B + G + R) / 3
4:)Gray = 0.072169 * B + 0.715160 * G + 0.212671 * R
5:)Gray = 0.11 * B + 0.59 * G + 0.3 * R
这几种方法中,第一为分量法,即用RGB三个分量的某一个分量作为该点的灰度值;第二种方法为最大值法,将彩色图像中的三个分量亮度的最大值作为灰度图的灰度值;第三种方法是将彩色图像中的三分量求平均得到一个灰度图;后两种都属于加权平均法,其中第四种是opencv开发库所采用的一种求灰度值算法;第五种为从人体生理学角度所提出的一种求灰度值算法(人眼对绿色的敏感最高,对蓝色敏感最低)
二值化:
图像的二值化,就是将图像上的像素点的灰度值设置位0或255这两个极点,也就是将整个图像呈现出明显的只有黑和白的视觉效果
图像降噪:
就是处理掉一些干扰因素;
主要的降噪算法
滤波类:通过设计滤波器对图像进行处理。特点是速度往往比较快,很多卷积滤波可以借助快速傅里叶变化来加速
稀疏表达类:自然图片之所以看起来不同于随机噪音/人造结构,是因为大家发现他们总会在某一个横型下存在稀疏表达。而我们想排除的噪音往往无法被稀疏化。基于这个判别式模型,用稀疏性来约束自然图像,在很多逆问题里取得了拔群的效果
外部先验:如果从有噪音的图片本身无法找到规律,我们也可以借助其他类似但又没有噪音的图片,来总结图片具有的固有属性。这一类方法利用的外部图片来创造先验条件,然后用于约束需要预测的图片。最有代表性就是混合高斯模型
聚类低秩:除了可稀疏性,低秩性也是自然图片常见的一个特性。数学上,可稀疏表达的数据可以被认为是在Union of low-dimensional subspaces;而低秩数据则是直接存在于一个Low-dimensional subspace。这个更严格的限制往往也可以取得很好的降噪效果。
深度学习(Deep Learning):这类可以归于外部先验的子类,如果说解决逆问题的关键,是寻找一个好的图像约束器,那么我们为什么不用一个最好的约束器?深度学习方法的精髓,就在于通过大量的数据,学习得到一个高复杂度(多层网络结构)的图片约束器,从而将学习外部先验条件这一途径推到极限。近期的很多这类工作,都是沿着这一思路,取得了非常逆天的效果。
字符分割:就是把图片有用的部分一个个分割下来;字符分割有很多方法,但并不是每一种方法都是万能的,我们需要根据自己的业务来调整;常见的就是投影法和连通域法
投影法:就是分析每一维上黑色像素点的个数(假设是二值化的图像),然后设置一个阙值,根据这个阙值来分割图片
图像腐蚀、膨胀处理
腐蚀:图像的一部分区域与指定的核进行卷积,求核的最小值并赋值给指定区域。 腐蚀可以理解为图像中高亮区域的领域缩小。
膨胀:图像的一部分区域与指定的核进行卷积,求核的最大值并赋值给指定区域。 膨胀可以理解为图像中高亮区域的领域扩大。
字符的归一化:
就是将分割好的图像内的字符归一化到一个标准模板大小;归一化的理想结果就是:归一化到标准模板大小;倾斜校正;笔画宽度归一化;字形归一化。
注:
本文章参考了很多博客,感谢;主要是跟着一个博客来实现的https://blog.csdn.net/ysc6688/article/category/2913009(也是基于opencv来做的,只不过他是用c++实现的)感谢
Java基于opencv实现图像数字识别(二)—基本流程的更多相关文章
- Java基于opencv实现图像数字识别(三)—灰度化和二值化
Java基于opencv实现图像数字识别(三)-灰度化和二值化 一.灰度化 灰度化:在RGB模型中,如果R=G=B时,则彩色表示灰度颜色,其中R=G=B的值叫灰度值:因此,灰度图像每个像素点只需一个字 ...
- Java基于opencv实现图像数字识别(五)—投影法分割字符
Java基于opencv实现图像数字识别(五)-投影法分割字符 水平投影法 1.水平投影法就是先用一个数组统计出图像每行黑色像素点的个数(二值化的图像): 2.选出一个最优的阀值,根据比这个阀值大或小 ...
- Java基于opencv实现图像数字识别(四)—图像降噪
Java基于opencv实现图像数字识别(四)-图像降噪 我们每一步的工作都是基于前一步的,我们先把我们前面的几个函数封装成一个工具类,以后我们所有的函数都基于这个工具类 这个工具类呢,就一个成员变量 ...
- Java基于opencv实现图像数字识别(一)
Java基于opencv实现图像数字识别(一) 最近分到了一个任务,要做数字识别,我分配到的任务是把数字一个个的分开:当时一脸懵逼,直接百度java如何分割图片中的数字,然后就百度到了用Buffere ...
- Java基于opencv实现图像数字识别(五)—腐蚀、膨胀处理
腐蚀:去除图像表面像素,将图像逐步缩小,以达到消去点状图像的效果:作用就是将图像边缘的毛刺剔除掉 膨胀:将图像表面不断扩散以达到去除小孔的效果:作用就是将目标的边缘或者是内部的坑填掉 使用相同次数的腐 ...
- Java基于opencv—矫正图像
更多的时候,我们得到的图像不可能是正的,多少都会有一定的倾斜,就比如下面的 我们要做的就是把它们变成下面这样的 我们采用的是寻找轮廓的思路,来矫正图片:只要有明显的轮廓都可以采用这种思路 具体思路: ...
- 语义分割:基于openCV和深度学习(二)
语义分割:基于openCV和深度学习(二) Semantic segmentation in images with OpenCV 开始吧-打开segment.py归档并插入以下代码: Semanti ...
- Java基于OpenCV实现走迷宫(图片+路线展示)
Java基于OpenCV实现走迷宫(图片+路线展示) 由于疫情,待在家中,太过无聊.同学发了我张迷宫图片,让我走迷宫来缓解暴躁,于是乎就码了一个程序出来.特此记录. 原图: 这张图,由于不是非常清晰, ...
- 基于Opencv快速实现人脸识别(完整版)
无耻收藏网页链接: 基于OpenCV快速实现人脸识别:https://blog.csdn.net/beyond9305/article/details/92844258 基于Opencv快速实现人脸识 ...
随机推荐
- c# .net core 设置缓存
1.开启ResponseCaching的缓存(ResponseCaching相当于老版本的OutPutCache): 在Startup.cs文件中设置: public void ConfigureSe ...
- 银行卡卡bin
卡BIN指的是发卡行识别码,英文全称是 Bank Identification Number,缩写为 BIN.中文即“银行识别代码” 银行卡的卡号是标识发卡机构和持卡人信息的号码 一般是13-19位 ...
- JS数组映射详解
现在这里占个坑位,免的忘了,需要整理一下最近的内容: 1.数组映射的使用 2.微信分享功能详解 3.jq自己封装 4.HTML的富文本应用
- shell+Zabbix export应用之AD环境删除离职人员登录主机之资料
以实际环境:维护环境172.30网段主机 Zabbix hosts export出主机信息至 /tmp/ip.txt shell筛选出ip [root@server ~]# cat /tmp/ip.t ...
- hdu1256
画横线总是一个字符粗,竖线随着总高度每增长6而增加1个字符宽.当总高度从5增加到6时,其竖线宽度从1增长到2.下圈高度不小于上圈高度,但应尽量接近上圈高度,且下圈的内径呈正方形.每画一个"8 ...
- html入门1
1.HTML超文本标记语言,(Hypertext Markup Language),通过一段内容定义为标题,段落或者图像等,从而让该内容具有结构以及含义 2.W3C:万维网联盟(World Wide ...
- Spring学习之实例化bean的三种方式
实例化bean的三种方式 构造器实例化bean Person.java public class Person { private String name; private Integer age; ...
- 关于html的基础标签
html: 超文本标记语言 h1 -- h6: 标题标签 一级标题,一个页面中只能存在一个h1 数字越大,标题的级别越小br:换行p:段落 自带换行,前后自带间隙a::::href属性---指定将要跳 ...
- [Oracle][DATAGUARD] PHYSICAL STANDBY环境里,使用CATALOG管理Primary和Standby
1.先使用控制文件构筑好PHYSICAL STANDBY环境(Primary:Single 11.2.0.4,Standby Single 11.2.0.4) 2.构筑好Catalog用的服务器(Ca ...
- ESP系列MQTT数据通信
1.使用一个深圳四博智联科技有限公司的NODEMCU开发板. 2.下载MQTT的SDK压缩包,请查看附件. 3.用官方提供的Eclipse打开MQTT的sdk开发包. 4.打开include文件夹中的 ...