笔划宽度变换(SWT)实现(Python)
computer-vision
ocr
opencv
python
5
0

谁能描述我如何使用opencv或simplecv在python中实现SWT?

参考资料:
Stack Overflow
收藏
评论
共 2 个回答
高赞 时间 活跃

我实现了类似于“ Huizhong Chen,Sam S. Tsai,Georg Schroth,David M. Chen,Radek Grzeszczuk,Bernd Girod的 “具有边缘增强的最大稳定极端区域自然图像中的鲁棒文本检测 ”中所述的基于距离变换的SWT。 。

它与本文中描述的不一样,但是粗略的近似可以满足我的目的。以为我应该分享它,以便有人发现它有用(并指出任何错误/改进)。它用C ++实现,并使用OpenCV。

    // bw8u : we want to calculate the SWT of this. NOTE: Its background pixels are 0 and forground pixels are 1 (not 255!)
    Mat bw32f, swt32f, kernel;
    double min, max;
    int strokeRadius;

    bw8u.convertTo(bw32f, CV_32F);  // format conversion for multiplication
    distanceTransform(bw8u, swt32f, CV_DIST_L2, 5); // distance transform
    minMaxLoc(swt32f, NULL, &max);  // find max
    strokeRadius = (int)ceil(max);  // half the max stroke width
    kernel = getStructuringElement(MORPH_RECT, Size(3, 3)); // 3x3 kernel used to select 8-connected neighbors

    for (int j = 0; j < strokeRadius; j++)
    {
        dilate(swt32f, swt32f, kernel); // assign the max in 3x3 neighborhood to each center pixel
        swt32f = swt32f.mul(bw32f); // apply mask to restore original shape and to avoid unnecessary max propogation
    }
    // swt32f : resulting SWT image
收藏
评论

好的,这里是这样:

该链接包含有关实现的详细信息,底部的代码下载链接: SWT

为了完整起见,还提到SWT或“笔划宽度变换”是Epshtein等人在2010年设计的,迄今为止已成为最成功的文本检测方法之一。它不使用机器学习或详尽的测试。基本上在对输入图像进行Canny边缘检测后,它会计算组成图像中对象的每个笔触的粗细。由于文本的笔触均匀一致,因此这可能是一个可靠的识别功能。

链接中给出的实现是使用C ++,OpenCV和Boost库,它们在计算SWT步骤之后用于连接的图形遍历等。就个人而言,我已经在Ubuntu上对其进行了测试,尽管它的准确性不高,但它可以很好地(有效地)运行。

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号