我已经找到了很多关于使用OpenCV进行图像拼接和变形的问题和答案,但我仍然找不到我的问题的答案。
我有两个鱼眼摄像头,我成功校准,因此两个图像中的失真都被消除了。
现在我想将那些经过纠正的图像拼接在一起。所以我几乎都遵循这个例子,这也是很多其他拼接问题中提到的: Image Stitching Example
所以我做了Keypoint和Descriptor检测。我找到了匹配并获得了Homography矩阵,因此我可以扭曲其中一个图像,这样可以得到一个非常拉伸的图像。另一张图片保持不变。拉伸是我想要避免的。所以我找到了一个很好的解决方案: Stretch solution
在幻灯片7上,您可以看到两个图像都发生扭曲。我认为这会减少一幅图像的拉伸(在我看来,拉伸将分开,例如50:50)。如果我错了,请告诉我。
我遇到的问题是我不知道如何扭曲两张图像以使它们适合。我必须计算两个同性恋吗?我是否必须像Rect()或其他东西一样定义参考平面?如何实现如幻灯片7所示的变形结果?
为了说清楚,我不是在德累斯顿工业大学学习,所以这只是我在研究时发现的东西。
答案 0 :(得分:4)
在另一个坐标系中扭曲两个图像中的一个更常见,因为它更容易:可以直接从图像对应计算2D扭曲变换。
将两个图像变形为新的坐标系是可能的,但更复杂,因为它涉及3D变换,需要相对于最初的两个精确定义新的3D坐标系。
基本思想是(非常粗略地)在链接演示文稿中的幻灯片#2上的手绘图中表示。我做了一个更大的:
基本上,程序如下:
T 2< -1 = R 2< -1 * [I 3 | 0]
T n< -1 = square_root(R 2< -1 )* [I 3 | 0]
T n< -2 = T n< -1 * T 2< -1 -1
H n< -1 = K * R n< -1 * K -1
H n&lt; -2 = K * R n < - 2 * K -1
请注意,步骤#3假设图像是从空间中的相同点拍摄的(纯相机旋转),否则图像之间可能会出现一些视差,这会产生可见的拼接瑕疵。
希望这有帮助。
参考:[HZ03] Hartley,Richard和Andrew Zisserman。计算机视觉中的多视图几何。剑桥大学出版社,2003年。