使撕碎的纸张恢复

时间:2013-09-13 08:42:17

标签: opencv graphics

我撕下一张纸,它的碎片像:

a torn paper

我想让这些片段的片段恢复。

我使用opencv做了一些事情:

  1. 拍摄这些碎片并将其保存到计算机磁盘
  2. 阅读每个片段并获取其轮廓线
  3. 计算片段的每个轮廓线的相似性
  4. ???
  5. 如果我想将这些片段恢复成一整页“纸张”,如纸张不撕裂,我该怎么办?

    非常感谢任何建议或方法,非常感谢!

1 个答案:

答案 0 :(得分:1)

虽然这就像搜索问题;由于来自无数点和方向的无数个状态,不可能实现像深度优先搜索这样的东西。您需要一个合适的视觉算法来减少这些状态。

你是如何比较“等高线”的?这些线在哪里?你的轮廓可能是圆形的,并且可能有很多“线条”。你应该寻找 “如何创建这个轮廓,加入其他轮廓的某些部分”

“这个周边是否与另一个周边相似?周边的哪一部分具有最高的相似度?”

这两个问题都产生了我想到的一个解决方案,以人的方式解决:选择一个轮廓。从某个角度连接另一个。旋转它直到它击中。如果之间有黑色空格,请更改连接点。尝试所有要点。如果发现连接点屈服于“无黑色空间”,请将这些轮廓连接到一个轮廓并继续操作。如果没有点,请尝试另一个轮廓。

编辑:虽然这种方法除了搜索之外什么也没做;它减少了具有黑色空间(轮廓发现)和命中(坐标比较)的状态数量

增强:使用轮廓查找方法和“简单近似”(CV_APPROX_SIMPLE)推导出纸张的直线。然后,您可以通过将这些点标记为纸张边来减少要尝试的点数。

EDIT2:您可能想要查看角点检测和拼接方法:

http://tobw.net/index.php?cat_id=2&project=Panorama%20Stitching%20Demo%20in%20Matlab

http://docs.opencv.org/modules/stitching/doc/introduction.html