最近一直在学习关于特征点和图像拼接这一块的知识,相比说道特征点匹配,大家能想到的最最经典的便是1999年由David Lowe提出的SIFT(尺度不变特征变换Scale-invariant feature transform),虽然这种算法对于特征点的匹配程度最高,效果较好,然而由于其对于计算量的问题,难以实现高效率的描述生成,所以为满足实时条件的需求,针对SIFT的改进算法SURF应运而生。个人认为,SURF方面对于SIFT的较大改进是特征点检测阶段,使用了Hessian矩阵代替了SIFT中的高斯变换,获取极值点。当然在方向定位和对特征的描述子的定义方面,也有一定的出入。
当SURF用于图像拼接过程中,单一的SURF算法,仅仅能够获取图像的特征点,方向,及其对应的描述子,而在这个过程中,需要有一个误匹配点筛选过程,这里我们使用常用的RANSAC算法来对误匹配点进行筛选,这个算法的大概原理就是,随机抽取一定的特征点进行数学建模,再用模型评估其他匹配点,如此迭代直到得到的模型符合绝大多数的匹配点为止。而在映射拼接后,我们需要对拼接线进行优化处理,这里用到了加权平均的方法。
程序如下:
#include <stdio.h>
#include <iostream>
#include<vector>