文本倾斜检测算法

 

输入:一张文字倾斜的图片;

输出:文章倾斜角度。

 

 

 

 

 

 

算法流程:

  1. 连通域分析:采用种子填充法的连通域分析,并对每个连通域赋以直立的边界框;
  2. 过滤blobs

①上来先移除那些在高度上比固定像素数量少的blobs;

剩余的blobs之后通过size来过滤高度在20%~95%分位blobs会被保留,并保存他们的宽度

  1. blobs进行排序:把每个blob的左边缘的x坐标进行升序排列,并作为sort key
  2. 初始行创建:

*******************************************************************************

设置变化的均值漂移y=0;

对于排序blobs中的每个blob:

  找到与blob垂直重叠的最多的现有行;

  如果没有现存的重叠行:

  则:

    ·创建一个新行,并把blob放进此行中;

    ·记录当前blob的顶部和底部坐标作为当前行的顶部和底部;

  否则:

    ·把此blob加入最大竖直重叠的row;

    ·把行的顶部和底部的坐标值作为当前blob的顶部和底部坐标值截断行高使行高变成一个有限值;

    ·通过当前blob的底部坐标来更新均值漂移y 

    

*******************************************************************************

讨论点:

 

 

 

 

 

 

 

(红圈折线表示均值漂移y的变化)

·根据行号,α在0.5~0.7的范围内取值发生变化;

 

(以下蓝体部分尚未理解)

·均值漂移y,可以保证追踪大倾斜角,(同时对下降免疫???没理解)是可能的

·当在可用的blobs中有一个非常大的水平gap, y漂移根据gap大小进行外推操作(?);

·随着行的累积,行的上下极限被扩展来逆向拟合新blob的漂移均值y的极限。这有助于每行收集属于自己的blobs;因为在一行中的第一个blob的漂移y是最小的,所有不用再多余初始化额外行;

 

·每行的size是有限制的,是过滤过程(20%-95%)的上4分之一分位;

这可以阻止由于在一篇倾斜文章中blobs的在不同行导致的y位置的扩增;并且阻止由于吸收了不同行上的blobs导致的y位置增长过大。

 

  1. 基线拟合

在以上过程,文章中的大部分blobs都被放入某行中。目前已经可以获得足够准确的行基线拟合。通过文献[8]中的a least median of square fit最小中位数平方拟合)方法来实现baseline拟合。 The least median of squares fit 在此应用中是非常理想的,因为基线接近于直线;并且异常点(降序,标点符号,其他特殊字符等)会导致a least mean square fit错误明显。

 

*关于[8]的文献,尚未搜到,但是猜测其实最小二乘法的一个变种,以下博客可以作为参考:

https://blog.csdn.net/Tonywu2018/article/details/83962391

 

 

 

 

 

 

 

 

 

 

posted @ 2019-02-21 18:47  刘天睿  阅读(423)  评论(0)    收藏  举报