代码之家  ›  专栏  ›  技术社区  ›  Artur

如何在OpenCV中分组字母,知道它们的旋转方向?

  •  0
  • Artur  · 技术社区  · 6 年前

    我有一个带字母的图像,例如: ala

    这是从以前的图像处理阶段获得的二值图像,我知道 boundingRect RotatedRect 但这些字母还没有按单词分组。值得一提的是,RotatedRect可以从minarealect()或fitEllipse()返回,如下所示 here here . 在我的例子中,RotatedRects如下所示:

    enter image description here

    蓝色矩形从Minareact获得,红色矩形从fitEllipse获得。它们给出的框略有不同(中心、宽度、高度、角度),但最大的差异在于角度的值。在第一个选项中,角度从-90度更改为0度,在第二个选项中,角度从0度更改为180度。我的问题是:如何根据RotatedRects的参数在单词中对这些字母进行分组?我可以检查每个旋转体的角度,也可以测量每两个旋转体中心之间的距离。通过对文本方向和字母之间距离的简单假设,我的分组算法可以工作。但在更复杂的情况下,我遇到了一个问题。例如,在下面的图像中,文字组很少,字母之间有不同的方向、角度和距离。 enter image description here 问题是当一个单词的字母与另一个单词的字母接近时,以及当给定单词内部的旋转角度与相邻单词的角度相差较大时。用正确的单词连接字母的最佳方式是什么?

    2 回复  |  直到 6 年前
        1
  •  1
  •   Andrey Smorodov    6 年前

    首先,您需要定义度量。例如,它可以是欧几里德3D距离,定义为| | delta\u X、delta\u y、delta\u角| |,其中delta\u X和delta\u y是矩形中心沿X和y坐标之间的距离,delta\u角是角度方向之间的距离。 简言之,矩形将转换为具有坐标(x、y、角度)的三维数据点。

    定义后。您可以对数据使用聚类算法。看来DBSCAN在这里应该工作得很好。查看本文,例如: link 这可能有助于选择聚类算法。

        2
  •  0
  •   Artur    5 年前

    我通过与字母和单词的几何特性(距离、角度、面积、相邻字母面积的比率等)相关的其他几个元素扩展了上述度量,现在它运行良好。谢谢你的建议。