检测图像旋转角度

6
我正在使用opencv进行一个项目,目的是从用户填写的表格中检测手写字符。我已经制作了算法来使用霍夫线变换检测扫描图像的倾斜角度。但当图像旋转180度时,它不起作用,因为0和180度被霍夫线函数视为相同。我的图像包含一些矩形来填充其中的数据和一些文本。那么如何检测是否将扫描的图像旋转了180度呢?
由于我必须先纠正图像的倾斜角度,才能准确地检测出用户填写数据(我需要提取的内容)在图像上的确切位置,所以答案中不使用字符识别的方法会比较好。请注意保留HTML标记。

是否可以发布一些图片以更好地说明问题? - Ander Biguri
5个回答

3
为了消除180°的歧义,仅有OCR可以告诉您:对倾斜文本进行两次读取,一次使用给定角度,另一次使用角度+180°,并保留最成功的读取结果。除非您有先验信息,否则其他图像处理操作不知道字符信息。
更新:
有些字符串永远是不明确的,比如0689HINOSXZ <=> ZXSONIH6890。
如果已知文本的布局(框),且是不对称的,就相对容易检查文本字符串与布局的匹配:选择一个框(例如最上面的)和一个字符串(最上面的),通过平移将它们对齐;然后看其他方框和字符串如何匹配(使用最近邻规则)并建立对应关系。将结果与直接和翻转布局进行比较,并保留重叠区域最大的结果。
为了可靠性,最好尝试多个起始框/字符串对,因为哪个是最上面的可能存在一些歧义(甚至可能缺失)。

0

你不能简单地计算两个互相关吗?一个带有180度旋转,另一个没有。具有匹配矩形的那个应该会给出更高的相关最大值(前提是剩余页面的图像对比度不会太误导人,但一些预过滤可能会有所帮助)。


0

你的问题不是更一般性吗?比如说,你检测到图像倾斜角度为+45度,然后将图像旋转-45度。但可能仍然存在这个图像被旋转了180度的情况,因为它实际上没有旋转+45度,而是旋转了-135度。

无论如何,来谈谈实际问题:虽然我不是字符识别方面的专家,但我想如果你在应用中无论如何都要使用字符识别,难道你不能尝试对两种旋转情况进行字符识别,然后选择得到更强响应的那一种吗?


这就是问题所在。在将图像逆时针旋转45度后,我想确认新图像是否已经顺时针旋转了0度或180度。在初始阶段,我不知道图像中的字符位于何处。它可以是任意随机图像。因此,无法应用字符识别技术。 - g.alisha12
哦,这种情况下我理解你的问题有误 :) 嗯,我不太明白。我以为你想要检测字符,所以你无论如何都必须找到它们,对吧? :) 因此,我的建议是只需旋转图像,使行水平排列(使用您描述的霍夫变换),并找出是否需要将其旋转180度,您可以在两个方向(0度和180度旋转)上尝试字符识别。 - Severin

0

如果您将模板中的矩形与校正后的图像中的矩形匹配,您将能够获得正确的方向(但仅当这些矩形的放置没有对称性时)。为了匹配,您可以使用模板中的矩形作为掩码从校正后的图像中提取区域。

编辑

假设您的模板和校正后的图像看起来像这样(在校正后没有位移的最佳情况下):

enter image description here enter image description here

然后,您可以使用模板作为掩码从矫正倾斜的图像中复制数据。然后检查模板中白色像素的什么比例包含在复制的图像中。对于180度旋转的图像,这个值将非常低。

但是正如您所说,由于位移,这种方法在实践中不起作用。那么,您可以尝试使用模板匹配(交叉相关)方法,其中使用模板图像作为模板。最强峰的位置和强度会给您一些有关方向的指示。您可以以降低的分辨率执行模板匹配,以便运行更快。


是的,我有模板图像中矩形的坐标,即使我从新图像中提取相同区域,如何才能找到该区域包含相同的矩形呢?问题在于它们现在被填充了,因此无法应用轮廓检测或垂直投影技术。此外,即使对图像进行了倾斜校正,新图像仍可能垂直或水平移位。因此,我认为匹配矩形不是最好的想法。 - g.alisha12

0
您可以尝试从扫描图像和空模板中匹配关键点(Harris、Sift等)。通过匹配的点,您可以轻松找到一个变换来将扫描图像与模板对齐。这可能适用于您的情况,但如果图像中有一些纹理标志,通常是表格的情况下,您更有可能成功。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接