# RANSAC
本项目分别用python和C++实现了ransac算法,并且通过ransac算法对数据集中的点云进行平面拟合。
## RANSAC简介
**RANSAC**(RAndom SAmple Consensus,随机采样一致)算法是从一组含有“外点”(outliers)的数据中正确估计数学模型参数的迭代算法。“外点”一般指的的数据中的噪声,比如说匹配中的误匹配和估计曲线中的离群点。所以,RANSAC也是一种“外点”检测算法。RANSAC算法是一种不确定算法,它只能在一种概率下产生结果,并且这个概率会随着迭代次数的增加而加大(之后会解释为什么这个算法是这样的)。RANSAC算最早是由Fischler和Bolles在SRI上提出用来解决LDP(Location Determination Proble)问题的。
**ransac的基本假设**
整个数据集中同时包含好的点和不好的点,我们将它们分别称为局内点和局外点;
数据的分布可以通过某个数学模型来描述,而局内点就是可以适应该模型的点,局外点是不可以适应该模型的点;
随意给定一组点(可能是局内点也有可能是局外点),我们假设这组点都是局内点,它们满足某个数学模型,我们利用这个数学模型去估算其他的点,如果有足够多的点通过计算能被归类为假设的局内点,那么这个模型就足够合理。
## 算法基本思想和流程
RANSAC是通过反复选择数据集去估计出模型,一直迭代到估计出认为比较好的模型。
具体的实现步骤可以分为以下几步:
1. 选择出可以估计出模型的最小数据集;(对于直线拟合来说就是两个点,对于计算Homography矩阵就是4个点)
2. 使用这个数据集来计算出数据模型;
3. 将所有数据带入这个模型,计算出“内点”的数目;(累加在一定误差范围内的适合当前迭代推出模型的数据)
4. 比较当前模型和之前推出的最好的模型的“内点“的数量,记录最大“内点”数的模型参数和“内点”数;
5. 重复1-4步,直到迭代结束或者当前模型已经足够好了(“内点数目大于一定数量”)。
## 运行本项目
**运行C++部分的代码:**
```bash
cd RANSAC
mkdir build
cd build
cmake ..
make
./RANSAC
```
**运行python部分的代码:**
```bash
#在平面中用ransac算法拟合直线
python3 RANSAC_2D.py
#在点云中用ransac算法拟合平面
python3 RANSAC_3D.py
```
**运行结果:**
![](./img/02.png)
![](./img/03.png)
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
点云分割_实现Ransac随机采样算法分割地面点云_优质项目实战.zip (10个子文件)
点云分割_实现Ransac随机采样算法分割地面点云_优质项目实战
CMakeLists.txt 133B
RANSAC.h 4KB
RANSAC_3D.py 4KB
main.cpp 350B
img
02.png 41KB
03.png 155KB
RANSAC.cpp 4KB
RANSAC_2D.py 3KB
README.md 2KB
pcltest.csv 2.24MB
共 10 条
- 1
资源评论
极智视界
- 粉丝: 2w+
- 资源: 1330
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功