如何在OpenCV中将字母分组,知道他们的RotatedRects?

问题描述 投票:0回答:2

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

这是从以前的图像处理阶段获得的二进制图像,我知道每个字母的boundingRectRotatedRect,但这些字母还没有用文字分组。值得一提的是,RotatedRect可以从minAreaRect()或fitEllipse()返回,显示的是herehere。在我的例子中,RotatedRects看起来像这样:

enter image description here

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

opencv image-processing image-rotation
2个回答
1
投票

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

定义之后。您可以对数据使用clusetering算法。看起来DBSCAN应该在这里运作良好。查看本文例如:link它可能有助于选择聚类算法。


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.