如何在知道 RotatedRects 的 OpenCV 中对字母进行分组?

How to group letters in OpenCV knowing their RotatedRects?

我有一张带有字母的图片,例如:

这是从前面的图像处理阶段得到的二值图像,我知道boundingRect and RotatedRect of every letter, but these letters are not grouped in words yet. It is worth mentioning, that RotatedRect can be returned from minAreaRect() or fitEllipse(), what is shown here and here。在我的例子中,RotatedRects 看起来像这样:

蓝色矩形取自minAreaRect,红色矩形取自fitEllipse。他们给出了一些不同的框(中心、宽度、高度、角度),但最大的区别在于角度值。在第一个选项中,角度从 -90 变为 0 度,在第二种情况下,角度从 0 变为 180 度。我的问题是:如何根据 RotatedRects 的参数对这些字母进行分组?我可以检查每个 RotatedRect 的角度,还可以测量每两个 RotatedRect 的中心之间的距离。通过对文本方向和字母之间距离的简单假设,我的分组算法起作用了。但在更复杂的情况下,我遇到了一个问题。例如,下图中有几组文字,方向不同,字母之间的角度和距离也不同。 问题是当一个单词的字母与另一个单词的字母接近时,以及当给定单词内的 RotatedRect 角度与其相邻单词的角度差异更大时。用正确的单词连接字母的最佳方法是什么?

首先,您需要定义指标。例如,它可能是欧几里德 3D 距离,定义为 ||delta_X、delta_y、Delta_angle|| ,其中 delta_X 和 delta_Y 是矩形中心沿 x 和 y 坐标的距离,Delta_angle 是 angular 方向之间的距离。 简而言之,您的矩形转换为坐标为 (x,y,angle) 的 3D 数据点。

在你定义这个之后。您可以对数据使用聚类算法。似乎 DBSCAN 应该在这里工作得很好。例如查看这篇文章:link 它可能有助于选择聚类算法。

我通过一些与字母和单词的几何属性(距离、角度、面积、相邻字母面积的比率等)相关的其他元素扩展了上述指标,现在它工作正常。谢谢建议。