如何匹配两个撕裂的边缘?

时间:2019-05-08 00:03:50

标签: opencv contour

Link to Gist of code.我正在尝试重建一张撕碎的纸。第一步是检测撕裂的边缘:

finding the torn edge

接下来,旋转一个撕裂的边缘并将其与另一撕裂的边缘进行比较:

rotating and matching

当两个轮廓相互匹配时,文档将对齐。旋转一件,比较撕边。称为match的分数描述了两个轮廓之间的匹配:

tempA = draw_contour(tempA, b, 123, 3)
tempB = draw_contour(tempB, a, 123, 3)
tempC = tempA + tempB
_, thresh = cv2.threshold(tempC, 220, 255, cv2.THRESH_BINARY_INV);
thresh = 255 - thresh
match = sum(sum(thresh))

这两个轮廓不太吻合: poor fitting 这些轮廓非常吻合。文档在此处对齐: good fitting

轮廓匹配的计算是基本的。我在单独的图像上绘制轮廓。对图像求和并应用阈值。这将计算两个轮廓重叠处的像素数。这种方法效果很好,但是比较多个边缘时太慢,无法实用。

如何计算撕裂边缘的两个轮廓的匹配程度?

1 个答案:

答案 0 :(得分:0)

假设没有并发症(请参阅上面的评论),则可以尝试以下概述的过程。参见下图。

edges

  • 计算连接edge1端点的直线方程式
  • 计算连接edge2端点的直线方程式
  • 计算这两条直线之间的角度
  • 这为角度提供了两种可能性:alpha180-alpha
  • 找到两个直线段的中点并对齐它们(图中未显示。可能您已经在做一些对齐曲线的操作了)
  • 然后,尝试两个角度,然后根据您的匹配费用查看哪个角度最匹配