算法名称:Stroke Width Transform(SWT)笔画宽度变换
算法出处:《Detecting Text in Natural Scenes with Stroke Width Transform》
http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=5540041&tag=1
算法用途:自然场景文本检测
算法思想:
算法步骤:
The Stroke Width Transform
输入:待检测图像的灰度图
输出:与输入图像同样大小的笔画宽度图像,每个像素位置记录其笔画宽度
the first pass
1. Canny算子提取灰度图边缘;
2. 计算每个边缘像素点的梯度方向;
3. 分别以每个边缘像素点p作为起点发出射线,射线方向为该像素点的梯度方向dp,射线的最大寻找宽度预先指定 。r=p+n?dp, maxSearchWidth>n>0;
4. 如果p发出的射线寻找到另一个边界像素点q,且q的梯度方向与p大致相反(dq = -dp±π/6)。那么p与q之间的距离即为射线路径上所有点的笔画宽度。如果射线没有找到满足的条件q(最大寻找宽度内,梯度方向大致相反)那么废弃掉该射线;
5. 如果一个点被多条路径经过,那么其笔画宽度取这些笔画宽度的最小值。如图(a),水平和垂直方向上均检测到该点,取最小值。
(第一趟检测存在的问题是,对于图像拐点处,可能取值不符合实际。如图(b),拐点在水平和垂直方向上的笔画宽度取值都比较大,显然不是想要的结果。)
the second pass
1. 对于第一趟未废弃的射线,计算该路径上所有像素点笔画宽度的中值,对于路径上大于该值的像素点全部赋予中值。
算法实现: