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

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

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

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

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

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

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

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

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

这个是我们关心的函数

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

刚刚看头,现在看实现

但是又没有函数,emmmm奇怪

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

真正的实现在这里

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

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

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

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

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

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

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

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

这个地方的翻译很奇怪

百度也是


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

对不起,我滑错地方了emmmm

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

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

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


#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++和其他的语言不一样,就看了看语法

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

(0)

相关推荐

  • 使用 scikit-image 进行图像处理

    重磅干货,第一时间送达 划痕试验时间序列分析. 图像处理在当今非常适用,对于2019冠状病毒疾病,无论是开发治疗方法还是寻找检测病毒的新方法,都给全球的研究人员带来了新的挑战.为了对 2019冠状病毒 ...

  • 【从零学习OpenCV 4】图像二值化

    重磅干货,第一时间送达 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍<从零学习OpenCV 4>.为了更让小伙伴更早的了解最新版的OpenCV 4,小白与出版社沟通 ...

  • 使用网络摄像头和Python中的OpenCV构建运动检测器(Translate)

    重磅干货,第一时间送达 本期我们将学习如何使用OpenCV实现运动检测 运动检测是指检测物体相对于周围环境的位置是否发生了变化.接下来,让我们一起使用Python实现一个运动检测器应用程序吧! 该运动 ...

  • [OpenCV]经典霍夫变换原理

    本文主要讲述的是霍夫变换的一些内容,并加入一些在生活中的应用,希望能对读者对于霍夫变换的内容有所了解. 首先我先说的是,霍夫变换是一个特征提取技术.其可用于隔离图像中特定形状的特征的技术,应用在图像分 ...

  • 【从零学习OpenCV 4】Canny算法

    小白学视觉",选择"星标"公众号 重磅干货,第一时间送达 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍<OpenCV 4开发详解>.为 ...

  • 自适应阈值化操作:adaptiveThreshold()函数

    在图像阈值化操作中,更关注的是从二值化图像中,分离目标区域和背景区域,但是仅仅通过设定固定阈值很难达到理想的分割效果.而自适应阈值,则是根据像素的邻域块的像素值分布来确定该像素位置上的二值化阈值.这样 ...

  • Matlab:基于Matlab通过GUI实现自动驾驶的车牌智能识别

    Matlab:基于Matlab通过GUI实现自动驾驶的车牌智能识别 相关文章 Matlab:基于Matlab通过GUI实现自动驾驶的车牌智能识别 Matlab:基于Matlab通过GUI实现自动驾驶的 ...

  • R语言有极值(EVT)依赖结构的马尔可夫链(MC)对洪水极值分析

    原文链接:http://tecdat.cn/?p=17375 为了帮助客户使用POT模型,本指南包含有关使用此模型的实用示例.本文快速介绍了极值理论(EVT).一些基本示例,最后则通过案例对河流的极值 ...

  • opencv python智能车道检测,助力无人驾驶

    近年来,基于人工智能的车道检测算法得到了广泛的研究.与传统的基于特征的方法相比,许多方法表现出了优越的性能.然而,当使用具有挑战性的图像时,其准确率通常仍在低80%或高90%之间,甚至更低. 准确可靠 ...

  • C++代码分析组件现已支持SARIF 2.1

    从Visual Studio 16.8开始,MSVC代码分析组件正式支持SARIF 2.1.0标准. SARIF一项用于展示静态分析结果的工业标准,我们是最早和SARIF技术委员会进行过合作的开发者之 ...

  • 看懂股价变动轨迹:形态分析理论(1)

    形态分析是根据证券价格的变动轨迹,对照既存的各种价格形态特征,对证券价格的未来变动趋势做出判断,并指导投资者投资活动的一种技术分析方法. 价格形态是指出现在证券价格图表上的图型或构造,它是根据过去长期 ...

  • 看懂股价变动轨迹:形态分析理论

    形态分析是根据证券价格的变动轨迹,对照既存的各种价格形态特征,对证券价格的未来变动趋势做出判断,并指导投资者投资活动的一种技术分析方法. 价格形态是指出现在证券价格图表上的图型或构造,它是根据过去长期 ...

  • 看懂股价变动轨迹:形态分析理论2

    上次帮大家,介绍了几个反转形态,这次我们开始介绍一些整理形态. 整理形态 是指市场价格经过急升或急跌之后,价格出现横向伸展所形成的各种形态 该形态仅仅是当前趋势的暂时休整,其后的市场运动将与原来的趋势 ...

  • 音乐轨迹曲线拟合可视化分析法(一)

    作者:孙剑 内容提要:文章以轮廓分析法为出发点,详细阐述建立在音乐轨迹概念上,采用拟合曲线为音乐作品建模,以实现一种可视化的分析途径与表达方式.该文主要内容有:作为理论背景的轮廓分析法简要介绍和该分析 ...

  • 〖心情日记〗 红尘一别人情淡,江湖无缘相思难//截取两图,做一点代码分析

    一张图片,没有必要加上字号,字体,甚至颜色标签,弄得代码严重超多.对于文字,也别把属性标签分开写.最好是用文字标签整体连写代码:把这两张图片的代码发给你:下面是我编辑得.是不是效果一样却简单利索啦. ...

  • 恶意代码分析——熊猫烧香

    记录对一些恶意代码的分析的过程 标题 恶意代码分析--熊猫烧香 IDA分析 sub_40A5B0 sub_40C374 sub_40BACC sub_409348 sub_40819C sub_40D ...

  • R语言拟合扩展Rasch模型分析试题质量

    原文链接:http://tecdat.cn/?p=23068 Rasch 分析是获得客观的.最基本的累加型测量值(兼顾分析模型中的标准误和质量控制如拟合统计值)的一种分析方法,适用于通过随机观测有序. ...

  • 这5个开源和免费静态代码分析工具,你一个都没有用过吗?不会吧

    如果您是软件开发人员或代码安全分析师,则通常需要分析源代码以检测安全漏洞并维护安全的质量代码.但是您的代码中可能存在许多难以手动发现的问题.毕竟,我们仍然是人类,因此即使是最高级的安全分析师也都会错过 ...