RANSAC随机采样一致性算法
RANSAC是一种随机参数估计算法。RANSAC从样本中抽选出一个样本子集,使用最小方差估计算法对这个子集模型参数,然后计算所有样本与该模型的偏差,在使用预先设定好的阈值与偏差比较,当偏差小于阈值时,该样本点属于模型内样本的(inliers),否则为外样本点(outliers),然后重复该过程,每次重复都记录当前最佳模型参数,所谓最佳即inliers个数最多,此时对应的inlers个数为best_nliers。每次迭代的末尾都会根据期望误差率、best_liersd、总样本个数、当前迭代次数,计算一个迭代结束评判因子,据此决定是否迭代结束。迭代结束,最佳模型参数就是模型参数估计值。
RANSAC理论上可以剔除outliers的影响,并得到全局最优的参数估计。但是RANSAC有两个问题,首先在每次迭代中都要区分inliers和 outlieres,因此需要事先设定阈值,当模型具有明显的物理意义时,这个阈值还比较容易设定,但是若模型比较抽象时,这个阈值就不那么容易设定了,而且固定阈值不适用于样本动态变化的应用;第二个问题是,RANSAC的迭代次数是运行期决定的,不能预知迭代的确切次数(当然迭代次数的范围是可以预测的)。除此之外,RANSAC 只能从一个特定数据集中估计一个模型,当两个(或者更多个)模型存在时,RANSAC不能找到别的模型。
LMeds最小中值方差估计算法
LMedS也是一种随机参数估计算法。LMedS也从样本中随机抽选出一个样本子集,使用最小方差估计算法对子集计算模型参数,然后计算所有样本与该模型的偏差。但是与RANSAC不同的是,LMedS记录的是所有样本中偏差值居中的那个样本的偏差,称为Med偏差(这也是LMedS中 Med的由来),以及本次计算得到的模型参数。由于这一变化, LMedS不需要预先设定阈值来区分inliers和 outliers。重复前面的过程N次,从中N个 Med偏差中挑选出最小的一个,其对应的模型参数就是最终的模型参数估计值。其中迭代次数N是由样本子集中样本的个数、期望的模型误差、事先估计的样本中 outliers的比例所决定。
LMedS理论上也可以剔除outliers的影响,并得到全局最优的参数估计,而且克服了RANSAC的两个缺点(虽然LMedS也需要实现设定样本中 outliers的比例,但这个数字比较容易设定)。但是当outliers在样本中所占比例达到或超过50%时,LMedS就无能为力了!这与 LMedS每次迭代记录的是“Med”偏差值有关!