车牌识别及验证码识别的一般思路

本文源自我之前花了2天时间做的一个简单的车牌识别系统。那个项目,时间太紧,样本也有限,达不到对方要求的95%识别率(主要对于车牌来说,D,0OI1等等太相似了。然后,汉字的识别难度也不小),因此未被对方接受。在此放出,同时描述一下思路及算法。

全文分两部分,第一部分讲车牌识别及普通验证码这一类识别的普通方法,第二部分讲对类似QQ验证码,Gmail验证码这一类变态验证码的识别方法和思路。

 

一、车牌/验证码识别的普通方法

 

车牌、验证码识别的普通方法为:

(1)       将图片灰度化与二值化

(2)       去噪,然后切割成一个一个的字符

(3)       提取每一个字符的特征,生成特征矢量或特征矩阵

(4)       分类与学习。将特征矢量或特征矩阵与样本库进行比对,挑选出相似的那类样本,将这类样本的值作为输出结果。

 

下面借着代码,描述一下上述过程。因为更新SVN Server,我以前以bdb储存的代码访问不了,因此部分代码是用Reflector反编译过来的,望见谅。

 

(1)       图片的灰度化与二值化

 

这样做的目的是将图片的每一个象素变成0或者255,以便以计算。同时,也可以去除部分噪音。

图片的灰度化与二值化的前提是bmp图片,如果不是,则需要首先转换为bmp图片。

用代码说话,我的将图片灰度化的代码(算法是在网上搜到的):

 

Code

 

通过将图片灰度化,每一个象素就变成了一个0-255的灰度值。

然后是将灰度值二值化为 0 255。一般的处理方法是设定一个区间,比如,[a,b],将[a,b]之间的灰度全部变成255,其它的变成0。这里我采用的是网上广为流行的自适应二值化算法。

Code

 

灰度化与二值化之前的图片:

灰度化与二值化之后的图片:

 

注:对于车牌识别来说,这个算法还不错。对于验证码识别,可能需要针对特定的网站设计特殊的二值化算法,以过滤杂色。

(2)       去噪,然后切割成一个一个的字符

 

上面这张车牌切割是比较简单的,从左到右扫描一下,碰见空大的,咔嚓一刀,就解决了。但有一些车牌,比如这张:

 

    简单的扫描就解决不了。因此需要一个比较通用的去噪和切割算法。这里我采用的是比较朴素的方法:

    将上面的图片看成是一个平面。将图片向水平方向投影,这样有字的地方的投影值就高,没字的地方投影得到的值就低。这样会得到一根曲线,像一个又一个山头。下面是我手画示意图:

 

     然后,用一根扫描线(上图中的S)从下向上扫描。这个扫描线会与图中曲线存在交点,这些交点会将山头分割成一个又一个区域。车牌图片一般是7个字符,因此,当扫描线将山头分割成七个区域时停止。然后根据这七个区域向水平线的投影的坐标就可以将图片中的七个字符分割出来。

     但是,现实是复杂的。比如,“川”字,它的水平投影是三个山头。按上面这种扫描方法会将它切开。因此,对于上面的切割,需要加上约束条件:每个山头有一个中心线,山头与山头的中心线的距离必需在某一个值之上,否则,则需要将这两个山头进行合并。加上这个约束之后,便可以有效的切割了。

以上是水平投影。然后还需要做垂直投影与切割。这里的垂直投影与切割就一个山头,因此好处理一些。

切割结果如下:

水平投影及切割代码:

 

Code

 

代码中的 Pair,代表扫描线与曲线的一对交点:

Code

 

PairStatus代表Pair的状态。具体哪个状态是什么意义,我已经忘了。

Code

 

以上这一段代码写的很辛苦,因为要处理很多特殊情况。那个PairStatus 也是为处理特殊情况引进的。

垂直投影与切割的代码简单一些,不贴了,见附后的dllBitmapConverter.TrimHeight方法。

以上用到的是朴素的去噪与切割方法。有些图片,尤其是验证码图片,需要特别的去噪处理。具体操作方法就是,打开CxImagehttp://www.codeproject.com/KB/graphics/cximage.aspx),或者Paint.Net,用上面的那些图片处理方法,看看能否有效去噪。记住自己的操作步骤,然后翻他们的源代码,将其中的算法提取出来。还有什么细化啊,滤波啊,这些处理可以提高图片的质量。具体可参考ITK的代码或图像处理书籍。

 

(3)       提取每一个字符的特征,生成特征矢量或特征矩阵

 

将切割出来的字符,分割成一个一个的小块,比如3×35×5,或3×5,或10×8,然后统计一下每小块的值为255的像素数量,这样得到一个矩阵M,或者将这个矩阵简化为矢量V

通过以上3步,就可以将一个车牌中的字符数值化为矢量了。

1-3)步具体的代码流程如下:

Code

 

     然后,通过spliter.ValueList就可以获得 Bitmap map0 的矢量表示。

    (4)   分类

分类的原理很简单。用(Vij,Ci)表示一个样本。其中,Vij是样本图片经过上面过程数值化后的矢量。Ci是人肉眼识别这张图片,给出的结果。Vij表明,有多个样本,它们的数值化后的矢量不同,但是它们的结果都是Ci。假设待识别的图片矢量化后,得到的矢量是V’

直观上,我们会有这样一个思路,就是这张待识别的图片,最像样本库中的某张图片,那么我们就将它当作那张图片,将它识别为样本库中那张图片事先指定的字符。

在我们眼睛里,判断一张图片和另一张图片是否相似很简单,但对于电脑来说,就很难判断了。我们前面已经将图片数值化为一个个维度一样的矢量,电脑是怎样判断一个矢量与另一个矢量相似的呢?

这里需要计算一个矢量与另一个矢量间的距离。这个距离越短,则认为这两个矢量越相似。

我用 SampleVector<T> 来代表矢量:

Code

 

T代表数据类型,可以为Int32,也可以为Double等更精确的类型。

测量距离的公共接口为:IMetric

Code

 

常用的是MinkowskiMetric

 

Code

 

MinkowskiMetric是普遍使用的测度。但不一定是最有效的量。因为它对于矢量V中的每一个点都一视同仁。而在图像识别中,每一个点的重要性却并不一样,例如,QO的识别,特征在下半部分,下半部分的权重应该大于上半部分。对于这些易混淆的字符,需要设计特殊的测量方法。在车牌识别中,其它易混淆的有D00OI1Minkowski Metric识别这些字符,效果很差。因此,当碰到这些字符时,需要进行特别的处理。由于当时时间紧,我就只用了Minkowski Metric

我的代码中,只实现了哪个最近,就选哪个。更好的方案是用K近邻分类器或神经网络分类器。K近邻的原理是,找出和待识别的图片(矢量)距离最近的K个样本,然后让这K个样本使用某种规则计算(投票),这个新图片属于哪个类别(C);神经网络则将测量的过程和投票判决的过程参数化,使它可以随着样本的增加而改变,是这样的一种学习机。有兴趣的可以去看《模式分类》一书的第三章和第四章。

 

二、 变态字符的识别

 

有些字符变形很严重,有的字符连在一起互相交叉,有的字符被掩盖在一堆噪音海之中。对这类字符的识别需要用上特殊的手段。

下面介绍几种几个经典的处理方法,这些方法都是被证实对某些问题很有效的方法:

(1)   切线距离 Tangent Distance):可用于处理字符的各种变形,OCR的核心技术之一。

(2)   霍夫变换(Hough Transform):对噪音极其不敏感,常用于从图片中提取各种形状。图像识别中最基本的方法之一。

(3)   形状上下文(Shape Context):将特征高维化,对形变不很敏感,对噪音也不很敏感。新世纪出现的新方法。

 

因为这几种方法我均未编码实现过,因此只简单介绍下原理及主要应用场景。

 

(1)   切线距离

 

前面介绍了MinkowskiMetric。这里我们看看下面这张图:一个正写的1与一个歪着的1.

 

 

MinkowskiMetric计算的话,两者的MinkowskiMetric很大。

然而,在图像识别中,形状形变是常事。理论上,为了更好地识别,我们需要对每一种形变都采足够的样,这样一来,会发现样本数几乎无穷无尽,计算量越来越大。

怎么办呢?那就是通过计算切线距离,来代替直接距离。切线距离比较抽象,我们将问题简化为二维空间,以便以理解。

 

 

上图有两条曲线。分别是两个字符经过某一形变后所产生的轨迹。V1V22个样本。V’是待识别图片。如果用样本之间的直接距离,比较哪个样本离V’最近,就将V’当作哪一类,这样的话,就要把V’分给V1了。理论上,如果我们无限取样的话,下面那一条曲线上的某个样本离V’最近,V’应该归类为V2。不过,无限取样不现实,于是就引出了切线距离:在样本V1V2处做切线,然后计算V’离这两条切线的距离,哪个最近就算哪一类。这样一来,每一个样本,就可以代表它附近的一个样本区域,不需要海量的样本,也能有效的计算不同形状间的相似性。

深入了解切线距离,可参考这篇文章。Transformation invariance in pattern recognition – tangent distance and tangent propagation (http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.32.9482)这篇文章。

 

(2)   霍夫变换

 

霍夫变换出自1962年的一篇专利。它的原理非常简单:就是坐标变换的问题。

 

如,上图中左图中的直线,对应着有图中k-b坐标系中的一个点。通过坐标变换,可以将直线的识别转换为点的识别。点的识别就比直线识别简单的多。为了避免无限大无限小问题,常用的是如下变换公式:

 

 

下面这张图是wikipedia上一张霍夫变换的示意图。左图中的两条直线变换后正对应着右图中的两个亮点。

 

 

 

通过霍夫变换原理可以看出,它的抗干扰性极强极强:如果直线不是连续的,是断断续续的,变换之后仍然是一个点,只是这个点的强度要低一些。如果一个直线被一个矩形遮盖住了,同样不影响识别。因为这个特征,它的应用性非常广泛。

 

对于直线,圆这样容易被参数化的图像,霍夫变换是最擅长处理的。对于一般的曲线,可通过广义霍夫变换进行处理。感兴趣的可以google之,全是数学公式,看的人头疼。

 

(3)   形状上下文

 

图像中的像素点不是孤立的,每个像素点,处于一个形状背景之下,因此,在提取特征时,需要将像素点的背景也作为该像素点的特征提取出来,数值化。

形状上下文(Shape Context,形状背景)就是这样一种方法:假定要提取像素点O的特征,采用上图(c)中的坐标系,以O点作为坐标系的圆心。这个坐标系将O点的上下左右切割成了12×5=60小块,然后统计这60小块之内的像素的特征,将其数值化为12×5的矩阵,上图中的(d),(e),(f)便分别是三个像素点的Shape Context数值化后的结果。如此一来,提取的每一个点的特征便包括了形状特征,加以计算,威力甚大。来看看Shape Context的威力:

上图中的验证码,对Shape Context来说只是小Case

 

看看这几张图。嘿嘿,硬是给识别出来了。

 

Shape Context是新出现的方法,其威力到底有多大目前还未见底。这篇文章是Shape context的必读文章:Shape Matching and Object Recognitiom using shape contextshttp://www.cs.berkeley.edu/~malik/papers/BMP-shape.pdf)。最后那两张验证码识别图出自Greg Mori,Jitendra Malik的《Recognizing Objects in Adversarial Clutter:Breaking a Visual CAPTCHA》一文。

 

=========================================================== 

 

附件:第一部分的代码(vcr.zip). 3个dll文件,反编译看的很清晰。源代码反而没dll好看,我就不放了。其中,Orc.Generics.dll是几个泛型类,Orc.ImageProcess.Common.dll 对图像进行处理和分割,Orc.PatternRecognition.dll 是识别部分。

 

    这三个dll可以直接用在车牌识别上。用于车牌识别,对易混淆的那几个字符识别率较差,需要补充几个分类器,现有分类器识别结果为D ,O,0,I,1等时,用新分类器识别。用于识别验证码需要改一改。

    有个asp.net的调用例子可实现在线上传图片识别,因为其中包含多张车牌信息,不方便放出来。我贴部分代码出来:

 

Code
若标题中有“转载”字样,则本文版权归原作者所有。若无转载字样,本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
posted @ 2009-01-15 22:57 xiaotie 阅读(25281) 评论(105) 编辑 收藏

评论共2页: 上一页 1 2 
 回复 引用 查看   
#6楼[楼主] 2009-01-16 00:09 xiaotie      
@Steven Chen
大牛是(二)中的那几个家伙。

 回复 引用 查看   
#7楼 2009-01-16 01:17 progame      
好文留名 获益匪浅
 回复 引用 查看   
#8楼 2009-01-16 01:30 深蓝      
很厉害。我还没有做过这种项目,以后要做的时候可以参考楼主的文章。
 回复 引用 查看   
#9楼 2009-01-16 02:28 邱晓东      
有个这3个DLL应该如何使用啊,能不能写个winform的例子啊
 回复 引用 查看   
#10楼 2009-01-16 08:05 Astar      


 回复 引用   
#11楼 2009-01-16 08:24 三国斌[未注册用户]
内容不错,强烈支持。
 回复 引用 查看   
#12楼[楼主] 2009-01-16 08:45 xiaotie      
@邱晓东 示例代码添加在原文尾部
 回复 引用   
#13楼 2009-01-16 09:25 一定要顶[未注册用户]
这文章一定要收藏,一定要顶
 回复 引用 查看   
#14楼 2009-01-16 09:32 极地银狐.NET      
强帖子留名,以后慢慢看
 回复 引用 查看   
#15楼 2009-01-16 09:38 邱俊      
直接看到无语!虽然看不懂,佩服~
 回复 引用 查看   
#16楼 2009-01-16 09:47 __锅巴__      
正在拜读...
 回复 引用 查看   
#17楼 2009-01-16 09:49 Kingthy      
好文!!!
 回复 引用 查看   
#18楼 2009-01-16 10:30 不明飛行魚      
收藏一下
第一次看见Shape Context这个方法

 回复 引用 查看   
#19楼 2009-01-16 10:34 oocufooc      
我论文就是写这个。。。 不过是matlab
 回复 引用 查看   
#20楼 2009-01-16 10:45 mafa      
强帖子留名
 回复 引用 查看   
#21楼 2009-01-16 11:01 Macou      
楼主很强,学习了
 回复 引用   
#22楼 2009-01-16 12:13 2008s[未注册用户]
留名再学习。
 回复 引用   
#23楼 2009-01-16 14:02 h31home[未注册用户]
文章分析得不错,不知道有不有关于车牌区域搜索的文章,
在图片上查找车牌位置也是个难题,希望给指点下.
如果有相关的资料,望发邮箱学习下..
h31h31@163.com

 回复 引用 查看   
#24楼 2009-01-16 14:15 网际飞狐      
人脸识别什么做啊?楼主,谢谢!
@h31home
这个很多文章是用霍夫变换来查找的。

@网际飞狐
没研究过。sourceforge上面有人脸识别的开源项目,可以搜搜。

 回复 引用 查看   
#27楼 2009-01-16 17:38 AlexLiu      
太牛了。。。。
今天看见一个车牌。010EYE

 回复 引用 查看   
#28楼 2009-01-16 21:11 canbeing      
相当好,以前毕业设计时也有同学搞车牌识别,确实麻烦
 回复 引用   
#29楼 2009-01-17 12:58 yh2009[未注册用户]
是不是还需要库啊?
 回复 引用 查看   
#30楼 2009-01-17 13:51 邱晓东      
不行,我做了个测试的,识别不了啊,可能是我用错了吧,呵呵!
例子下载:
http://www.dache7.com/WindowsApplication1.rar

 回复 引用 查看   
#31楼 2009-01-18 15:13 IT爱好者      
写得不错,但没有示例代码不太好理解,希望博主能给发份示例代码让我们学习下,谢谢
shunyao8210@126.com

 回复 引用 查看   
#32楼[楼主] 2009-01-18 20:56 xiaotie      
@邱晓东
得几百车牌作为样本初始化下。

 回复 引用 查看   
#33楼[楼主] 2009-01-18 20:57 xiaotie      
@IT爱好者
示例代码在正文后面。呵呵,光下下来是运行不了的。

 回复 引用   
#34楼 2009-01-22 21:46 天空的理想[未注册用户]
形状上下文的特征提取好模糊,查了英文的那个pdf,也没搞明白:(
 回复 引用   
#35楼 2009-01-22 21:48 天空的理想[未注册用户]
博主能不能给解释下啊,关于形状上下文的特征提取方法,我是34楼。十分感谢!!!
@天空的理想
查作者,作者在网上放出了shapecontext的matlab程序。

 回复 引用   
#37楼 2009-02-03 21:36 风往南方吹[未注册用户]
很不错的文章,代码还没看。最近也在写这类似的东西,不过复杂的算法还没有用到。学习了。hoho 可以交流下。

好像最常用的神经网络,小波变换还有svm 都没有提啊?是不是可以补充下?

 回复 引用 查看   
#38楼[楼主] 2009-02-04 08:27 xiaotie      
@风往南方吹
没用上这些。后来没时间搞了。

 回复 引用   
#39楼 2009-02-06 16:56 ghy[未注册用户]
楼主能不能把文章中提到的所有源码给我下。谢谢了。
 回复 引用   
#40楼 2009-02-07 15:32 CH123[未注册用户]
验证码切割
for (int i = 0; i < x; i++)
13 {
14 for (int j = 0; j < y; j++)
15 {
16 if (map.GetPixel(i, j).R == CharGrayValue)
17 {
18 xNormal[i]++;
19 }
20 }
21 }
CharGrayValue 这个值是怎么来的

 回复 引用 查看   
#41楼[楼主] 2009-02-07 18:22 xiaotie      
@ghy
抱歉不能提供。主要代码可以通过反编译dll得到。

 回复 引用 查看   
#42楼[楼主] 2009-02-07 18:25 xiaotie      
@CH123
CharGrayValue 是图片中字符的灰度值,视前面的二值化策略而定,这里为0或255.

 回复 引用   
#43楼 2009-02-09 16:48 ???ok[未注册用户]
"形状上下文(Shape Context,形状背景)就是这样一种方法:假定要提取像素点O的特征,采用上图(c)中的坐标系,以O点作为坐标系的圆心。这个坐标系将O点的上下左右切割成了12×5=60小块"
是先要转换成对数极坐标后才提取feature(就是第三个图表示的,那样做仿射变换才方便)


 回复 引用   
#44楼 2009-02-09 16:50 ???ok[未注册用户]
“Shape Context是新出现的方法,其威力到底有多大目前还未见底。”呵呵,反正挺不错的。
 回复 引用   
#45楼 2009-02-09 16:57 ???ok[未注册用户]
http://www.ecice06.com/qikan/manage/wenzhang/0903-73.pdf
这里有篇简短的shape context应用论文介绍,觉得原著e文看起来累的话,可以看看这个,基本点都讲到了。

 回复 引用 查看   
#46楼 2009-02-12 13:18 w2m      
3个DLL文件在哪下?
 回复 引用   
#47楼 2009-02-19 10:58 sdf[未注册用户]
@邱晓东
你的列子中,没有训练数据

 回复 引用   
#48楼 2009-02-19 10:59 sdf[未注册用户]
@CH123
255

 回复 引用   
#49楼 2009-02-28 12:03 DevilLuo
其实我觉得车牌识别的难点在于,复杂环境的车牌定位,低分率强噪声的车牌字符分割,低分辨率车牌字符的识别。现在有很多公司做这个,对于好的图片,简单场景大家都能识别处理,但是对于上面所说的几种问题,才是体现产品科技含量的。
个人愚见。。。。

 回复 引用   
#50楼 2009-02-28 12:04 DevilLuo
欢迎交流
stluolin@yahoo.com.cn

 回复 引用   
#51楼 2009-04-05 23:41 久久1945
把这个设计发给我吧。我就是做车牌识别这个毕业设计的。急救啊。。拜托了
 回复 引用   
#52楼 2009-04-09 13:50 江畔人家
我正想学这个东西,各位,有没有人交流交流, 我的QQ是65351350
 回复 引用   
#53楼 2009-04-15 11:28 星梦奇缘[未注册用户]
楼主,可不可心把这个程序发给我啊,做毕业设计,急用呢,拜托了哦
shenjian19881228@hotmail.com

 回复 引用   
#54楼 2009-04-15 23:01 Captain2009
Dll可以在哪里找到???我们自己能够反编译吗???
 回复 引用   
#55楼 2009-05-17 13:54 7月15日
--引用--------------------------------------------------
邱晓东: 不行,我做了个测试的,识别不了啊,可能是我用错了吧,呵呵!
例子下载:
<a href="http://www.dache7.com/WindowsApplication1.rar" target="_new">http://www.dache7.com/WindowsApplication1.rar</a>
--------------------------------------------------------
你好,把例子发给我,我不知道怎么用那个三个DLL,谢谢,你给的地址下不了

 回复 引用   
#56楼 2009-06-15 18:58 chinamaga[未注册用户]
楼主,好人啊,能不能能给我发个例子啊,拜读拜读!谢谢了先,chinamaga@qq.com
 回复 引用 查看   
#57楼 2009-07-08 18:01 逍遥海盗船      
关注了。
 回复 引用   
#58楼 2009-08-08 00:21 w[未注册用户]
ba cuo
 回复 引用   
#59楼 2009-08-21 16:30 yiui[未注册用户]
你好,我想购买你的认证码识别代码,请联系qq:118978
 回复 引用 查看   
#60楼 2009-09-29 10:12 cubicimage1997      
上海名图软件有限公司车牌识别做的很到位,他们是海外归国的一群工程师自主开发的。
速度快: 200万像素的 25帧/S 标清10ms/帧
识别率高:总体识别正确率好于95%
支持多车牌、多通道,技术支持很到位,价格非常合理。
可以电话咨询:
刘健 / Andi Liu
Sales engineer
www.cubicimage.com
CubicImage Software Co.,Ltd
Tel: 86-21-6125 9082
Fax: 86-21-6121 2033 MP:15801710780
QQ1007473222 MSN:cu bicimage2@hotmail.com
E-mail to: liujian6617@yahoo.com.cn

 回复 引用   
#61楼 2009-10-11 12:39 新手请教[未注册用户]
水平投影及切割代码中:


if (xNormal[j] >= i)
29 {
30 if ((j == (x - 1)) && (pair.Status == PairStatus.Start))
31 {

上段代码中if (xNormal[j] >= i)是什么意思(意义),猜了半天也没弄明白,希望能解释下。
感谢。。

 回复 引用 查看   
#62楼 2009-10-14 15:37 小小乐      
高速公路上用这个很好的。
 回复 引用 查看   
#63楼 2009-10-21 16:06 94nut      
楼主,好人啊,能不能能给我发个例子啊,拜读拜读!谢谢了先
 回复 引用   
#64楼 2009-10-27 09:40 不错[未注册用户]
不错不错不错!
 回复 引用 查看   
#65楼 2009-11-21 19:41 divineren      
不知道能否提供测试程序??
divineren@163.com

 回复 引用   
#66楼 2009-12-14 17:07 macc[未注册用户]
拜读了。原理说明清晰,但试用发现缺少样本库,尚未知如何创建样本库。
 回复 引用   
#67楼 2009-12-15 18:44 macc[未注册用户]
试用成功,暂时只发现2、5分不清,可惜不能上图。
 回复 引用 查看   
#68楼[楼主] 2009-12-15 20:07 xiaotie      
@macc
赞 进一步的话可以在google scholar 搜集更深入的资料

 回复 引用   
#69楼 2009-12-16 17:44 macc[未注册用户]
@xiaotie
可能不会深入研究识别技术了,刚好有个应用要做,验证码又比较简单,借用了楼主的创作,感谢!

 回复 引用   
#70楼 2009-12-16 17:47 macc[未注册用户]
@xiaotie
多建几个样本可能2、5识别精确些,迟点试试。

 回复 引用 查看   
#71楼 2009-12-18 13:01 zmxmiss      
从年头回复到年尾 强贴

 回复 引用   
#72楼 2009-12-28 19:22 cuzz[未注册用户]
@macc
也发现缺少样本库,能把你做好的样本库发一个给我么,谢谢!
cuzz@foxmail.com

 回复 引用 查看   
#73楼 2009-12-31 10:02 franklin      
楼主
发现这个网站的“知识中心”引用了你的文章,但是没有给出你原始的出处和作者的名称

http://www.51yzm.com/

 回复 引用 查看   
#74楼[楼主] 2010-01-01 06:54 xiaotie      
@franklin
谢谢。随他去吧。

 回复 引用 查看   
#75楼 2010-01-05 04:45 litecy      
很不错的,学习学习
 回复 引用 查看   
#76楼 2010-01-07 11:01 franklin      
楼主,我用了你提供的图片切割api,效果不理想啊。
可惜这里不能直接上图片

 回复 引用 查看   
#77楼[楼主] 2010-01-08 23:30 xiaotie      
@franklin
文章只是导引性质的,毕竟很短时间做出来的。。

 回复 引用   
#78楼 2010-02-22 22:27 过路的[未注册用户]
不错!又长见识了。
 回复 引用 查看   
#79楼 2010-02-24 15:46 珍惜      
请问数据库Category中存放的是什么数据? 图片对应的文字???
如果是的话那为什么在载入数据库的时候只取第一个呢?
TrainPattern<Int32> tpv = CreateTainPatternVector(bmp, tp.Category.Substring(0, 1));
能否解释下,谢谢 代码调试通过了,试了下对验证码的识别率很低...识别出来的全是BBBB DDDD之类的...
那3个DLL的源代码我还没有怎么看过,关于Shape Context的那篇英文文章英语水平低不怎么看得懂

 回复 引用 查看   
#80楼 2010-02-25 12:16 i小心恋上你      
期待下文
 回复 引用 查看   
#81楼[楼主] 2010-02-25 12:23 xiaotie      
@过路的
@i小心恋上你
代码和样本都删了,没下文了。

 回复 引用 查看   
#82楼 2010-02-26 18:20 珍惜      
public static Int32 DefaultWidthSplitCount = 3;
public static Int32 DefaultHeightSplitCount = 3;
public static Int32 DefaultHeightTrimThresholdValue = 4;
请问下这3个变量是什么意思?特别是最好的那个...

 回复 引用 查看   
#83楼 2010-05-23 15:59 dege301      
大牛啊,收益匪浅
 回复 引用 查看   
#84楼[楼主] 2010-05-23 16:39 xiaotie      
@dege301
都是一些最简单的东西。需要更深入的,可以去Google Scholar去查,那些论文的作者才是真正的NB人物。

 回复 引用 查看   
#85楼 2010-06-22 15:02 终极_废人      
谢谢分享
 回复 引用 查看   
#86楼 2010-06-23 09:36 Everlonely      
请问对于文章示例中的图片(皖A DS200),当我要call BitmapConverter.Split的时候,count参数应该是多少?
 回复 引用 查看   
#87楼[楼主] 2010-06-23 09:40 xiaotie      
@Everlonely
源码已丢失,还请自己测试

 回复 引用 查看   
#88楼 2010-08-19 17:11 MNight      
不错,强帖留名。
 回复 引用 查看   
#89楼 2010-09-01 17:26 黄十三      
读了兄台的文章好几遍,但是有些地方还是不很懂,也没查到关于霍夫变换和切线距离的书籍。
兄台,能否告知小弟一些关于这类识别的相关书籍,因为小弟正在做这类项目,焦头烂额。望兄台纸条活路。
邮箱:344819350@qq.com

 回复 引用 查看   
#90楼[楼主] 2010-09-02 12:13 xiaotie      
@黄十三
维基百科上有。本文所谈的都是些最最初级的知识,更多的请参考图像处理、图像分析等数据和文章,网上遍地都是。

 回复 引用 查看   
#91楼 2010-10-28 16:06 cowboy88      
楼主的程序已经调试成功,对于普通间隔明显的字符串可以很好的分割,现在的问题是对于复杂背景特别是粘连的验证码的分割,可以用canny边缘检测进行描边,但是不知如何实现shape context中提供的算法,请楼主指点!
 回复 引用 查看   
#92楼 2010-11-02 01:14 bottomline      
谢谢楼主的好文,看了好几遍,有不明白的地方,请教一下。
1,public static Int32 DefaultWidthSplitCount = 3;
public static Int32 DefaultHeightSplitCount = 3;
public static Int32 DefaultHeightTrimThresholdValue = 4;
请问下这3个变量是什么意思?
2,我要是自己建样本库做验证码识别的话应该怎么做?Category是存放什么?为什么TrainPattern<Int32> tpv = CreateTainPatternVector(bitmap, tp.Category.Substring(0, 1));每次都取第一个?

实在有点笨,简单的验证码我都识别不出来,还望楼主指点。

 回复 引用 查看   
#93楼 2010-12-06 10:33 僵尸之王      
强贴,留名学习
 回复 引用 查看   
#94楼 2011-02-28 22:15 谭相录      
能不能把您的全部代码发给我啊,谢谢了,
tanxianglulu@126.com

 回复 引用 查看   
#95楼[楼主] 2011-03-04 17:19 xiaotie      
@谭相录
源码已遗失。

 回复 引用 查看   
#96楼 2011-04-15 15:11 lovebanyi      
sharp context 哪些验证码是谁搞出来。这个太猛了。
好几个图是人眼看不清的。

 回复 引用 查看   
#97楼 2011-08-31 08:17 阿kai      
留名学习
 回复 引用 查看   
#98楼 2011-09-23 14:47 天行健 自强不息      
留名学习,小xieV5
 回复 引用 查看   
#99楼 2011-09-24 10:01 水淼      
不错整是我要的东西
 回复 引用 查看   
#100楼 2011-11-12 10:52 hodrag      
这几个dll文件中的函数名和参数怎么得到?
 回复 引用 查看   
#101楼 2011-11-12 11:04 hodrag      
Shape Context的源码从哪里可以找到?最好是C#的
 回复 引用 查看   
#102楼[楼主] 2011-11-14 12:25 xiaotie      
@hodrag
源代码弄丢了。ShapeContext的源码google即可

 回复 引用 查看   
#103楼 2011-11-14 12:41 windposition      
 回复 引用 查看   
#104楼 2011-11-15 09:26 PhenixBlog      
受教了
 回复 引用 查看   
#105楼 2011-11-29 15:19 lrznet      
水平投影及切割代码 CharGrayValue 这个前面没看到呢
dll不懂怎么用

评论共2页: 上一页 1 2