拟合
目录
我们现在已经学习了如何检测边缘,现在该做什么了?
我们希望通过将多个特征点按照一个简单的模式组合,形成一个更高层次、更紧凑的图像中的特征表示
选择一个参数化的模型来表示一组特征,简单的模型比如线、圆,比较复杂的模型比如车的轮廓
(一)拟合
1.存在的问题
(1)测量的特征位置存在噪声
(2)外来数据:杂波(离群值)、多条线
(3)缺失的数据:遮挡物
2.拟合方法
如果我们知道哪些点属于直线,即所有的点都是直线上的点采用最小二乘法找到 最佳"直线参数;
如果有异常值,采用鲁棒估计或RANSAC方法;
如果有很多条边,采用RANSAC投票方法或霍夫变换方法;
如果甚至不确定是不是一条线,采用模型选择
(二)最小二乘法
找到一条直线,使得点到直线的距离误差最小(代数解法)
对E关于d求导得到d和a,b的关系:
为什么要求导?
找到最优的代价函数E,使得点到直线的距离误差最小
将d带入原式,用矩阵表示E
对E关于N求导
( U T {U^T} UTU)N=0的解,服从 ∣ ∣ N ∣ ∣ 2 {||N||^2} ∣∣N∣∣2=1;N是最小特征值对应的特征向量; U T {U^T} UTU是一个2×2的实对称矩阵,其行列式一定大于等于0,所以最小特征值最小为0。
求出N就得到了a和b,d也可以求出来了。
U
T
{U^T}
UTU矩阵的展开式:
使得实际点坐标减均值表示的向量在N向量的投影的截距越小越好。
另一种解释最小二乘拟合的思路,利用极大似然估计
(三)鲁棒估计
当出现异常点时,使用鲁棒的最小二乘:惩罚异常值
正常情况下,对红点的最小二乘法拟合
但是当出现异常点时,采用最小二乘法拟合的直线就出现了问题
使用鲁棒的最小二乘
r表示点到直线的距离
随着r逐渐增大,p先使逐渐增大然后趋于饱和保持不变。
选择一个合适的规模σ,使异常点的值影响最小化,效果如下
鲁棒拟合是一个非线性优化问题,必须迭代求解。
(四)RANSAC
鲁棒拟合可以处理少数异常值–如果我们有非常多的异常值呢?
随机样本共识(RANSAC),在有异常值的情况下进行模型拟合的非常普遍的框架
1.思想:
(1)随机选择一个小的点的子集——确定子集包含的点的个数,直线需要2个点;
(2)对该子集拟合一个模型 ——选择什么样的模型;
(3)找到所有剩余的与模型 "接近 "的点,并将其余的点作为异常点拒绝。——计算属于该模型的点的个数;
(4)重复上述步骤,选择出最佳模型
2.步骤
(1)均匀随机地画出s个点 ;
(2)对这s个点拟合直线 ;
(3)在剩余的点中找出在这条直线上的点(即与直线的距离小于f的点)
(4)如果有d个或更多的在直线上的点,则接受该线,并使用所有离群点重新拟合。
3.参数
(1)初始点的数量s
拟合模型所需的最小数量
(2)距离阈值t
经验值,根据任务来确定,只有在阈值范围内的点才可以投票选择t,使外点率为p(例如0.95)。
(3)重复的次数N(迭代数)
选择N,保证线的正确率为p时,至少有一个随机样本是满足该正确率(例如,p=0.99)(外点率:e)。
该公式表示N次都出错的概率
指定e,s,p,求N
(4)内点集大小d
要么输出内点数量最多的集合,要么所有大小超过门限d的集合
4.指定外点率e
自适应方法:(迭代)
(1)设N为无穷, 真实迭代次数sample_count 为0
(2) 选择一个模型并计算其内点的数量 d
(3)外点率 e = 1- 内点的数量 / 总点数
(4)根据e重新计算N
(5) sample_count加1
(6)如果N大于sample_count,则返回到第二部重复过程;否则输出当前N对应的e
5.优缺点
(1)优点:
简单
好用
(2)缺点:
参数多
内点率低的模型效果不好(迭代次数太多)
随机性导致不易找到很好的初始化样本
拟合线时, 使用RANSAC找到最优样本后,再用最小二乘的方法对内点拟合成一条直线
6.应用:指纹匹配
RANSAC不止可以拟合线,也可以应用于指纹匹配。
采用投票的思想
判断两张指纹图是否是一个指纹
具体步骤:
(1)随机找三对点(右边一个点,左边一个相同类型的点)算出在这种情况下的变换矩阵T(六个未知量,需要3对点才能求出解)
(2)利用这种变换矩阵逐一匹配计算有多少点满足这种变换,点越多表示T越优
(3)重复前两步,投票选出最优变换矩阵T和匹配点的个数,如果点的个数超过门限,表示匹配上。
(五)霍夫变换(Hough transform)
采用投票策略
1.思想
(1)让每个特征为 所有与之兼容的模型 投票
(2)希望噪声特征不会一致地都投票给任何一个模型
(3)只要有足够的特征,缺失的数据并不重要,就能在一个好的模型上达成一致
2.概括
(1)用参数空间表示图像空间,将参数空间离散化成一个个小格;
(2) 对于图像中的每一个特征点,在参数空间中可能产生这个点的每一个格子中投一个票;
(3)找到投票数最多的格子。
3.图像空间vs参数空间
(1)图像空间上的一条直线在霍夫参数空间中用一个点来表示
(2)图像空间上的一个点在霍夫参数空间中用一条线来表示
(3)霍夫参数空间的两条线的交点表示图像空间两个点构成的一条直线上所有的点
参数空间(m,b)存在的问题:
(1)无界限的参数域
(2)垂直线要求无限的m
因此,采用极坐标方程来表示参数空间
4.极坐标参数空间
思想:
(1)将累加器H初始化为全零,H为累积器阵列(票数)
(2)循环
(3)找出H(θ, ρ)为局部最大值的(θ, ρ)。
实例如下,可以看到有一个特定(θ, ρ)投票数最多,所以其为直线的参数值
噪声的影响
(1)导致峰值变得模糊不清,难以定位
(2)一条20个点的线的票数,噪音越来越大,最大票数越来越低。
(3)均匀的噪声会导致阵列中出现虚假的峰值
噪声的解决方法:
(1) 选择一个好的网格/离散化
格子太少:当太多不同的线对应于一个格子时,会得到大量的票数
格子太多:由于一些不完全相邻的点为不同的格子投了票,因而错过了一些线。
(2)为相邻的小格投票(在累积器阵列中平滑,软投票)
除了给自身投票,也给相邻格投票
根据相邻格离当前格的距离决定投票的大小,距离越近投票数越大
(3)试图摆脱不相关的特征
只取具有显著梯度的边缘点,融入图像梯度
回顾一下:当我们检测到一个 边缘点时,我们也知道它的 梯度方向
对霍夫变换进行修正:
5.圆的霍夫变换
圆的参数空间为三维,三个变量x,y,r
那么给定一个有方向的边上的点,它在参数空间中所有能被投票的小格是什么
给定r
(1)如果给定梯度方向,能被投票的小格有2个,一个在内部的点,一个在外部的点。
(2)如果没有给定梯度方向,能被投票的小格不是两个点,而是过这两个点的一个圆,所有r在参数空间形成一个锥体。
穷举r所有可能的值,找到投票数最多的点,即圆心
6.应用
存储每一种特征类型向中心的位移矢量
之后,当我们看到红色的圆形时,我们知道中心一定在它的左下方
对于新图像中的每个特征,在模型中查找该特征类型,并对模型中与该类型相关的可能中心位置进行投票。
如果各个特征类型代表车辆的各个部件,比如车窗、车门、车灯等,根据这些特征类型,我们可以找到车辆中心,确定车辆位置
7.优缺点
优点:
(1)可以处理全局(非局部)和遮挡的问题
(2)可以检测到一个模型的多个实例
如果画的线比较密集,进行非最大化抑制
(3)对噪声有一定的鲁棒性:噪声点不太可能只对任何一个单一的格子投票
缺点:
(1)搜索时间的复杂性随着模型参数空间的维数呈指数级增长
(2)非目标形状会在参数空间产生虚假的峰值
(3)很难选择一个好的网格大小
通过软投票来解决