问题描述:opencv中knnMatch是一种蛮力匹配,基本原理是将待匹配图片的sift等特征与目标图片中的全部sift特征一对n的全量便利,找出相似度最高的前k个。当待匹配的图片增多时,需要的计算量太大,所以考虑是否可以通过降维的方式减少计算过程中的时间花费。
1. PCA降维
从物理的角度来说,所有的数据都可以看作物体(object)在选定特征(坐标轴)上的投影,而这个数值的大小代表这个object在这个特征上的表现力(强度)。为了尽可能详细的去表达一个或者一类object,有时候选取的特征会过多,就造成了数据冗余,而这些冗余的数据对于计算来说花费是十分昂贵的。所以涌现了诸如PCA,LDA,FA等降维的方式。PCA算法相当于对数据做了一次整体的分析,找出最能代表这些数据的特征(这些特征不一定是原始选定的特征,而因子分子FA则是在原有的特征中找出特征投影交大的一部分特征),并用这些特征去表示原始数据。用投影的理论来说,所有的物体不再向原来表示特征的坐标轴去投影,而是改为向新的特征对应的坐标轴去投影。
2. SVD实现降维
经典的SVD公式:
M=UΣVT
假设
M∈Rm×n,则U∈Rm×k,Σ∈R