RANSAC 通过随机采样和一致性验证,从含噪声数据中鲁棒地估计模型参数,是计算机视觉的基础工具。
核心原理
基本假设:数据由内点(符合模型)和外点(异常值)组成。
迭代流程:
- 随机采样最小样本子集
- 估计模型参数
- 验证一致性(统计内点数量)
- 记录最佳模型
- 重复直至满足停止条件
迭代次数计算
$$k = \frac{\log(1-P)}{\log(1-t^N)}$$
| 参数 | 说明 |
|---|
| $t$ | 内点比例 |
| $N$ | 最小样本数 |
| $P$ | 期望成功概率(通常 0.99) |
| $k$ | 迭代次数 |
关键参数
| 参数 | 说明 |
|---|
| 误差阈值 $t$ | 判断内点的临界值 |
| 内点数量阈值 $d$ | 模型可接受的最小内点数 |
| 最大迭代次数 $k$ | 保证终止 |
| 最小样本数 $n$ | 由模型自由度决定 |
Python 实现
1
2
3
4
5
| from sklearn.linear_model import RANSACRegressor
ransac = RANSACRegressor(max_trials=1000, residual_threshold=0.5)
ransac.fit(X, y)
inlier_mask = ransac.inlier_mask_
|
优缺点
| 优势 | 局限性 |
|---|
| 对异常值鲁棒 | 计算成本可能较高 |
| 广泛适用 | 参数敏感 |
| 概念简单 | 可能局部最优 |
| 概率保证 | 仅支持单一模型 |
改进算法
| 算法 | 改进点 |
|---|
| PROSAC | 优先选择高质量样本 |
| MSAC | 连续损失函数替代硬阈值 |
| MLESAC | 引入最大似然估计 |
应用场景
Comments