机器视觉之 ICP算法和RANSAC算法

本文介绍了ICP算法和RANSAC算法的基本原理。ICP算法通过迭代寻找最近点并调整点云位置实现配准,而RANSAC算法则通过随机抽样来估计模型参数并筛选局内点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

临时研究了下机器视觉两个基本算法的算法原理 ,可能有理解错误的地方,希望发现了告诉我一下

主要是了解思想,就不写具体的计算公式之类的了

(一) ICP算法(Iterative Closest Point迭代最近点)

ICP(Iterative Closest Point迭代最近点)算法是一种点集对点集配准方法,如下图1

如下图,假设PR(红色块)和RB(蓝色块)是两个点集,该算法就是计算怎么把PB平移旋转,使PB和PR尽量重叠,建立模型的

(图1)

ICP是改进自对应点集配准算法的

对应点集配准算法是假设一个理想状况,将一个模型点云数据X(如上图的PB)利用四元数旋转,并平移得到点云P(类似于上图的PR)。而对应点集配准算法主要就是怎么计算出qR和qT的,知道这两个就可以匹配点云了。

但是对应点集配准算法的前提条件是计算中的点云数据PB和PR的元素一一对应,这个条件在现实里因误差等问题,不太可能实线,所以就有了ICP算法

 

ICP算法是从源点云上的(PB)每个点 先计算出目标点云(PR)的每个点的距离,使每个点和目标云的最近点匹配,(记得这种映射方式叫满射吧)

这样满足了对应点集配准算法的前提条件、每个点都有了对应的映射点,则可以按照对应点集配准算法计算,但因为这个是假设,所以需要重复迭代运行上述过程,直到均方差误差小于某个阀值。

 

也就是说 每次迭代,整个模型是靠近一点,每次都重新找最近点,然后再根据对应点集批准算法算一次,比较均方差误差,如果不满足就继续迭代

 

(二)RANSAC算法(RANdom SAmple Consensus随机抽样一致)

它可以从一组包含“局外点”的观测数据集中,通过迭代方式估计数学模型的参数。它是一种不确定的算法——它有一定的概率得出一个合理的结果;为了提高概率必须提高迭代次数。该算法最早由Fischler和Bolles于1981年提出。

光看文字还是太抽象了,我们再用图描述

RANSAC的基本假设是:
(1)数据由“局内点”组成,例如:数据的分布可以用一些模型参数来解释;
(2)“局外点”是不能适应该模型的数据;
(3)除此之外的数据属于噪声。

而下图二里面、蓝色部分为局内点,而红色部分就是局外点,而这个算法要算出的就是蓝色部分那个模型的参数

(图二)

RANSAC算法的输入是一组观测数据,一个可以解释或者适应于观测数据的参数化模型,一些可信的参数。

在上图二中  左半部分灰色的点为观测数据,一个可以解释或者适应于观测数据的参数化模型 我们可以在这个图定义为一条直线,如y=kx + b;

一些可信的参数指的就是指定的局内点范围。而k,和b就是我们需要用RANSAC算法求出来的

RANSAC通过反复选择数据中的一组随机子集来达成目标。被选取的子集被假设为局内点,并用下述方法进行验证:

  1.有一个模型适应于假设的局内点,即所有的未知参数都能从假设的局内点计算得出。
  2.用1中得到的模型去测试所有的其它数据,如果某个点适用于估计的模型,认为它也是局内点。
     3.如果有足够多的点被归类为假设的局内点,那么估计的模型就足够合理。
     4.然后,用所有假设的局内点去重新估计模型,因为它仅仅被初始的假设局内点估计过。
     5.最后,通过估计局内点与模型的错误率来评估模型。
这个过程被重复执行固定的次数,每次产生的模型要么因为局内点太少而被舍弃,要么因为比现有的模型更好而被选用。

这个算法用图二的例子说明就是先随机找到内点,计算k1和b1,再用这个模型算其他内点是不是也满足y=k1x+b2,评估模型

再跟后面的两个随机的内点算出来的k2和b2比较模型评估值,不停迭代最后找到最优点

 

我再用图一的模型说明一下RANSAC算法

(图1)

RANSAC算法的输入是一组观测数据,一个可以解释或者适应于观测数据的参数化模型,一些可信的参数。

模型对应的是空间中一个点云数据到另外一个点云数据的旋转以及平移。
第一步随机得到的是一个点云中的点对作 ,利用其不变特征(两点距离,两点法向量夹角)作为哈希表的索引值搜索另一个点云中的一对对应点对,然后计算得到旋转及平移的参数值。
然后适用变换,找到其他局内点,并在找到局内点之后重新计算旋转及平移为下一个状态。
然后迭代上述过程,找到最终的位置
其中观测数据就是PB,一个可以解释或者适应于观测数据的参数化模型是 四元数 旋转,并平移
可信的参数是两个点对的不变特征(两点距离,两点法向量夹角)
 
也就是说用RANSAC算法是 从PB找一个随机的点对计算不变特征,找目标点云PR里特征最像的来匹配,计算qR和qT
 
 
RANSAC算法成立的条件里主要是先要有一个模型和确定的特征,用确定的特征计算模型的具体参数
RANSAC算法貌似可以应用很多地方,这个相比ICP算法,更接近于一种算法思想吧

 

文章出处:http://www.cnblogs.com/yin52133/ 本文可自行转载,但转载时记得给出原文链接
### RANSAC算法简介 RANSAC(Random Sample Consensus,随机抽样一致)是一种迭代方法,主要用于从一组包含离群点的数据中估计数学模型的参数。该算法的核心思想是从数据集中随机选取最小数量的样本构建初始模型,并通过验证其余数据来评估模型的质量。最终选择能够最好描述数据的模型作为输出。 在实际应用中,RANSAC广泛应用于计算机视觉、机器人技术机器学习领域。例如,在3D点云处理方面,CGAL计算几何算法库提供了基于RANSAC的平面直线拟合功能[^1];而在更广泛的场景下,RANSAC被用来解决诸如图像配准、对象识别以及3D重建等问题[^2]。 --- ### RANSAC算法的工作原理 以下是RANSAC的主要工作流程: 1. **初始化**:设定最大迭代次数`N`、阈值`t`(用于判断内点的标准),并定义所需的最少样本数`s`。 2. **随机采样**:每次迭代中,从数据集中随机抽取`s`个样本形成候选集合。 3. **模型构建**:利用这些样本构建初步模型。 4. **一致性测试**:将剩余未参与建模的数据代入当前模型,筛选满足条件(即误差小于`t`)的数据点作为潜在内点。 5. **优化与更新**:记录具有最多内点支持的模型为最佳模型。 6. **终止条件**:重复上述过程直到达到预设的最大迭代次数或找到足够好的模型为止。 这种机制使得即使面对含有大量噪声或者异常值的情况,也能有效提取出真实反映整体趋势的信息。 --- ### RANSAC在机器学习中的具体应用场景 #### 1. 线性回归 在线性回归任务中,当训练数据存在显著比例的异常值时,传统最小二乘法可能会受到严重影响而偏离理想解。此时可以采用RANSAC策略先剔除那些明显不符合规律的数据后再进行拟合操作。下面给出一段Python实现代码示例: ```python import numpy as np from sklearn.linear_model import LinearRegression def ransac_linear_regression(X, y, max_iter=100, threshold=1e-2): best_inliers = None best_model = None n_samples = X.shape[0] for _ in range(max_iter): sample_indices = np.random.choice(n_samples, size=2, replace=False) model = LinearRegression() # Fit on sampled points model.fit(X[sample_indices], y[sample_indices]) preds = model.predict(X) residuals = np.abs(preds - y) current_inliers = (residuals < threshold).nonzero()[0] if best_inliers is None or len(current_inliers) > len(best_inliers): best_inliers = current_inliers best_model = model final_model = LinearRegression().fit(X[best_inliers], y[best_inliers]) return final_model ``` 此函数实现了基本版的适用于简单线性关系检测的功能[^3]。 #### 2. 聚类分析 除了回归之外,RANSAC也可以扩展到聚类问题上。比如对于某些特定类型的分布模式(如圆圈),我们可以通过不断尝试不同中心位置的方式来寻找最匹配的整体形状轮廓。 #### 3. 图像特征匹配 另一个重要用途是在两幅图片之间寻找对应的关键点对儿之后再运用RANSAC过滤掉错误关联部分从而提高精度效果。 --- ### 总结 综上所述,RANSAC作为一种鲁棒性强且易于理解的方法论框架已经被证明非常适合于多种复杂环境下的数据分析需求当中去。尽管如此仍需注意其时间开销较大这一缺点因此针对大规模数据集应谨慎考虑是否适用或者其他改进版本是否存在更好表现形式等等因素影响决策制定方向. ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值