前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >openmv中用最小二乘法拟合轨迹实现代码分析.1

openmv中用最小二乘法拟合轨迹实现代码分析.1

作者头像
云深无际
发布于 2021-04-14 02:59:17
发布于 2021-04-14 02:59:17
1.2K00
代码可运行
举报
文章被收录于专栏:云深之无迹云深之无迹
运行总次数:0
代码可运行

在openmv中有一个巡线的功能,在我刨根问底以后发现是一段C++的函数完成的这个功能,看完源码准备写Python的实现。

这个是第一个找到的关键词

我们整体思路还是按照关键字来找

这里是在源码中搜索到的所有的关于线性回归的东西

我们还是先看第一个demo吧,主要是导入的三个库,最重要的是这个image这个库,怎么说呢,承担了大部分的算法任务

这个地方也可以看到是img的方法

这个地方是我们在Openmv里面调用的地方

可以找到的是一份头文件,在里面是统计学的实现

这个是我们关心的函数

我加了一下注释,我们先去看看实现

刚刚看头,现在看实现

但是又没有函数,emmmm奇怪

我们进去看看有什么,看到了核函数

真正的实现在这里

可以看到几千行的代码就是写了几个算法

先看最上面,就是一些版权信息.我大哥教育我给别人的代码的时候一定要写上自己的版权,但是不要留自己的联系方式.这个文件就是实现一下数学上面的一些统计功能.下面有一个是结构体,我们开始看这个代码.

先看代码的小地图,他有这么多~

大概三百多行的程序,首先就是函数签名,已经写好了

一开始就是这两句,第一个是一个结果的布尔变量,一开始认为是关闭的

因为我C++不熟悉,这些函数我只能就看就查.可以看到是申请了一个find这个变量大小的内存空间,随便一找就找到了

第一个是line,不清不楚的一个东西,继续找

在正式的进入分析之前,我们在看一下这个函数的概览

这个地方的翻译很奇怪

百度也是


可以这样翻译吧?就是说这个地方不是感兴趣的区域,所以直接把ram的内容清空?

对不起,我滑错地方了emmmm

这个地方我们就认为打开这个开关了,下面进行了公式计算的所有的变量

具体也应该就是这个函数了,先不看

->这个符号是指针的指向运算符,通常与结构体一起使用。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制

#include<stdio.h>
struct stu   // 定义一个结构体
{
    char name[10];  // 姓名
    int num;  // 学号
    int age;  // 年龄
};
void main()
{
    struct stu *s;   // 定义一个结构体指针
    char str[]="ZhangLi";
    s->name = str;     // 对结构体中的成员变量name进行赋值
    s->num = 2015120;  // 对结构体中的成员变量num进行赋值
    s->age = 18;       // 对结构体中的成员变量age进行赋值
}

image.get_regression(

thresholds,invert=False,

roi,

x_stride=2,

y_stride=1,

area_threshold=10,

pixels_threshold=10,

robust=False)

函数返回回归后的线段对象line,有x1(), y1(), x2(), y2(), length(), theta(), rho(), magnitude()参数。

x1 y1 x2 y2分别代表线段的两个顶点坐标,length是线段长度,theta是线段的角度。magnitude表示线性回归的效果,它是(0,+∞)范围内的一个数字,0代表一个圆。如果场景线性回归的越好,这个值越大。

对图像所有阈值像素进行线性回归计算。这一计算通过最小二乘法进行,通常速度较快,但不能处理任何异常值。

若 robust 为True,则使用Theil-Sen线性回归算法,它计算图像中所有阈值像素的斜率的中位数。若在阈值处理后有太多像素,即使在80x60的图像上,这个O(N^2)操作也可能将您的FPS降到5帧以下。但是,只要阈值转换后的像素数量较少,即使在高达30%的阈值像素是异常值的情况下也依然有效,鲁棒性好。

thresholds 是元组列表。

[(lo, hi), (lo, hi), ..., (lo, hi)] 定义你想追踪的颜色范围.对于灰度图像,每个元组需要包含两个值 - 最小灰度值和最大灰度值.仅考虑落在这些阈值之间的像素区域. 对于RGB565图像,每个元组需要有六个值(l_lo,l_hi,a_lo,a_hi,b_lo,b_hi) - 分别是LAB通道的最小值和最大值,如果元组大于六个值,则忽略其余值。相反,如果元组太短则假定其余阈值处于最大范围。

invert 反转阈值操作,像素在已知颜色范围之外进行匹配,而非在已知颜色范围内。

roi 是感兴趣区域的矩形元组(x,y,w,h)。如果未指定,ROI即整个图像的图像矩形。操作范围仅限于 roi 区域内的像素。

x_stride 是调用函数时要跳过的x像素数。

y_stride 是调用函数时要跳过的y像素数。

如果回归后的边界框区域小于 area_threshold ,则返回None。

如果回归后的像素数小于 pixel_threshold ,则返回None。

整个代码,我们可以分为5部分其实:

  1. 一开始是进行代码的初始段,进行内存的申请,变量的创建
  2. 然后去自动来判断传进来的img是什么类型的,需要去转换
  3. 注意的一点是需要传入二值化的图像
  4. 接着就是看这个鲁棒性的参数
  5. 假的话,直接最小二乘法,但是要求图像很干净
  6. 真的话,会用Theil-Sen线性回归算法,它计算图像中所有阈值像素的斜率的中位数。

即使是开了第二个算法也还是要进行算法的处理

这个是我们处理的一些注意的事项

开始正式的看,是一个for循环.下面是要不停执行的代码

这个是一个可迭代的函数,其实这些函数是通用的数据结构

我怕C++和其他的语言不一样,就看了看语法

看这个地方,开始对传入的图像要进行处理了.现在来看图像的种类

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-03-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云深之无迹 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
「学习笔记」OpenMV 与 MicroPython
大一时参加2017年全国大学生电子设计竞赛时,当时第一次接触 Python 和 OpenMV,这是当时写下的学习笔记。后来随着硬盘损坏,这份笔记文档也消失了,幸得队友替我收藏了这份笔记。现在把这份笔记放到公众号这里,方便日后查阅,同时也分享给所有有兴趣的人。
悠风
2019/08/28
4.3K0
「学习笔记」OpenMV 与 MicroPython
最小二乘法小结
    最小二乘法是用来做函数拟合或者求函数极值的方法。在机器学习,尤其是回归模型中,经常可以看到最小二乘法的身影,这里就对我对最小二乘法的认知做一个小结。
刘建平Pinard
2018/08/14
7650
最小二乘法求解线性回归模型
线性回归(linear regression)是一种线性模型,它假设输入变量 x 和单个输出变量 y 之间存在线性关系
用户9925864
2022/07/27
6010
最小二乘法求解线性回归模型
02:机器学习实战:最小二乘法
与数学中不同的是,在机器学习中,系数w和截距b是需要求得的未知数,而特征x和标签y则是已知的。
生信探索
2023/02/09
4910
Python实现最小二乘法
上一篇文章讲了最小二乘算法的原理。这篇文章通过一个简单的例子来看如何通过Python实现最小乘法的线性回归模型的参数估计。
讲编程的高老师
2020/08/14
1.9K0
寻找最小二乘法
都知道线性回归模型要求解权重向量w,最传统的做法就是使用最小二乘法。根据在scikit-learn的文档,模型sklearn.linear_model.LinearRegression,使用的就是最小二乘法(least squares ):
木羊
2022/04/11
3670
寻找最小二乘法
机器学习之最小二乘法
1.背景:      1801年,意大利天文学家朱赛普·皮亚齐发现了第一颗小行星谷神星。经过40天的跟踪观测后,由于谷神星运行至太阳背后,使得皮亚齐失去了谷神星的位置。随后全世界的科学家利用皮亚齐的观测数据开始寻找谷神星,但是根据大多数人计算的结果来寻找谷神星都没有结果。时年24岁的高斯也计算了谷神星的轨道。奥地利天文学家海因里希·奥伯斯根据高斯计算出来的轨道重新发现了谷神星。       高斯使用的最小二乘法的方法发表于1809年他的著作《天体运动论》中,而法国科学家勒让德于1806年独立发现“最小二乘法
Gxjun
2018/03/27
8500
机器学习之最小二乘法
最小二乘法:背后的假设和原理(前篇)
总结了一些最基本的机器学习概念,比如特征,训练集,维数,假设空间,通过一个例子说明什么是机器学习的泛化能力,再阐述了什么是归纳偏好。是时候开始进一步体会机器学习算法了,我们先从最基本但很典型的线性回归算法之OLS说起吧,它背后的假设和原理您了解吗?本系列带来细细体会OLS这个算法涉及的相关理论和算法。 1 线性回归的例子 我们接下来要预测房屋的价值,其中考虑的特征包括房屋的面积,和房屋的已使用年限。如下图所示的4条样本: 房屋面积使用年限房屋价值85.1756812012130102610459349
double
2018/04/02
1K0
最小二乘法:背后的假设和原理(前篇)
模型之母:简单线性回归&最小二乘法
关于作者:Japson。某人工智能公司AI平台研发工程师,专注于AI工程化及场景落地。持续学习中,期望与大家多多交流技术以及职业规划。
木东居士
2019/10/24
3.1K0
揭秘:最小二乘法的重要特性
学过统计学的同学,深知最小二乘法是线性回归的基础,也是从描述统计到统计推断的必经之路。今天我们一起从线性代数的求解过程中,揭秘最小二乘法的重要特性。
herain
2022/12/12
3980
揭秘:最小二乘法的重要特性
最小二乘法简述
最小二乘法,说白了其实就是解决线性回归问题的一个算法。这个算法最早是由高斯和勒让德分别独立发现的,也是当今十分常见的线性拟合算法,并不复杂。
mythsman
2022/11/14
8380
Python SciPy 实现最小二乘法
Scipy 对优化最小二乘 Loss 的方法做了一些封装,主要有 scipy.linalg.lstsq 和 scipy.optimize.leastsq 两种,此外还有 scipy.optimize.curve_fit 也可以用于拟合最小二乘参数。
为为为什么
2023/04/08
1.5K0
Python SciPy 实现最小二乘法
最小二乘法 线性回归
如何从一大堆数据里求出线性回归方程呢?假定输入数据存放在矩阵X中,而回归系数存放在向量w中。 那么对于给定的X,预测结果将会通过
用户6021899
2019/08/14
8340
偏最小二乘法(PLS)
PLS是交叉分解的第二个重要算法族,在python等语言中也有相应的包实现。一般如果需要在研究多个自变量与因变量的关系话题中,绕不过去的就是多元回归,包括以线性关系为主的多元线性回归和高次多项式为主的响应面分析,众所周知,在多元线性回归中一般可以用最小二乘法计算每个自变量的系数,这一理论比较成熟,其系数矩阵
用户7506105
2021/08/06
2.7K0
6段Python代码刻画深度学习历史:从最小二乘法到深度神经网络
【新智元导读】深度学习为什么会成为今天的样子?让我们用六段代码来刻画深度学习简史,用Python展现深度学习历史上关键的节点和核心要素,包括最小二乘法、梯度下降、线性回归、感知器、神经网络和深度神经网
新智元
2018/03/22
1.4K0
6段Python代码刻画深度学习历史:从最小二乘法到深度神经网络
数据科学24 | 回归模型-基本概念与最小二乘法
回归分析在统计学中非常重要,目的在于了解两个或多个变量间是否相关、相关方向与强度,并建立数学模型以便观察特定变量来预测研究者感兴趣的变量。回归分析可以帮助人们了解在只有一个自变量变化时因变量的变化量。
王诗翔呀
2020/07/03
4K0
数据科学24 | 回归模型-基本概念与最小二乘法
最小二乘法曲线拟合
Fitting Parameters: [ 1.26607557e+04 -4.98135295e+04 7.91163644e+04 -6.47495637e+04 2.88643748e+04 -6.80602407e+03 7.57452772e+02 -2.89393911e+01 1.19739704e+01]
裴来凡
2022/05/29
1.1K0
最小二乘法曲线拟合
线性回归与最小二乘法 | 机器学习笔记
这篇笔记会将几本的线性回归概念和最小二乘法。 在机器学习中,一个重要而且常见的问题就是学习和预测特征变量(自变量)与响应的响应变量(应变量)之间的函数关系 这里主要讨论线性函数:在特征和响应之间
用户1332428
2018/03/08
1.1K0
线性回归与最小二乘法 | 机器学习笔记
机器学习篇(2)——最小二乘法概念最小二乘法
前言:主要介绍了从最小二乘法到 概念 顾名思义,线性模型就是可以用线性组合进行预测的函数,如图: image.png 公式如下: image.png image.png 误差
DC童生
2018/04/27
2K0
机器学习篇(2)——最小二乘法概念最小二乘法
工具变量法(两阶段最小二乘法2SLS)线性模型分析人均食品消费时间序列数据和回归诊断
我们需要2SLS回归的一些基本结果来开发诊断方法,因此我们在此简单回顾一下该方法。2SLS回归是由Basmann(1957)和Theil(引自Theil 1971)在20世纪50年代独立发明的,他们采取了略微不同但又相当的方法,都在下面描述,以得出2SLS估计器。
拓端
2022/03/05
4.1K0
工具变量法(两阶段最小二乘法2SLS)线性模型分析人均食品消费时间序列数据和回归诊断
相关推荐
「学习笔记」OpenMV 与 MicroPython
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档