全景图拼接
思路
这个就是简单对左右两张图进行拼接,希望实现下面效果:
这里不是指严丝合缝的可以直接拼接的图,比如
如下面两个图:(以中间那个仙人掌(貌似)为指标,可见第一张图应该位于全景图的左边,第二张图位于全景图右边)
想要实现效果(简单拼接成全景图,其实融合的不太好):
我们需要:
- 找两张图片中相似的点,计算变换矩阵
- 变换一张图片放到另一张图片合适的位置
1.SIFT确定关键点
2.对两张图做特征匹配
3.要实现两张图片的简单拼接,其实只需找出两张图片中相似的点 (至少四个,因为 homography 矩阵的计算需要至少四个点), 计算一张图片可以变换到另一张图片的变换矩阵 (homography 单应性矩阵),用这个矩阵把那张图片变换后放到另一张图片相应的位置 ( 就是相当于把两张图片中定好的四个相似的点給重合在一起)。如此,就可以实现简单的全景拼接。
注意:下面代码都是对右图计算变换矩阵的,最终将左图拼接上去即可实现简单的全景拼接
具体步骤
(1)检测左右2图片的SIFT关键特征点,并计算特征描述
(2)使用KNN检测来自左右2图的SIFT特征,进行匹配
(3)计算视角变换矩阵H,用变换矩阵H对右图进行变换
(4)左图加入到变换后的图像获得最终图像
代码与结果
代码
import cv2
import numpy as np
def cvshow(name,img):
cv2.imshow(name,img)
cv2.waitKey(0)
cv2.destroyAllWindows()
def sift_kp(image