RANSAC算法查看Multiple View Geometry in Computer Vision 4.7Robust estimation
上一篇文章的图中可以看到几个明显的surf噪点,用RANSAC除去。
之前对RANSAC的理解是概率统计上的,一直想办法把几个噪点除去。跟老板讨论之后,才发现原来ransac真他妈博大精深。
广义上,ransac是先取几个数据点,选择一种模型,用这几个点求出模型,再用模型去验证剩下的点。不停地更换选择的数据点,直至选出一种模型使得容忍域里面的数据最多。则区域里的点就是置信点。
在这里,可以用fundamental矩阵作模型,每次选择八个点,直至选出容忍数据最多的F矩阵,这样,就可以直接得到F矩阵。我本来就是为了得到F矩阵,所以就可以不用考虑哪些点是噪声点了,因为我已经得到最好的F矩阵。
阅读Opencv 2 Computer Vision AP Cookbook第九章 之后发现opencv 自带的函数cv::findFundamentalMat()可以自动进行ransac降噪。
书中给出了去除surf噪点的几个步骤:
步骤1:(1)找到每个特征点distance最小的两个匹配点(另一幅图像中)
(2)求两个distance的比值(比值越小说明越匹配)
(3)若比值小于给定阈值,则认为匹配
步骤2:对称匹配
若两幅的对应同一实体点的特征点互相匹配,则认为匹配,否则剔除。
步骤3:RANSAC