在此之前有一个方法同样使用了活动蛇模型(segmetation of curled textline using active contours),下面简单介绍一下:
其中有一个概念是babysnakes,以往的活动蛇模型在初始化轮廓的时候都是选取一个包围目标区域的闭合曲线,但是这不适用于文本行,所用提出了在初始化时使用一小段线段来代替闭合曲线,也就是baby snakes。
该方法简单概括为以下几步:
1. 图像涂鸦:使得同一个单词里的字母连接在一起。
2. 找连通域:以单词为单位(先忽略标点)。
3. 初始化倾斜幼蛇(solpe-aligned baby snakes)模型:每一个连通域都初始化一条幼蛇(幼蛇和连通域倾斜度一样,位于连通域水平中心,长度要长于连通域——有单独公式计算)。
4. 将模型转换为父链(father-chains):从左到右横穿文本行的线。
5. 提取文本行:在原图上将文本行与父链匹配。
(期间还特别单独处理了比如标点符号这种小连通域,这里不再介绍)
图一:输入图片 图二:涂鸦结果
图三:初始化幼蛇 图四:在垂直方向上的外力GVF驱使下聚
集在一起的幼蛇
GVF(gradient vector flow梯度矢量流)
传统蛇模型就是一条曲线X(s)=[x(s),y(s)],s∈[0,1],通过空间域的移动来寻找能量函数的极小值(涉及变分原理,要满足欧拉方程等)。
前两项分别是一阶和二阶导数,参数控制曲线的弹性和刚性,保证活动轮廓的连续性和光滑性。后面的外部能量项由图像的灰度、边缘特征获得,引导活动轮廓向着目标边缘轮廓靠近。
梯度矢量流使用梯度矢量流领域V(x,y)作为静态外力场领域。
梯度矢量首先从图像导出一个轮廓边界图,通常为一个灰度级或二值图像,该边界的梯度矢量朝向边界,在所以我们知道这些矢量只有在边界邻近区域有较大的值,在均匀区域接近0,为了扩大梯度矢量场的影响范围,才提出了梯度矢量流,它对能量函数进行极小化:
这个公式的主要功能就是使得匀质区也有缓慢变换的场(把梯度矢量扩展到了匀质区)。
上图就是离散点和其梯度矢量流分布图。
用双蛇模型来处理弯曲文本的分割问题
(coupled snakelet model for curled texrline segmentation ofcamera-captured document images)
一些基本定义:
双蛇指的就是文本行顶部和底部的两条线x-line和baseline。
相比于之前的方法,双蛇模型同时跟踪一对蛇的轨迹,采用邻近区域上下部分的点作为驱使外力。整体过程如下:
1. 预处理阶段:提取连通域,并用矩形框起来,文本和矩形上下边界相接触的所有点(all top points and bottom points)需要计算出来,但是我们需要分成两部分保存,一幅图只包含顶点信息,一幅图只包含底部点的信息。(边缘噪声可以使用page frame detection来移除)
2. 新的幼蛇模型(snakelet model):可以看成是baby-snakes model的延长。
1) 外力计算:这里我们使用邻近区域的离散点来进行GVF计算,但是仅使用GVF的垂直分量来使蛇模型发生形变(因为水平方向的外力会使得线行的蛇模型趋向于一个点)。
2) 更新蛇:传统的蛇模型在更新他们的点的位置和数量时使用相同的外力,不变的外力区域会使得图形内大规模噪声或者不集中的对象造成糟糕的分割效果。所以这里提出了增长的外力区域。即在下一次形变发生之前我们增加蛇的长度和GVF的计算区域。
3) 权重配对(参考):因为我们使用了一对蛇模型,在配对的时候我们给底部蛇模型更高的权重因为文本与底部边界交点更多(我们使用顶点邻域附近离散点的GVF的50%来使顶部蛇形变,使用底部点邻域附近离散点的GVF的100%来使底部蛇形变。形变之后上下蛇之间的距离会被计算出来,通过调整上下每一对点的位置来使得两点之间的距离等于平均距离)。
在预处理之后,设L等于所有连通域的平均长度,H等于平均高度。选取一个连通域为初始位置,在其顶部和底部点的位置初始化一对长度为L的蛇模型,并以此连通域为中心选取2L x H大小的区域作为邻近区域(由于顶部和底部点是分开存储的,所以这里邻近区域也是给顶部点和底部点分别赋予的),计算区域内的GVF,通过上述的权重配对来使得蛇模型形变。对于同一个连通域整个过程会重3-4次,每次都会在原基础上使蛇模型长度增长L,邻近区域增长2L x H。对于所有连通域都使用同样的方法执行一遍。所有模型重叠的部分会作为最后弯曲文本行的识别结果。