FASText(下):FASText

0导语

上一篇我们已经大致介绍了FAST角点,原始的FAST能处理一些带角点的的字母如L,P,但是很难处理o,和8等情况。以o为例,见下图,像素值会被截成四个部分,这样的话就很难满足原始的Fast角点需要连续多个点都要亮或暗的要求。另外由于Fast角点不是专门为定位文本设计,因此也会有很多的false postives.基于这些观察,FASText作者在Fast角点的基础上定制了两种角点SEK(stroke endingkeypoint)和 SBK(stroke blending keypoint).

不过调试作者的代码之后,如果本人没有理解错,应该是有很严重的bug,相关问题已反应给作者,本文将会跟进,另外也有tricky的东西,本文也会尽量提到。

 

1 Stroke Ending  KeyPoint(SEK)

SEK主要是想得到笔画的起点,终点等特征点,如下图

 

跟普通的Fast角点非常类似,只不过是它的条件稍微加强了,圆周上k个点,除了需要满足连续n个点都要大于或小于中心点一定阈值t外,其余的k-n个点需要满足跟中心点类似这个条件,代码里默认的是k = 12, n = 9, t=13。由于个人调试的问题,以下的t全部设为了12。

如下图,可以找到连续10个点(黄色)都要小于中心点一定阈值,而剩下的两个点跟中心点的差距在阈值范围内.它期望strokePs(红色点)进入,中心点(绿色点)附近结束,或者是从中心点开始,从Ps的点出去

 

2 Stroke BlendingKeypoint(SBK)

主要是为了能检测到有一定曲率或拐角这样的stroke点。这些情况下,圆周的像素值会分成4块,如下图:

论文中对SBK的要求是圆周上有且只有四个连续点的集合,Ps(Point similar),Ps',Pd(point darker), Pd' 或者是 PsPs',Pb(point brighter), Pb', 并且PsPs'的点数在[1,3]之间,Pd的点数大于6(或者Pb的点数大于6),Pd'(Pb')的点数要大于0。如下图,假设阈值为12,那么上部连续7个黄点值小于中心点一定阈值以上,所以是Pd,下面是Pd',左右两边的红色点是PsPs'(或者是Ps'Ps,这个没有关系)。它期望strokePsPs')进入,在中心点附近拐弯,然后从Ps'Ps)出去

 

3 其他检查

我们先从论文中提到的检查说起,然后再说代码里trick的东西

3.1内部点的检查

第一个检查是内部点的检查。它的出发点是不管是SEK还是SBK,圆周上Ps,Ps'和中心点应该是stroke经过的点,而为了连续性,串联Ps,Ps'和中心点的像素应该也应该是stroke经过的点,那么它们的像素值跟中心点应该也符合相似的条件。

如上面的SEK的图中会检查下面紫色的两个点。

下图中的SBK会检查如下的几个点

 

3.2外围16个点检查

代码还做了一步论文中没有提到的事情,就是去检查外围的16点。如果外围的16个点符合SEK的Pb(或pd)和SBK的Pb或(Pd)的条件,那么说明这个stroke被困死在了这16个里面,没有延伸出去,基本不符合一个文本笔画的规律,除了一个字只包含内部的这么多个Ps和Ps'点,基本不太现实,因此把这种点过滤掉

                                             通过外围点检查的情况

                                    没通过外围检查的情况

 

3.3 corner和corner out点检查

代码中这种检查只针对SEK。如下图,青色的为corner点,蓝色的corner out点。这里再次提下SEK的初衷,SEK是想捕获从Ps进入,中心点附近结束,或者是从中心点开始,从Ps的点出去的文本笔画,因此代码中对Ps的点“反方向”的cornercorner out的点进行检查,下图中就是右上和右下的蓝青色点,希望他们也符合黄色点的条件。(个人觉得的其实也可以针对SBK做,不过情况可能要多些)

3.4 NMS

NMS部分跟作者已经确认,论文中是写错的,max应该换成min它跟Fast中的策略是一样的,找Pb(Pd)与中心点相差最小的作为这个角点的分数,并进行3*3的抑制,不再赘述。

 

4 Scale问题

原始的Fast的角点是不具有scale不变形的。如果我们的stroke比较粗,那么现在的FASText是检测不出来的,因此需要在很多尺度上处理。论文中是按照一定比例比如1.6下采样,直到缩放图像的最长边不大于30,比如原图像的大小是640*480,,那么包括原图像将有8个scale.另外也可以指定在一个sclae上是否erode,如果用erode,将会有与当前图像同样大小,但是经过erode和dilate处理过的两幅图像(代码默认没做)

 

5 Grid问题

论文中说的是要把原图切分成一块一块做的,个人不是特别理解,可能是为了并行化处理然后提高速度。另外代码中如果尺度很小,如当前尺度的图片长宽都小于128的时,不会切分。

6代码Bug

如果本人理解没错,论文还是有一些bug的,但是其中最大的当属得到的SEK和SBK的圆周点有可能包含Ps,Pd,Pb三种类型。从论文的理念看,个人觉得这个bug是改变本质的,非常严重,不过暂时作者还没有回复,不太确定。如果个人理解没有错,可以简单插入下面几行代码到FASTex.cpp 408行来解决这个bug

 

int tmpD = 0;
for (int i = 0; i < 12; ++i)
{
  tmpD |= tab[ptr[pixel[i]]];
}
if (3 == tmpD)
{
  continue;
}

//作者后面的代码
int d = tab[ptr[pixel[0]]] | tab[ptr[pixel[6]]];
if( d == 0 )
   continue;

 

 

 

8 其他部分

由于抽取segment,提取特征和classify等模块没有非常特别的,不再赘述。

 

9参考文献

参考文献

[1]Buta M. FASText:Efficient unconstrained scene text detector[C]//2015 IEEE InternationalConference on Computer Vision (ICCV). IEEE, 2015: 1206-1214.

 

[2]Rosten E,Drummond T. Machine learning for high-speed corner detection[C]//Europeanconference on computer vision. Springer Berlin Heidelberg, 2006: 430-443.

  

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 16
    评论
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值