亿加合和智能车制作

标题: 再谈总钻风之算法简析—By“逐飞科技” [打印本页]

作者: fbhsy    时间: 2019-5-16 18:11
标题: 再谈总钻风之算法简析—By“逐飞科技”
再谈总钻风之算法简析—By“逐飞科技”
[attach]94217[/attach]
   智能车发展到第十四届,不再按传感器分类组别,光电组,电磁组,线性CCD组,相继成为了历史,摄像头逐渐发展成了最主流的传感器,很荣幸,总钻风经过几年大家的认识,也成为了智能车竞赛中可能使用最广泛的主流摄像头,当然现在仍然有部分参赛选手选择了更为简单的硬件二值化摄像头,也有人甚至开始想用彩色摄像头,但是大家的选择基本还是符合正态分布的,选择了更适合目前比赛需求的总钻风摄像头。为什么说更适合目前的比赛需求相信也不用过多的分析,因为总的来说今年应该是有史以来最难的一届了吧,比如“阳光算法”,每年都有人吐槽主办方光线不好的问题,导致比赛失利,今年组委会直接将光线问题交给选手来解决,场地再也不要求遮光了,那么很多车友们在摄像头的选择上就开始出现了担忧,到底是用灰度摄像头(比如总钻风)还是用硬件二值化摄像头呢。我们推荐的当然是总钻风摄像头,推荐使用总钻风摄像头的原因并不是说总钻风能自动处理反光,而是由于灰度摄像头信息更多,当出现反光的时候可以通过程序去判断是否为反光,比如正常的情况没有反光的话,我们可以调节曝光时间控制图像最大亮度都在150以下,如果出现反光可能反光处就会特别的亮,我们通过判断像素值的大小就可以得到一些有用信息来做判断,反观二值化摄像头,像素点的值就只有01,不是黑就是白根本就没有办法去通过像素的值判断是否可能存在反光,当然这仅仅是举一个小小的例子,反光还有可能与赛道颜色值比较接近,需要通过其他办法来继续抑制。比如当某一个边界出现反光的时候,我们可以根据另外一个边界来进行判断反光问题并补线,方法可能很多,更多的探索就需要大家自己多加尝试,最近也有一个小伙伴和我说他的光线问题大概解决了,以下是聊天截图。在这里非常感谢车友给我们反馈信息。
[attach]94218[/attach][attach]94219[/attach]
    上面这位车友也说到了一个关键点,并不是摄像头自己能抑制反光,也不是用的什么高级算法,仅仅是因为灰度摄像头数据信息多,直接处理灰度去判断反光,然后对边界进行补线,从而提高抗反光的能力。
    但是由于很多学校传承的原因,可能摄像头虽然使用了灰度摄像头但是还是将图像二值化了之后再进行边界提取的,虽然比以前的那种硬件二值化摄像头在动态性能上要好(因为总钻风是全局快门,相较于卷帘快门在运动时图像更加完整),可是这样的用法就没有将灰度的优点发挥出来,而且很多车友都是用的全局二值化方案,也就是一个阈值对整幅图进行二值化,如果还是想用二值化方案的话,我这里建议可以尝试下局部二值化,对一幅图像进行分割,定义多个阈值,每一个区域一个阈值,可以提升二值化的效果,但是这并不能去解决反光的问题,不过可以在一定程度上解决光线不均匀的问题。
PS:对于那种反光非常严重的,人看图像都有点分不清哪里是赛道哪里是背景的只有切换电磁寻迹了,毕竟人都不行了,那么程序估计很难写的出来。)

重点来了:上面也说了,很多小伙伴拿着灰度摄像头完全不知道怎么直接使用灰度,那么本次我们就对视频中逐飞科技的测试样车是如何使用灰度的来做一个简单的讲解。图片及视频如下:
[attach]94220[/attach]
视频1:
http://player.youku.com/player.php/sid/XNDE4NDA5MTgxMg==/v.swf
视频2:
http://player.youku.com/player.php/sid/XNDE4NDA5MzEwNA==/v.swf

硬件测试平台配置:新款130°总钻风摄像头+逐飞LPC54606核心板+逐飞1024线迷你编码器+新款IPS液晶屏+母板电源板+逐飞MOS双驱,搭载在C车模上运行。
直接灰度使用的简单算法分享:逐飞科技测试样车采用的方式是将两个像素点的差值除以两个像素的和值(公式为:abs(a-b)*100/(a+b),其中乘以100仅仅是为了放大数据而已,避免使用浮点计算,提高计算速度。
  
场景
  
像素值1
像素值2
差比和的值*100
一黑点一白点
30
100
53(取整)
两白点
90
100
5(取整)
两黑点
30
35
7(取整)
一黑点一白点(较暗)
20
60
50(取整)
上表列出了4中情况
情况1:黑点为30,白点为100,我们通过差比和公式计算并放大100倍,得到的结果为53
情况3:白点190,白点2100,我们通过差比和公式计算并放大100倍,得到的结果为5
情况3:黑点130,黑点235,我们通过差比和公式计算并放大100倍,得到的结果为7
通过对这三种情况进行分析,我们可以看到当选取的两个点,像素值差距较大时计算出来的值比较大,像素值差距较小的时候计算出来的值比较小,那么我们就可以设置一个阈值,当差比和计算出来的值超过这个阈值的时候(这个阈值就需要自己上赛道观察白点与黑点的值,然后再自己计算一下这个黑点与白点的差比和值是多少,然后计算出来的值乘以0.7来作为阈值,也可以根据自己的测试对这个阈值再稍加调试),我们认为找到了一个黑点与一个白点。
情况4:可以看得出来白点与黑点都比较暗,但是通过差比和计算出来的值却还是和正常图像计算出来的值差距不大,这样我们就可以通过使用差比和提高我们的稳定性,不像二值化那样光线稍有变化二值化图像就会跟随着变化。从而稍微提高了对光线的适应能力。
列个表后面说明算法用:
  
a
  
b
c
d
e
f
g
h
j
k

接下来我们在稍微介绍下关于使用差比和进行边界的搜索,假设我们的车模放在了赛道中间,然后打开电源,那么我们从图像最近一行的中点向左右两边进行边界的搜索,上方有一个
ak的表格,假设就是我们摄像头返回来的最近一行的数据,a是最左边k是最右边,
那么我们从e开始往左边进行差比和的计算,比如使用ed进行差比和计算,由于车模已经放好在赛道上,中间肯定都是白色的,因此计算出来的值必然比较小,自然不会大于我们设置的阈值,那么我们继续往左移动一格进行计算,使用dc进行计算,直到计算出来的结果大于我们设置的阈值,假设cb计算之后的值大于了我们设置的阈值,那么我们就可以判断b为黑点,即找到了边界。右边也是同理。
以上是最基本的模型,那么在实际使用的过程中其实会遇到一个问题,由于我们图像是连续的,在赛道的边界从白变为黑存在灰度渐变,比如数据从100 70 55 35这样过度到黑色的,如果我们使用紧邻的两个点进行差比和计算则容易出现找不到边界的问题,因为两个点的差值较小,所以为了避免这个问题我们可以将计算的两个点隔5像素,这样可以使得差值较为明显。比如使用g点与b点进行计算,然后下一次使用f点与a点进行计算。始终保持两点有一定的间距。
总结:我们仅仅是提供了一个简单的方法而已,抛砖引玉,具体在代码编写与调试过程或者更高级的使用方法都要靠自己,还有很多需要完善的地方也是需要大家自己分析然后在加入相应的代码。另外关于搜线的算法,在逐飞科技之前的帖子里也有专门的分析,摄像头选择和总钻风介绍也有专门的帖子,需要了解的可以去多看看。
【思路】线性CCD & 摄像头搜线方案 By“逐飞科技”
http://www.znczz.com/forum.php?mod=viewthread&tid=259429&fromuid=15522
(出处: 智能车制作)
最后:对于很多人经常问一个问题,MT9V032MT9V034的区别,有的伙伴从名字上看,一个数字大一点一个数字小一点,会误以为数字大一点的是不是要好一点呢,就好比iPhoneXiPhone8好,但其实就这两名字和芯片来说并不是这样,甚至在这里MT9V032的芯片单价比MT9V034单价高出30RMB左右,这个问题的答案可以多方面查证,关于芯片到底谁好,百度或者查看数据手册,其实可以知道两个芯片唯一的不同点是034有两套配置寄存器而已,其他的两者并没有什么性能上的优缺点。对于平时大家使用来讲就是一样的,这是芯片上的区别。那么经常也有人问友商的摄像头与我们的哪个好,我们只能说别家的我们不是很清楚,我们只知道我们的摄像头很赞,使用起来很简单,容易上手,而且我们的配套例程还算比较完善靠谱,基本买回去可以不用过于理会摄像头部分比较麻烦的底层代码,我们都提供配套的库,基本满足做智能车的需求,可以说帮助大家解决了很多关于底层的很多麻烦事儿,以节省时间、提高效率,留给车友们更多时间研究图像提取算法以及后面的控制算法。
还是得再苦口婆心的啰嗦几句,我们提供库仅仅是为了帮助大家快速上手,但是仍然建议大家有空的时候,自己可以尝试下写一写底层,至少你得明白写底层的过程大概是怎样的。这样有助于学习到更多的东西,毕竟我们参加比赛是为了获取知识而不是获取奖状,好多没获奖或者获奖并不好的牛逼车友相信大家也都知道一些,不以一时成败论英雄,学到知识才是硬道理,做车就那么一两年或者三年,后面等着你证明你自己能力的可是几十年,大学期间打下一个好的基础才最重要,竞赛也就是一个训练你成长的载体而已,能成什么得看你自己!!!
最最后,阳光算法打卡这个梗好像过不去了,卓大挺为难的,都开始送书来封口了,我想说……卓大可以送我一本签名版么?跪求……收件信息可以私聊的,手动偷笑!

逐飞科技智能车技术交流群:逐飞科技_智能车2部:244861897”
本文由逐飞科技编辑整理,大神轻拍,欢迎交流,愿智能车世界更美好!


作者: cxr18220662742    时间: 2019-5-16 18:25
1楼。
作者: JiuDing    时间: 2019-5-16 18:31
牛逼

作者: 快上车    时间: 2019-5-16 18:32
当阳光把黑色得也照成白色的,图像处理就是没有办法的,二值化、轮廓提取都没用。而且你不知道发车之后光照条件会变得多严峻,也很难让车子自己评价放光有多严重,还谈什么切换电磁。这样一来,还不如用电磁来得稳妥了。
作者: fbhsy    时间: 2019-5-16 18:37
快上车 发表于 2019-5-16 18:32
当阳光把黑色得也照成白色的,图像处理就是没有办法的,二值化、轮廓提取都没用。而且你不知道发车之后光照 ...

正如正文中所说,如果严峻成人眼都看不见了,就别指望摄像头啦,估计卓老师也有考量吧,毕竟只是个本科类的比赛,并且都开始送书封口了,

作者: aytc100    时间: 2019-5-16 18:44
总钻风使用起来很简单是因为里面有片51单片机帮忙配置sccb了
作者: chenjiawei    时间: 2019-5-16 18:49
分析的很好。看了这篇帖子思维开阔了不少,顶一下
作者: fbhsy    时间: 2019-5-16 18:54
aytc100 发表于 2019-5-16 18:44
总钻风使用起来很简单是因为里面有片51单片机帮忙配置sccb了

是滴,超哥正解,但是数据输出未经任何处理,这点我们几年前做这款摄像头时也提前咨询过卓大,允许帮忙配置摄像头,不允许对图像进行处理,严格遵循这个原则

作者: msonah    时间: 2019-5-16 18:54
灰度图靠谱

作者: The-answer    时间: 2019-5-16 18:56
先顶贴,再看贴。顶顶顶顶顶
作者: 丿倾城    时间: 2019-5-16 19:40
顶贴 顶贴
作者: gaolangtao    时间: 2019-5-16 20:07
顶顶顶!!!!
作者: yacter    时间: 2019-5-16 20:13
顶贴^_^
作者: 迟阳    时间: 2019-5-16 21:08
顶顶顶!!

作者: luckner    时间: 2019-5-16 21:16
那么这么好的算法 不配个I.MXRT怎么能行呢?
作者: 1325536866    时间: 2019-5-16 22:07
66666
作者: fbhsy    时间: 2019-5-16 22:14
luckner 发表于 2019-5-16 21:16
那么这么好的算法 不配个I.MXRT怎么能行呢?

更配哦

作者: 战忽局后勤部长    时间: 2019-5-16 23:00
看来要放弃大津法,改用灰度值信息了。
作者: 1596010090    时间: 2019-5-17 01:36
有大佬试过局部自适应二值化吗??
作者: スケート少年    时间: 2019-5-17 14:28
顶,灰度确实好用
作者: 沐小俊    时间: 2019-5-17 15:39
顶顶顶,太强了太强了
作者: 不知所以    时间: 2019-5-17 15:46
厉害。
作者: _Phantom_    时间: 2019-5-17 17:03
后排帮顶
作者: Amaolee    时间: 2019-5-17 20:22
顶顶顶
作者: 陈平安    时间: 2019-5-17 21:46
顶顶顶,不过这样的运算是不是有点大呢?
作者: T童话    时间: 2019-5-18 13:27
顶顶顶
作者: 小白刘    时间: 2019-5-18 21:21
问一个很基础的问题,每一个像素点的灰度值是uint8类型的数据,作差比和如何实现差以小数的类型计算啊?

作者: fbhsy    时间: 2019-5-19 03:03
小白刘 发表于 2019-5-18 21:21
问一个很基础的问题,每一个像素点的灰度值是uint8类型的数据,作差比和如何实现差以小数的类型计算啊?

看帖不细心吧,里面有讲

作者: aytc100    时间: 2019-5-19 15:13
标题: 未使能FLASH播放器的话,看这个链接
https://v.youku.com/v_show/id_XNDE4NDA5MzEwNA==.html

https://v.youku.com/v_show/id_XNDE4NDA5MTgxMg==.html

作者: fbhsy    时间: 2019-5-20 09:16
aytc100 发表于 2019-5-19 15:13
https://v.youku.com/v_show/id_XNDE4NDA5MzEwNA==.html

https://v.youku.com/v_show/id_XNDE4NDA5MTgxM ...

多谢超哥,忘记把链接附上了

作者: fbhsy    时间: 2019-5-20 09:18
陈平安 发表于 2019-5-17 21:46
顶顶顶,不过这样的运算是不是有点大呢?

仔细看下,有说避免浮点运算方法的

作者: fbhsy    时间: 2019-5-20 09:19
小白刘 发表于 2019-5-18 21:21
问一个很基础的问题,每一个像素点的灰度值是uint8类型的数据,作差比和如何实现差以小数的类型计算啊?

又一个看帖不仔细的,有说避免浮点运算方法的

作者: fbhsy    时间: 2019-5-20 10:29
前面有车友在问计算量的问题,文中有讲一个简单的放大办法避免浮点运算,看帖不仔细的小伙伴,该打。
对于减少计算量其实还可以进一步优化,目前采用将差使用乘法放大一百倍,其实也可以通过左移7位放大128倍,这样比使用乘法指令更快一点。

作者: 杨飞亮    时间: 2019-5-22 23:22
逐飞哥,我发现用差比和计算特别费时间,一副图像处理下来要几十毫秒。可不可以直接做差比较大小来判断边界呢?
作者: iceiceicebear    时间: 2019-7-13 08:52
阳光算法,是对每一个像素点的分析么
作者: 姜样子    时间: 2019-9-29 19:19
视频点不开,可以分享一下网址链接吗?学习一下!
作者: wx_eRpRFy80    时间: 2020-6-26 20:17
emmm学习一下
作者: pwm8421    时间: 2021-4-17 13:36
不支持flash后视频看不了怎么办

作者: fbhsy    时间: 2021-4-19 19:28
pwm8421 发表于 2021-4-17 13:36
不支持flash后视频看不了怎么办

HTML5






欢迎光临 亿加合和智能车制作 (http://www.znczz.com/) Powered by Discuz! X3.2