我想找到一种给出两个2D图像的算法,其中一个图像是另一个图像的“移位”,以计算最佳移位。移位是一种简单的平移,没有旋转。
动机是我有一系列图像是大地图的一部分,我想要将它们结合起来。想象一下,去谷歌地图,截取屏幕截图,稍微移动地图,然后取另一个,依此类推。
现在我有一个简单的算法。我拍摄第二张图片,并尝试在两个维度中从-9到+9的所有小变换。然后我使用一些模板匹配算法,如OpenCV的matchTemplate(),并选择最好的一个。这是低效的,不支持大型翻译,也不支持子像素翻译。
我在OpenCV中找不到任何东西来执行此操作 - 我希望至少会有一些上述简单算法的并行化版本,但我找不到它。任何指针都将非常感激。
答案 0 :(得分:1)
便宜又简单的想法:
比将整个第二图像-9移动到+9更便宜的方法可能是在第二图像中取一行并在第一图像中找到最佳匹配行。对单个列执行相同操作。您可以使用简单的方法计算行/列相似度,例如使用行/列向量的绝对差值。这可以让您在图像之间轻松转换。
一些更高级的替代方案:
您可能能够使用SIFT或SURF图像特征估计图像之间的某种类型的变换(例如,仿射变换)。请参阅: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功能可以让您轻松了解转换。