2

我撕毁了一张纸,其碎片如下:

一张撕破的纸

我想让这些纸片碎片恢复。

我使用opencv做了一些事情:

  1. 将这些碎片拍照并保存到计算机磁盘中
  2. 读取每个片段并获取它们的轮廓线
  3. 计算片段的每个轮廓线的相似度
  4. ???

如果我想将这些碎片恢复为一张像纸一样不会撕裂的完整“纸”,我该怎么办?

任何建议或方法将不胜感激,非常感谢!

4

1 回答 1

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

于 2013-09-13T12:16:29.363 回答