应用笔画宽度变换(SWT)来检测自然场景中的文本
Introduction:
应用背景:是盲人辅助系统,城市环境中的机器导航等计算机视觉系统应用的重要一步。获取文本能够为许多视觉任务提供上下文的线索,并且,图像检索算法的性能很大部分都依赖于对应的文本检测模块。
意义:传统的OCR应用于扫描文本,所以其依赖于把文本从背景像素中正确分离。这对于扫描文本来说是很简单的,但是自然图像由于存在色彩噪声,模糊,遮挡,很难将文本从背景中分离。
文章提出的方法:文本有着固定的笔画宽度,利用这一特性就够从背景中将其恢复。首先求图像的笔画宽度变换即每个像素都分配了一个笔画宽度,然后利用灵活的几何推理,把有着相似比划宽度的位置都被聚合成词。这相似并不是很严格,在一定范围内变化都是可以的。
优点:1.没有提取分离每个像素特征如:颜色,梯度等,而是提出像素组的特征。2.没有使用在多尺度金字塔上滑动的窗口,而是基于自底向上的方式,把有着相似笔画宽度的像素归并成连通域。3.没有利用特定的语言信息滤除机制,所有能够用于多语言的文本检测。
previous work :
1.基于纹理的
在多个尺度上扫描图像,然后利用一些文本的特性如:高密度的边缘,文本上下的低梯度,灰度变化明显,波形的分布,离散余弦变换系数等来分类像素。其缺点是大计算量,缺乏精度。
2.基于区域的
利用像素存在着相似的特性如一样的颜色来组织像素成连通域。然后利用几何或者纹理信息来排除那些不可能是文本的连通域。优点是:同时在各个尺度检测文本,并且不限制于水平方向的文本。
The flowchart of the algorithms:
流程首先计算图像的canny 边缘,然后根据边缘的方向信息计算图像的SWT ,根据笔画宽度信息将像素聚集成连通域,利用几何推理如连通域的高宽比,连通域笔画的方差,均值,中值等来过滤连通域,将连通域聚集成文本行,最后将文本行分割成一个个词。流程的核心为SWT和滤除连通域。下面给出这些步骤的详细阐述,并给出matlab和C++代码。
1.笔画宽度变换
输入的是原始彩色图像,输出的是对每个像素都分配了笔画宽度的图像。
First pass:
这个流程图有两个问题1.如果一个点被多个路径扫描到,那么就赋值为最小路径距离即笔画宽度。2.在笔画的转弯处会出现问题,如上图右边,从上到下和从左到右的两条路径经过这点,假设从上到下的笔画宽度为50,从左到右为40,那么这点的笔画宽度为40.这显然不符合实际情况。这就需要第二次扫描。
Second pass:
第二次扫描流程是,对于所有第一次扫描到的路径,求出路径上的中值,将所有这条路径上大于中值的点全部赋值为中值。
2.像素聚成连通域
从第一步我们得到的是笔画宽度图像,这时也还是一个个像素,所以我们要根据一些规则把像素合并成区域(即自底向上的一个过程)这个主要通过改变传统连通域分析的连接条件得到,传统连通是像素周围4连接或者8连接的像素都是同一值则是同一连通域,而这里改变了这一条件,中心像素和周围像素SW(笔画宽度)比不能超过3.0.
3.连通域滤除
第二步得到的连通域中存在着许多明显不是字符的区域,我们需要根据一些先验的知识滤除这些区域。主要是根据以上几个规则
varianceSW:连通域笔画的方差。meanSW:连通域笔画的均值。aspectRatio:连通域高宽比。diameter:连通域直径。width:连通域宽。height:连通域高
1). 10<height<300;
2).varianceSW/meanSW > .5
3).diameter/medianSW >= 10
4).aspectRatio < 0.1 && aspectRatio > 10
5).连通域的boudingbox不能包含超过两个的连通部件
4.字符成文本行
同第三步一样,从上面得到的是一个个候选的字符(连通域),我们需要把字符合并成文本行。依据以下的规则
1).两个候选字符的中值笔画宽度比不超过2.0.
2).字符的宽度不超过3倍于最宽的字符宽度。
3).字符的颜色一致
5.文本行分割成词
通过文本行的水平距离直方图来分割(??)
论文地址:http://www.math.tau.ac.il/~turkel/imagepapers/text_detection.pdf
核心部分的c++和matlab见下篇。
应用笔画宽度变换(SWT)来检测自然场景中的文本的更多相关文章
- 【OCR技术系列之五】自然场景文本检测技术综述(CTPN, SegLink, EAST)
文字识别分为两个具体步骤:文字的检测和文字的识别,两者缺一不可,尤其是文字检测,是识别的前提条件,若文字都找不到,那何谈文字识别.今天我们首先来谈一下当今流行的文字检测技术有哪些. 文本检测不是一件简 ...
- EAST 自然场景文本检测
自然场景文本检测是图像处理的核心模块,也是一直想要接触的一个方面. 刚好看到国内的旷视今年在CVPR2017的一篇文章:EAST: An Efficient and Accurate S ...
- OpenCV_contrib里的Text(自然场景图像中的文本检测与识别)
平台:win10 x64 +VS 2015专业版 +opencv-3.x.+CMake 待解决!!!Issue说明:最近做一些字符识别的事情,想试一下opencv_contrib里的Text(自然场景 ...
- 使用Python基于VGG/CTPN/CRNN的自然场景文字方向检测/区域检测/不定长OCR识别
GitHub:https://github.com/pengcao/chinese_ocr https://github.com/xiaofengShi/CHINESE-OCR |-angle 基于V ...
- Android——检测TXT文件中是否含有双字节字符
在读取双字节字符时,主要涉及到编码的选取: public static boolean isRightfulTXT(File f) { // TODO Auto-generated method st ...
- [Swift通天遁地]七、数据与安全-(11)如何检测应用程序中的内存泄露
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- bash命令检测Shell脚本中的语法错误和查看详细执行过程
(1).bash命令检测Shell脚本中的语法错误 bash -v [脚本] [root@youxi1 ~]# vim a.sh #/bin/bash sum=$[$1+$2] echoo $sum ...
- hough变换是如何检测出直线和圆的?
(I)直线篇 1 直线是如何表示的?对于平面中的一条直线,在笛卡尔坐标系中,常见的有点斜式,两点式两种表示方法.然而在hough变换中,考虑的是另外一种表示方式:使用(r,theta)来表示一条直线. ...
- 利用Laplacian变换进行图像模糊检测
检测图片是否模糊有很多方法(这篇文章review了36种),比如FFT和variation of Laplacian等,前者在操作到时候需要定义高频的量有多低和多高来区分图片是模糊的,操作起来比较麻烦 ...
随机推荐
- MySQL按照汉字拼音首字母排序
按照汉字的拼音排序,用的比较多是在人名的排序中,按照姓氏的拼音字母,从A到Z排序: 如果存储姓名的字段采用的是GBK字符集,那就好办了,因为GBK内码编码时本身就采用了拼音排序的方法(常用一级汉字37 ...
- Mac下Intellij IDea发布JavaWeb项目 详解三 (为所有Module配置Tomcat Deployment 并测试web 网页 配置Servlet)
step4 为所有项目配置Deployment 4.1 如图 4.2 [+][Artifact] 4.3 将这里列出的所有内容选中后,点[OK] 4.4 选完是这样,表示,这三个java ee 项目会 ...
- U盘安装centos7:不能载入到安装界面
在用U盘安装centos7时,我们需要修改镜像位置: 选择第一项:Install CentOS 7 ,按 e(也有可能是tab键)键进入编辑界面. 将 vmlinuz initrd=initrd.im ...
- 【Java基础系列】Java IO系统
前言 创建好的输入/输出系统不仅要考虑三种不同种类的IO系统(文件,控制台,网络连接)还需要通过大量不同的方式与他们通信(顺序,随机访问,二进制,字符,按行,按字等等). 一.输入和输出 Java的I ...
- EXCEL2010如何显示工作表中单元格内的公式
以EXCEL 2010为例 打开含有公式的EXCEL表格文件,图中红圈所示就是单元格的公式,默认是显示计算结果: 我们依次找到“公式”-〉“公式审核”-〉并点击“显示公式”: 点击后, 有 ...
- Kafka+Storm+HDFS 整合示例
消息通过各种方式进入到Kafka消息中间件,比如可以通过使用Flume来收集日志数据,然后在Kafka中路由暂存,然后再由实时计算程序Storm做实时分析,最后将结果保存在HDFS中,这时我们就需要将 ...
- LeetCode 36 Valid Sudoku(合法的数独)
题目链接: https://leetcode.com/problems/valid-sudoku/?tab=Description 给出一个二维数组,数组大小为数独的大小,即9*9 其中,未填入 ...
- jvisualvm连接远程应用终于成功,附踩大坑记录!!(一:jstatd方式)
一.问题概述 连接远程java应用除了jstatd方式,还有jmx方式.不必拘泥于一种,一种不行可以果断尝试另一种,兴许就行了. 姊妹篇在这: jvisualvm连接远程应用终于成功,附踩大坑记录!! ...
- testmath
$\Huge ans = \frac{ \sum\limits_{i=1}^{m}{ (x_i - \bar{x})^2 } }{m} \cdot m^2 \\$
- ES6 阮一峰阅读学习
参考: ECMAScript6入门 就是随便看看,了解一下. 一.ECMAScript6简介 1. 什么是ECMAScript6? JavaScript语言的下一代标准.2015年6月发布,正式名称是 ...