如何以编程方式找到多边形的方向?

时间:2016-04-02 16:59:06

标签: algorithm math image-processing 3d polygon

我有以下轮廓(最大的深蓝色多边形):

enter image description here

此照片由智能手机拍摄并由OpenCV处理。最后我想识别这张卡底部的数字(请忽略条形码)。

我的下一步是将此图片偏移3x3 transformation matrix而不是3x3 transformation matrix。预期结果的示例:

warp the perspective

请注意,该示例缺少实际的图像数据。

问题:如何获取{{1}}?

我过去尝试过的事情:

  1. 用轮廓替换轮廓的多个相似线段。
  2. 找到最大的4个部分
  3. 假设这4个段形成矩形
  4. 在矩形的透视图上扭曲图像
  5. 我的意思相似:线段具有几乎相同的角度。

    然而,这并没有给我准确的结果。我所希望的是一种近乎完美的算法,我可以用它进行文本识别。

    我更喜欢包含某种过程语言或伪代码的答案。

2 个答案:

答案 0 :(得分:1)

评论中的解决方案:计算单应矩阵。

  1. 从包含文本
  2. 的多边形开始
  3. 您提取轮廓
  4. Hough变换找到四面
  5. 行交叉点以查找多边形
  6. 此多边形与您需要的多边形之间的同形矩阵。

答案 1 :(得分:0)

忘记一个矩形,然后优化你知道的模式 - 选择一个起始边缘(任何边缘),走向图像的中心,直到你碰到一条蓝线,然后走线找到两端的蓝线,x1,y1和x2,y2。你如何做到这完全取决于语言和表示,所以我提供的任何伪代码都可能是浪费时间。

使用这两点,计算旋转角度 - 你如何做到这将取决于你选择的边缘,但是,例如,对于顶线,你可以使用

angle = tangent( (y2 - y1) / (x2 - x1) )

使用直线形成三角形,水平线由上y坐标和由最右x坐标形成的垂直线组成。

这将为您提供所需的角度,因此在这种情况下您需要按-angle旋转(您可以在一次操作中计算正确的角度,但如果您计算的话,它更容易可视化图像现在的角度。

由于您指定图像适合矩形,因此您根本不需要矩形的所有其他边,只需要一个。如果图像总是略微垂直(并且只是偏离正常的垂直轴),您可以选择边缘并始终使用它来查找边缘线。

如果图像可能旋转90度或更多,你可以选择两个相邻的边缘(例如顶部和左边),找到每条边上的蓝线的末端(它们应该大部分相交),并选择较长的这两个用于计算,因为较长的线将减少计算角度时的舍入误差。