如果需要了解其他图像处理的文章,请移步小编的GitHub地址

  传送门:请点击我

  如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice

  VisionPro有很多的示例和算子,这里再展示一个比较好用的算子FitLine Tool。我自己的笔记不会按照顺序一一展示出来的,也许那个文章先OK,我会先release出来的。 其中大部分的图片和步骤都是VisionPro的官方文档,我这里只是自己的学习笔记,不做任何商用。

  在计算机视觉和图像处理领域,直线拟合是一个常见的问题。当我们有一系列的数据点,并希望找到一条最能代表这些数据的直线时,就需要用到直线拟合算法。而VisionPro就有一个非常好用的直线拟合算子FitLineTool。这里我会介绍一下。当然目前已经更新了SmartlineTool,这些后续再说哈。

  首先,我会展示一下FitLine这个算子的页面。其次我会根据这个算子的使用步骤学习一下这个算子的原理。这个算子非常好理解,顾名思义就是直线拟合嘛。肯定是根据我们输入的一系列二维坐标点拟合成一条直线,并将直线在终端输出。(注意至少需要两个坐标点才能拟合直线哈)。下面简单过一下。

1,VisionPro 界面文档

  拟合线编辑控件为 FitLineTool 提供图形用户界面,它接受一组输入点并返回最佳拟合这些输入点的线,同时生成最小的均方根(RMSError)误差。拟合线工具至少需要两个输入点。
  下图是拟合线编辑控件的示例:

有关编辑控件顶部按钮的说明,请参见控件参考主题。拟合圆工具编辑控件支持下列图像缓冲区:
  • Current.InputImage 缓冲区包含当前图像和提供给工具的输入点集。
  • LastRun.InputImage 缓冲区包含工具在将线拟合到输入点集之后的结果。
  有关详细信息,请参见下列主题:

1,设置

  使用设置选项卡以指定要使用的输入点数以及工具可以忽略的点数: 

1.1 输入点

  使用设置选项卡的输入点网格为此拟合线工具指定输入点的数量和 (x,y) 坐标,这至少需要两个输入点。使用下图所示的功能按钮对输入点进行添加、删除和重新排序:

  默认是最少两个点,如果拟合直线,少于两个点会报错(原因很简单,两点确定一条直线嘛)!!!

  下图展示了只输入一个点,FitLineTool的报错情况:

1.2 要忽略的点

  使用要忽略的点数文本框指定拟合线工具在计算最佳拟合线时可以忽略的输入点数。为了确定要忽略的点,“拟合线”工具会考虑所有可能的子集,并保留产生最佳分数的集合。请注意,值越大,工具执行所需的时间就越多。

2,图形

  使用图形选项卡控制拟合线工具生成和显示哪些图形。
  图中右边绿线就是根据我们设置的坐标画出来的线。

  该选项卡提供下列选项:

3,结果

  使用结果选项卡查看每次执行拟合线工具的结果:

  结果选项卡包含以下信息:

  下面三张图是一个结果图,只是输出不能全部一行展开,所以我就截图分开。

2,拟合线的算法原理介绍

2.1  VisionPro FitLineTool 原理

  官网上放的东西,我都一一罗列下来,具体使用了什么,我这里就不再详细分析了,毕竟属于人家商业机密。哈哈哈

  FitLine 工具可用于将直线拟合到一组点。该工具返回拟合所提供的点的线,且RMS误差最小(直线到每个点的距离的平方和的平方根)。

  你可以指定FitLine 工具忽略所提供的部分点。在丢弃允许工具忽略的点数后,工具会尝试使用您提供的点的每个可能组合来拟合线。此工具会丢弃边远点以使用其余点拟合最佳可能的线。

RMS概念

  在数学中,RMS 通常是均方根(Root Mean Square)的缩写。均方根是一种用于衡量一组数值的离散程度或幅度的统计量。
  均方根的计算步骤如下:
  1. 对一组数值进行平方。
  2. 计算平方值的平均值。
  3. 取平均值的平方根。
  数学表示为:如果给定一组数值 x1, x2, ..., xn,均方根(RMS)的公式为:

  其中,\(\sum_{i=1}^{n} x_i^2\) 表示对所有 \(x_i^2\) 进行求和,\(\sqrt{\ldots}\) 表示平方根。
  均方根在信号处理、电工学、物理学等领域经常被用于描述信号的振幅或波动性。在统计学中,均方根也被用于计算方差的平方根,以便得到标准差。 
 

2.2  OpenCV fitline 直线拟合函数

  下图是OpenCV官方文档中,对直线拟合函数的详细介绍,这个可以好好分析,毕竟是开源的哈。

  FitLine算法是一直基于最小二乘法的直线拟合算法。他的基本思想是通过最小化所有点到直线的距离的平方和来估计直线参数。具体来说,我们先假设一条直线的方程为 y=kx+b, 其中k和b是直线的斜率和截距。然后,根据给定的数据点,我们可以构建一个关于k和b的方程组。通过求解这个方程组,我们可以得到直线的参数。FitLine算法的优点是计算速度快,适用于处理大规模数据集。但是,他对噪声和异常值比较敏感,如果数据集中存在较多的噪声或异常值,拟合出的直线可能会偏离真实直线。

  上面很清楚的看到,FitLine函数用于对二维或三维空间中的点集进行直线拟合。共有六个参数(包括输入输出)。

  由下可知,CV_DIST_L2为最简单快速的最小二乘法,推荐使用。官方文档中介绍,这里使用的拟合算法是M-estimator方法

  具体操作,大家根据自己的实际情况使用。

  直线拟合的原理很简单,就是给出多个点,然后根据这些点拟合出一条直线,最常见的算法是多约束方程的最小二乘拟合,如下图所示:

  但是当这些点当中有一个或者几个离群点(outlier)时候,最小二乘拟合出来的直线就直接翻车了。原因是最小二乘无法在估算拟合的时候剔除或者降低离群点的影响,于是一个聪明的家伙出现了,提出了基于权重的最小二乘拟合估算方法,这样就避免了翻车。根据高斯分布,离群点权重应该尽可能的小,这样就可以降低它的影响,OpenCV中的直线拟合就是就权重最小二乘完成的,在生成权重时候OpenCV支持几种不同的距离计算方法,分别如上面所描述的。其中DIST_L2是最原始的最小二乘,最容易翻车的一种拟合方式,虽然速度快点。所以VisionPro作为商用算子,肯定考虑了这些因素。具体也在其参数列表里面体现了,可以剔除离群因子。

2.3  RANSAC算法

  除了上面提到的FitLine算法(基于最小二乘法的直线拟合算法),还有RANSAC算法(随机抽样一致算法),这是一种基于随机抽样的算法。他的基本思想是从数据中随机抽取一定数量的点,然后根据这些点来估计模型参数。接着,用该模型来测试所有的数据点,计算每个点到直线的距离,如果距离小于某个阈值,则认为该点是内点。最后,通过迭代这个过程,找到包含最多内点的模型,即为最佳模型。

  RANSAC算法的优点是鲁棒性强,能够处理包含噪声和异常值的数据集。但是,它的计算复杂度较高,需要多次迭代才能找到最佳模型。在实际应用中,我们需要根据具体场景来选择合适的算法。如果数据集包含较多的噪声或异常值,我们可以选择RANSAC算法来提高拟合的鲁棒性;如果数据集规模较大且对计算速度有较高要求,我们可以选择Flitline算法来提高拟合效率。当然,除了这两种算法之外,还有许多其他的直线拟合算法,如霍夫变换、最小中值平方等。在实际应用中,我们可以根据具体需求来选择合适的算法。

RANSAC算法原理

  实际上,RANSAC算法的核心在于将点划分为“内点”和“外点”。在一组包含“外点”的数据集中,采用不断迭代的方法,寻找最优参数模型,不符合最优模型的点,被定义为“外点”。这就是RANSAC的核心思想。

其目标:一个模型与含有野值的数据集S的鲁棒拟合。

算法步骤:

  • 1,随机地从 S 中选择 s 个数据点组成一个样本作为模型的一个例示
  • 2,确定在模型距离阈值 t 内的数据点集 Si, Si称为采样的一致集并定义S的内点
  • 3,如果 Si 的大小(内点的数目)大于某个阈值 T ,用 Si 的所有点重估模型并结束
  • 4,如果 Si 的大小小于 T, 选择一个新的子集并重复上面的过程
  • 5,经过 N 次试验选择最大一致集 Si, 并用 Si 的所有点重估计模型

  

VisionPro学习笔记(7)——FitLineTool的更多相关文章

  1. VisionPro学习笔记(1)——软件介绍和基本使用

    前言 自己使用visionPro已经有段时间了,最近也一直在研究其算子的理论,为了加深印象,计划将自己的学习笔记整理在博客园,当然其官方文档对如何使用及其各种算子都有详细的介绍,所以这里的笔记仅仅为个 ...

  2. Visionpro学习笔记(壹)

    注册4年,第一次发了随笔.我的博客将主要涉及到visionPro软件的学习,labview数据采集方面的思考,c#及VS的学习 此随笔系列主要是关于VisionPro(以后简称VP)的学习及使用. 近 ...

  3. Visionpro学习笔记 :QuickBuild-Based Application Run-Once Button

    1) Creating a Run-Once Button 通过JobManager调用VisionPro文件.所有的过程放到一个Try/Catch块中. Private Sub RunOnceBut ...

  4. VisionPro学习笔记:用IEEE1394相机抓取图像

    1)找到采集卡: CogFrameGrabber1394DCAMs cameras = new CogFrameGrabber1394DCAMs(); 2)列举相连接的相机: ICogFrameGra ...

  5. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  6. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

  7. PHP-会员登录与注册例子解析-学习笔记

    1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...

  8. 2014年暑假c#学习笔记目录

    2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...

  9. JAVA GUI编程学习笔记目录

    2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...

  10. seaJs学习笔记2 – seaJs组建库的使用

    原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...

随机推荐

  1. 力扣181(MySQL)- 超过经理收入的员工(简单)

    题目: 表:Employee 编写一个SQL查询来查找收入比经理高的员工. 以 任意顺序 返回结果表. 查询结果格式如下所示. 示例 1:  解题思路: 一.[子查询] 先通过子查询找到当前员工的经理 ...

  2. MaxCompute同步数据的网络配置

    MaxCompute可以通过数据集成加载不同数据源(例如:MySQL数据库等)数据,同样也可以通过数据集成把MaxCompute的数据导出到各种业务数据库.数据集成功能已经集成到DataWorks作为 ...

  3. 阿里大数据云原生化实践,EMR Spark on ACK 产品介绍

    开源大数据社区 & 阿里云 EMR 系列直播 第六期   主题:EMR spark on ACK 产品演示及最佳实践   讲师:石磊,阿里云 EMR 团队技术专家 内容框架: 云原生化挑战及阿 ...

  4. 【ESSD技术解读-03】阿里云块存储企业级特性之异步复制

    ​简介: 在大数据时代,数据就是企业的核心资产,是企业的生命线.在现实世界中,灾难时有发生,当发生灾难时,容灾能力成为企业能否生存的关键.云上容灾服务,通常称为 DRaaS(灾难恢复即服务)不但能够省 ...

  5. [Cryptocurrency] okex 获取行情的三种方式, ticker、depth、kline

    获取行情可以使用 ticker.depth.kline 这三种方式. ticker 得到的是最新一条的成交价行情数据记录. depth 得到的是指定条数的包含 成交价格 和 成交数量 的记录. kli ...

  6. 2024 年最值得推荐的 7 个 Vue3 组件库

    你好,我是 Kagol. Vue 是一款易学易用,性能出色,适用场景丰富的渐进式 JavaScript 框架,深受广大开发者的喜爱,Vue3 更是推出了 Composition API,让逻辑复用更友 ...

  7. WPF 优化 EnsureHandle 启动性能

    本文将记录一个在 WPF 应用程序启动过程中的性能优化点.如果一个窗口需要设置 WindowStyle 属性,那么在窗口 EnsureHandle 之前,设置 WindowStyle 属性将会比在 E ...

  8. dotnet 读 WPF 源代码笔记 了解 WPF 已知问题 用户设备上不存在 Arial 字体将导致应用闪退

    本文来告诉大家 WPF 已知问题,在用户的设备上,如果不存在 Arial 字体,同时安装了一些诡异的字体,那么也许就会让应用在使用到诡异的字体的时候,软件闪退 在 WPF 的 FontFamily.c ...

  9. 2024-04-27:用go语言,在一个下标从 1 开始的 8 x 8 棋盘上,有三个棋子,分别是白色车、白色象和黑色皇后。 给定这三个棋子的位置,请计算出要捕获黑色皇后所需的最少移动次数。 需要注意

    2024-04-27:用go语言,在一个下标从 1 开始的 8 x 8 棋盘上,有三个棋子,分别是白色车.白色象和黑色皇后. 给定这三个棋子的位置,请计算出要捕获黑色皇后所需的最少移动次数. 需要注意 ...

  10. 习题8 #第8章 Verilog有限状态机设计-3 #Verilog #Quartus #modelsim

    3. 编写一个8路彩灯控制程序,要求彩灯有以下3种演示花型. (1) 8路彩灯同时亮灭: (2) 从左至右逐个亮(每次只有1路亮): (3) 8路彩灯每次4路灯亮,4路灯灭,且亮灭相间,交替亮灭. 在 ...