【问题标题】:How can I find the rotation of a document?如何找到文档的轮换?
【发布时间】:2017-02-17 09:06:35
【问题描述】:

以如下扫描图像为例:

通过查看边框,您可以清楚地看到它略微向左旋转。如何检测这种旋转量? (为了修复它)

边缘检测会“突出显示”边界,但除了尝试多次旋转和构建 x-/y- 直方图外,我不知道如何使用这些信息。对于这样一个简单的问题,迭代方法似乎计算量更大。

我正在寻找伪代码/算法思想。因此,我没有用编程语言标记这个问题。不过,如果你喜欢给代码,我更喜欢 Python。

【问题讨论】:

    标签: computer-vision ocr


    【解决方案1】:

    下面的做法呢(假设旋转量很小,文档中确实有足够的水平/垂直线特征):

    1. 通过Hough transform提取文档中的所有(参数)行,
    2. 将线分类为接近水平线或垂直线(并简单地丢弃无法分类到一定容差的线),
    3. 稳健地拟合旋转以最大限度地减少线条与其预期方向的偏差(RANSAC 变体,带有旋转求解器)。

    对于 3.,可以在没有任何 RANSAC 的情况下开始(只适合所有水平/垂直线的最佳旋转),并且只有在需要注意明显错误时才添加它。

    关于拟合线的旋转,每条线都可以用一个单位 2D 向量 n 和一个标量 d s.t. 参数化。一个 2D 点 M 属于线 iff n . M + d = 0。矢量n 给出了线的方向,根据分类,预计接近参考矢量n_0e_x-e_xe_y-e_y,具体取决于实际分类) .所以可能的目标函数是F(theta) = argmax_theta 1/2 sum_i | ( R(theta) n^i ) . n_0^i |^2,其中theta 是要应用的2D 旋转的角度,R(theta) 是对应的2 x 2 旋转矩阵。这个目标函数找到使旋转的线向量和预期的线向量之间的对齐最大化的旋转。如果正方形从目标函数中删除,那么目标函数实际上可以归结为简化的Kabsch algorithm/2D 中的绝对方向,无需平移/缩放,可以使用 SVD 解决。

    【讨论】:

      【解决方案2】:

      deskew package 非常适用于普通文本文档。它不适用于图像,也不适用于给定的示例。

      【讨论】:

        猜你喜欢
        • 2014-02-04
        • 2016-12-29
        • 1970-01-01
        • 1970-01-01
        • 2019-03-20
        • 1970-01-01
        • 2018-09-09
        • 1970-01-01
        • 2021-04-04
        相关资源
        最近更新 更多