最小二乘、RANSAC与霍夫变换

  • 最小二乘与RANSAC
    • 最小二乘
      • 举个最简单的例子理解最小二乘
      • 最小二乘的cost function
      • 最小二乘法的求解
    • RANSAC
  • 霍夫变换
    • 基本原理
      • 霍夫投票

最近看orb-slam2代码和图像处理问题的时候发现了多种处理直线拟合的方法,特此也记录一下。
分别是直线拟合的最小二乘法,RANSAC和直线检测的霍夫变换,其本质都是对直接的拟合。

最小二乘与RANSAC

普通最小二乘是保守派:在现有数据下,如何实现最优。是从一个整体误差最小的角度去考虑,尽量谁也不得罪。

RANSAC是改革派:首先假设数据具有某种特性(目的),为了达到目的,适当割舍一些现有的数据。

给出最小二乘拟合(红线)、RANSAC(绿线)对于一阶直线、二阶曲线的拟合对比:

最小二乘

在此先列举一下最小二乘家族成员。最小二乘法直线拟合,最小二乘法多项式(曲线)拟合,机器学习中线性回归的最小二乘法,系统辨识中的最小二乘辨识法,参数估计中的最小二乘法,等等。由此可见,我们每次碰到的都是最小二乘法这个多面体的其中一个面。如果只从单个面研究,就看不到它的整体,也就不能理解它的内涵。因此,为了搞明白这个多面体,我们就要从它的核心入手,剖析它最本质的内容。
先从最小二乘的名字来看,所谓最小二乘,其实也可以叫做最小平方和。那么,是什么的平方和最小呢?那肯定是误差最小,那是什么的误差呢?就是目标对象和拟合对象的误差。连起来看,就是通过最小化误差的平方和,使得拟合对象无限接近目标对象,这就是最小二乘的核心思想。可以看出,最小二乘解决的是一类问题,就是需要拟合现有对象的问题。这么看来,是不是也就可以理解为什么最小二乘应用如此广泛了呢

举个最简单的例子理解最小二乘

假设身高是变量X,体重是变量Y,我们都知道身高与体重有比较直接的关系。生活经验告诉我们:一般身高比较高的人,体重也会比较大。但是这只是我们直观的感受,只是很粗略的定性的分析。在数学世界里,我们大部分时候需要进行严格的定量计算:能不能根据一个人的身高,通过一个式子就能计算出他或者她的标准体重?
接下来,我们肯定会找一堆人进行采用(请允许我把各位当成一个样本)。采样的数据,自然就是各位的身高与体重。(为了方便计算与说明,请允许我只对男生采样)经过采样以后,我们肯定会得到一堆数据

其中x是身高,y是体重。 得到这堆数据以后,接下来肯定是要处理这堆数据了。生活常识告诉我们:身高与体重是一个近似的线性关系,用最简单的数学语言来描述就是:

于是,接下来的任务就变成了:怎么根据我们现在得到的采样数据,求出这两个β呢?这个时候,就轮到最小二乘法发飙显示威力了。

最小二乘的cost function

在讲最小二乘的详情之前,首先明确两点:1.我们假设在测量系统中不存在有系统误差,只存在有纯偶然误差。比如体重计或者身高计本身有问题,测量出来的数据都偏大或者都偏小,这种误差是绝对不存在的。(或者说这不能叫误差,这叫错误)2.误差是符合正态分布的,因此最后误差的均值为0(这一点很重要)
明确了上面两点以后,重点来了:为了计算β1和β2的值,我们采取如下规则:β1和β2应该使计算出来的函数曲线与观察值的差的平方和最小。用数学公式描述就是:

最小二乘法的求解

样本的回归模型很容易得出:

现在需要确定β1,β2,使cost function最小。学过高数的同志们都清楚,求导就OK。对于这种形式的函数求导


将这两个方程稍微整理一下,使用克莱姆法则,很容易求解得出:

因为求和符号比较多,省略了上标与下标。
根据这个公式,就可以求解出相应的参数。
对应上面的身高体重关系的例子,我们只需要将采样得到的数据,一一代入即可求解。

RANSAC

可以看到RANSAC可以很好的拟合。RANSAC可以理解为一种采样的方式,所以对于多项式拟合、混合高斯模型(GMM)等理论上都是适用的。
RANSAC简化版的思路就是:

第一步:假定模型(如直线方程),并随机抽取Nums个(以2个为例)样本点,对模型进行拟合:

第二步:由于不是严格线性,数据点都有一定波动,假设容差范围为:sigma,找出距离拟合曲线容差范围内的点,并统计点的个数:

第三步:重新随机选取Nums个点,重复第一步~第二步的操作,直到结束迭代:

第四步:每一次拟合后,容差范围内都有对应的数据点数,找出数据点个数最多的情况,就是最终的拟合结果:

至此:完成了RANSAC的简化版求解。

这个RANSAC的简化版,只是给定迭代次数,迭代结束找出最优。如果样本个数非常多的情况下,难不成一直迭代下去?其实RANSAC忽略了几个问题:

每一次随机样本数Nums的选取:如二次曲线最少需要3个点确定,一般来说,Nums少一些易得出较优结果;
抽样迭代次数Iter的选取:即重复多少次抽取,就认为是符合要求从而停止运算?太多计算量大,太少性能可能不够理想;
容差Sigma的选取:sigma取大取小,对最终结果影响较大;
这些参数细节信息参考:维基百科。

RANSAC的作用有点类似:将数据一切两段,一部分是自己人,一部分是敌人,自己人留下商量事,敌人赶出去。RANSAC开的是家庭会议,不像最小二乘总是开全体会议。

霍夫变换

Hough直线检测的基本原理在于利用点与线的对偶性,在我们的直线检测任务中,即图像空间中的直线与参数空间中的点是一一对应的,参数空间中的直线与图像空间中的点也是一一对应的。这意味着我们可以得出两个非常有用的结论:
1)图像空间中的每条直线在参数空间中都对应着单独一个点来表示;
2)图像空间中的直线上任何一部分线段在参数空间对应的是同一个点。
因此Hough直线检测算法就是把在图像空间中的直线检测问题转换到参数空间中对点的检测问题,通过在参数空间里寻找峰值来完成直线检测任务。

基本原理

一条直线可由两个点A=(X1,Y1)和B=(X2,Y2)确定(笛卡尔坐标)

另一方面,也可以写成关于(k,q)的函数表达式(霍夫空间):

对应的变换可以通过图形直观表示:

变换后的空间成为霍夫空间。即:笛卡尔坐标系中一条直线,对应霍夫空间的一个点。

反过来同样成立(霍夫空间的一条直线,对应笛卡尔坐标系的一个点):

再来看看A、B两个点,对应霍夫空间的情形:

一步步来,再看一下三个点共线的情况:

可以看出如果笛卡尔坐标系的点共线,这些点在霍夫空间对应的直线交于一点:这也是必然,共线只有一种取值可能。

如果不止一条直线呢?再看看多个点的情况(有两条直线):

其实(3,2)与(4,1)也可以组成直线,只不过它有两个点确定,而图中A、B两点是由三条直线汇成,这也是霍夫变换的后处理的基本方式:选择由尽可能多直线汇成的点。

看看,霍夫空间:选择由三条交汇直线确定的点(中间图),对应的笛卡尔坐标系的直线(右图)。

到这里问题似乎解决了,已经完成了霍夫变换的求解,但是如果像下图这种情况呢?

k=∞是不方便表示的,而且q怎么取值呢,这样不是办法。因此考虑将笛卡尔坐标系换为:极坐标表示。

在极坐标系下,其实是一样的:极坐标的点→霍夫空间的直线,只不过霍夫空间不再是[k,q]的参数,而是的参数,给出对比图:

是不是就一目了然了?点的检测问题,通过在参数空间里寻找峰值来完成直线检测任务。

之前面试也被问到了计算机是如何找到这个峰值的,我当时也没能打出来,猜测是遍历几条直线来选取候选点再来根据候选点进行匹配。结果后面下来发现有霍夫投票的方式,也是查漏补缺了。

霍夫投票

我要做的是:我创建一个表格,这里是m和b,它是由一组箱子组成的:


每一个点都对经过的箱子进行投票,所以它会对经过的每个箱子投一票。
你收集了每个箱子的票数情况。每一个点都投过票,哪一个票数最多,那就是你的路线:

因此,基本上,我们将把选票投进箱子,然后找到最多选票的箱子。求这个点坐标就求出直线了。

德鲁周记13--最小二乘、RANSAC与霍夫变换的区别相关推荐

  1. CS131专题-4:拟合(最小二乘、RANSAC、霍夫变换)

    本专题目的:了解最小二乘.RANSAC.霍夫变换这3个算法的基本原理,能够做到脱口而出,并从零编程实现. 目录 1 前言 2 最小二乘 2.1 基本原理 2.2 求解方法 3 RANSAC 算法 3. ...

  2. 德鲁周记09--Kaggle比赛 TMDB Box Office Prediction

    Kaggle TMDB Box Office Prediction 报告 一.问题定义: 二.获取数据: 三.研究数据: 四.准备数据 五.模型研究 六.模型微调和模型融合 一.问题定义: 该问题来源 ...

  3. 1.13 空字符串和null的区别

    "" ""是一个长度为 0 且占内存的空字符串,在内存中分配一个空间,可以使用 Object 对象中的方法.例如:"".toString() ...

  4. Efficient RANSAC for Point-Cloud Shape Detection 点云形状检测的高效RANSAC法

    文章目录 Efficient RANSAC for Point-Cloud Shape Detection 点云形状检测的高效RANSAC法 摘要 1. 介绍 2. 以前的研究 2.1 RANSAC ...

  5. matlab fair,matlab练习程序(加权最小二乘)

    起本篇题目还是比较纠结的,原因是我本意打算寻找这样一个算法:在测量数据有比较大离群点时如何估计原始模型. 上一篇曲面拟合是假设测量数据基本符合均匀分布,没有特别大的离群点的情况下,我们使用最小二乘得到 ...

  6. 超最小二乘椭圆拟合函数----MATLAB实现

    1. 超最小二乘椭圆拟合(Hyper least squares fitting of ellipses) 上一篇博客给出了最小二乘椭圆拟合的函数(点击打开链接),超最小二乘椭圆拟合和最小二乘椭圆拟合 ...

  7. 计算机视觉的几个经典算法 —— 最小二乘法 + RANSAC + 哈希算法(附DCT) + 图像聚类算法

    计算机视觉的几个经典算法 目录 计算机视觉的几个经典算法 1. 最小二乘法(寻找线性回归函数) 2. RANSAC(模型已知,参数未知) 2.1 RANSAC 与 最小二乘法的区别 2.2 RANSA ...

  8. 2018-3-31 文章(ELM-Chinese-Brief)原文

    什么是超限学习机 1 Guang‐Bin Huang School of Electrical and Electronic Engineering, Nanyang Technological Un ...

  9. opencv求两张图像光流_OpenCV单应性矩阵发现参数估算方法详解

    点击上方蓝字关注我们 微信公众号:OpenCV学堂 关注获取更多计算机视觉与深度学习知识 单应性矩阵计算函数与应用 OpenCV在通过特征描述子完成描述子匹配之后,会得到一些关键点对,我们会把这些关键 ...

最新文章

  1. Python字节码介绍
  2. python观察日志(part16)--收集关键词参数
  3. 2016蓝桥杯省赛---java---B---3(凑算式)
  4. 想要转人工智能,程序员该如何学习?(学习路线、知识体系)
  5. 在markdown (csdn)博客上输出 右下小标,右上小标。
  6. 漫漫长路十多小时,谁是机上WiFi的“业界良心”?
  7. 图解复盘总结和报告模板实例
  8. torch基本功能介绍
  9. APP为什么打开率低?三大原因和应对之策!
  10. H.266/VVC相关技术学习笔记4:HEVC和VVC中块划分的差别
  11. 机械臂正运动学标准DH参数建立技巧
  12. 苏州的计算机考研的,2014年苏州大学计算机考研经验
  13. Obsidian 多端免费同步方案
  14. 我经历过的失败产品和项目(六):体验很差的视频会议系统
  15. 北京四达时代软件技术股份有限公司招聘公告
  16. 逆变器simulink模型——处理器在环测试(PIL)
  17. dissecting-disruptor-wiring-up
  18. 长难句——考研英语刘晓燕#1
  19. Chrome浏览器设置允许网站如金山文档剪贴方法测试ok
  20. 读书八字诀:怎样将书读得通透?

热门文章

  1. php转域,转php姓名
  2. 什么是挂载,Linux挂载如何实现详解
  3. 2022年氮气液化器市场前景分析及研究报告
  4. 计算机网络之应用层与传输层
  5. FlowLayout的使用
  6. ConstraintLayout 流式布局:Flow的用法
  7. Programming Exercise 6:Support Vector Machines
  8. 新浪开放平台---oauth2认证流程 casperjs自动登录和授权 api需要注意的问题及bug
  9. 不是封闭也不是开放 创新封闭式基金迎来变种
  10. 【Vue】详解Vue生命周期