opencv中knnMatch是一种蛮力匹配,基本原理是将待匹配图片的sift等特征与目标图片中的全部sift特征一对n的全量便利,找出相似度最高的前k个。当待匹配的图片增多时,需要的计算量太大,所以考虑是否可以通过降维的方式减少计算过程中的时间花费。
全景图像拼接需要用到特征匹配
一、特征匹配
1、brute—force,蛮力匹配
2、1对1匹配
把匹配的图像跟原图用线连起来
如下图
3、k对最佳匹配
此处仅对两幅图片的特征做了比较,假设sift特征数分别为sift_nb_1sift_nb_1,sift_nb_2sift_nb_2,则这一次匹配匹配的计算量>sift_nb_1∗sift_nb_2∗128∗n>sift_nb_1∗sift_nb_2∗128∗n, 对于size为(200x100)左右的图片,其特征数已经可以超过100。假如图片更大一下,带检索的目标图片数量增加时,计算量将变得更加庞大。故此处采用SVD的方式实现PCA降维sift特征,从而加快计算。
算法实现
结果展示
如上图所示,当特征点不匹配时,需要减小误差,因此用最小二乘法拟合即RANSAC,能使结果更准确。如下:
上图蓝色表示容忍范围,红色表示干扰的,当选取即爹迭代的次数越多,则拟合的曲线越好。
当要进行图像变换时,即A X H =A ,变换矩阵的求法如下,需要用对应至少四对特征点即八个方程来解矩阵方程H。