文本倾斜检测算法
输入:一张文字倾斜的图片;
输出:文章倾斜角度。
算法流程:
- 连通域分析:采用种子填充法的连通域分析,并对每个连通域赋以直立的边界框;
- 过滤blobs:
①上来先移除那些在高度上比固定像素数量少的blobs;
②剩余的blobs之后通过size来过滤:高度在20%~95%分位的blobs会被保留,并保存他们的宽度;
- 对blobs进行排序:把每个blob的左边缘的x坐标进行升序排列,并作为sort key;
- 初始行创建:
*******************************************************************************
设置变化的均值漂移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位置增长过大。
- 基线拟合
在以上过程,文章中的大部分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