RANSAC 通过随机采样和一致性验证,从含噪声数据中鲁棒地估计模型参数,是计算机视觉的基础工具。
核心原理
基本假设:数据由内点(符合模型)和外点(异常值)组成。
迭代流程:
- 随机采样最小样本子集
- 估计模型参数
- 验证一致性(统计内点数量)
- 记录最佳模型
- 重复直至满足停止条件
迭代次数计算
| 参数 | 说明 |
|---|---|
| 内点比例 | |
| 最小样本数 | |
| 期望成功概率(通常 0.99) | |
| 迭代次数 |
关键参数
| 参数 | 说明 |
|---|---|
| 误差阈值 | 判断内点的临界值 |
| 内点数量阈值 | 模型可接受的最小内点数 |
| 最大迭代次数 | 保证终止 |
| 最小样本数 | 由模型自由度决定 |
Python 实现
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 | 引入最大似然估计 |
应用场景
- 特征匹配与几何验证
- 图像拼接
- 三维重建
- 鲁棒回归分析