【问题标题】:2D map translation computation2D地图平移计算
【发布时间】:2014-06-23 23:34:56
【问题描述】:

我想找到一种算法,给定两张 2D 图像,其中一张图像是另一张图像的“偏移”,以计算最佳偏移。移位是没有旋转的简单平移。

动机是我有一系列图像,它们是大地图的一部分,我想将它们组合起来。想象一下,去谷歌地图,截图,稍微移动一下地图,然后再拍一张,等等。

现在我有一个简单的算法。我拍摄了第二张图片,并尝试在两个维度上从 -9 到 +9 的所有小变化。然后我使用一些模板匹配算法,如 OpenCV 的 matchTemplate(),并选择最好的一个。这样效率低,不支持大平移,也不支持亚像素平移。

我在 OpenCV 中找不到任何东西可以做到这一点 - 我希望至少会有上述简单算法的一些并行版本,但我找不到。任何指针将不胜感激。

【问题讨论】:

标签: algorithm opencv image-processing computer-vision


【解决方案1】:

便宜又简单的想法:
比将整个第二张图像 -9 移动到 +9 更便宜的方法可能是在第二张图像中取一行并在第一张图像中找到最佳匹配行。对单个列执行相同操作。您可以使用简单的方法计算行/列相似度,例如使用行/列向量的绝对差。这可能会让您在图像之间轻松转换。

一些更高级的替代方案:
您可以使用SIFTSURF 图像特征来估计图像之间的某种类型的变换(例如仿射变换)。看到这个:Estimating an Affine Transform between Two Images

更多资源:
http://docs.opencv.org/doc/tutorials/imgproc/imgtrans/warp_affine/warp_affine.html

另一个想法是使用optical flow 在图像之间找到基于像素的映射。

更多资源:
http://docs.opencv.org/trunk/doc/py_tutorials/py_video/py_lucas_kanade/py_lucas_kanade.html

这两种方法可能有点矫枉过正,因为您似乎正在处理静态图像的转换。不过,SIFT/SURF 功能可能使学习转换变得容易。

【讨论】:

  • 谢谢。这个想法似乎是,比较整个图像效率低下,所以比较小的代表性部分。我认为这可能会起作用。今晚我会尝试推出我自己的特征检测(比单行/列好,但可能不是 SIFT/SURF)——应该很容易找到小的彩色补丁。如果这不起作用,我会尝试您提供的链接中的 SURF 方法,该方法应该有效。
猜你喜欢
  • 2014-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-18
相关资源
最近更新 更多