Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opencv 如何匹配两条撕裂的边?_Opencv_Contour - Fatal编程技术网

Opencv 如何匹配两条撕裂的边?

Opencv 如何匹配两条撕裂的边?,opencv,contour,Opencv,Contour,我正试图重建一张撕破的纸。第一步是检测撕裂边缘: 接下来,旋转一条撕裂边并与另一条撕裂边进行比较: 当两个轮廓相互匹配时,文档将对齐。旋转一块,比较撕裂的边缘。名为match的分数描述了两个轮廓之间的匹配: tempA = draw_contour(tempA, b, 123, 3) tempB = draw_contour(tempB, a, 123, 3) tempC = tempA + tempB _, thresh = cv2.threshold(tempC, 220, 255, c

我正试图重建一张撕破的纸。第一步是检测撕裂边缘:

接下来,旋转一条撕裂边并与另一条撕裂边进行比较:

当两个轮廓相互匹配时,文档将对齐。旋转一块,比较撕裂的边缘。名为
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))
这两个轮廓不太吻合: 这些轮廓非常吻合。在这里,文档是对齐的:

轮廓匹配的计算是基础。我在不同的图像上绘制轮廓。对图像求和并应用阈值。这计算两个轮廓重叠的像素数。这种方法效果很好,但在比较多条边时速度太慢,不实用


我如何计算撕裂边缘的两个轮廓的匹配程度?假设没有并发症(见我上面的评论),您可以尝试下面概述的步骤。请参见下图

  • 计算连接边1端点的直线方程
  • 计算连接边2端点的直线方程
  • 计算这两条直线之间的角度
  • 这为角度提供了两种可能性:
    alpha
    180 alpha
  • 找到两条直线段的中点并对齐(图中未显示。可能您已经在做一些事情来对齐曲线)
  • 然后,尝试这两个角度,看看哪一个根据你的匹配成本提供最佳匹配

两块撕裂的碎片是否在同一张图像中?如果不是,一条撕裂的边缘通常是另一条的透视变换。如果它们是两个不同的图像,您是否保证变换是等距的?