由于参加飞思卡尔智能车比赛,铺赛道变成了一个重要的环节。而此次铺赛道用了过去留下的赛道进行拼接,导致赛道的长度不好计算,因此,博主与小伙伴想了一些办法估算长度,下面介绍Matlab图像矫正估算赛道长度的方法。
首先由于赛道过长的原因,无法获得整个赛道的图,俯视图则更不为可能。因此,本次方法为采集两张图片进行分别处理计算再相加。图片如下图所示。代码在文末链接,供参考改进。
接着我们截取我们需要的部分(以下以一边赛道为例)。
1.然后我们取该赛道的灰度值
2.接着再进行图像的矫正
3.进行初次的去噪(补充横线的白点)
4.对全黑的矩阵用双线法进行补充。(此处为关键,也可用最近邻插值法,由于博主在此处的算法较为粗略,因此算法复杂度高,且处理效果一般,改进空间较大)
5.对改图进行二值化
6.观察图像,再次去噪
7.最终效果图(该图左边反光较大,可再次进行处理)
PS:下图为用PS矫正后的图像(效果更好)。
用同样的方法可以得出另一半赛道的图片。
得出了二值化的矩阵之后,可利用面积法算出赛道的长度。首先计算出所有白点的个数。由于赛道的宽度是已知的(去掉两边的路肩共40cm),于是可以取一小段直道取其行的平均值,就可以算出赛道的宽度共占多少个像素点,也就可以算出一个像素点占多大的长度,再用总像素点除以每行所占像素点再乘以每个像素点的长度,即可大致得出赛道长度(由于再某些地方(十字和环岛)白像素点重叠了,因此最后再加上这些值即为赛道总长度。
用改方法算出的赛道长度大约为55米左右,用PS矫正后的图片则算出57米左右,而用车跑圈,利用编码器计数则算出56米左右。可见该方法还是存在一定的可行性的。
clear clc
point = 1.5;
point_long = 5;
value = 0.38 * 255;%初次去噪阈值
value2 = 0.45;%二次去噪阈值
%%%%%%%%%%%%%%%%读图%%%%%%%%%%%%%%%%
img= imread('2222.jpg');
img = rgb2gray(img);%求灰度值
imshow(img);
[left,down] = size(img);%读取图像大小
left1 = 800;%定义新矩阵长度
down1 = ceil((down / 2) * point * 2);%定义矩阵长度
img2 = uint8(zeros(left1,down1));%创建全黑矩阵
flag = down / 2;
flag2 = down1 / 2;
left_last = 1;
left_ans = 1;
%%%%%%%%%%%%%%%%图像透视变换%%%%%%%%%%%%%%%%
for n = 1:left
point_left = ((left - n) * ((point - 1) / (left - 1))) + 1;
if n == 1
else
dis_bet = (point_long / (left - 1)) * (left - n) * 1 + 1;
left_ans = round(left_last + dis_bet);
left_last = left_ans;
end
for m = (down/2) : down
down_flag = (m - flag) * point_left + flag2;
down_ans = round(down_flag);
img2(left_ans,down_ans) = img(n,m);
end
for m = 1 : (down/2)
down_flag = flag2 - (flag - m) * point_left;
down_ans = round(down_flag);
img2(left_ans,down_ans) = img(n,m);
end
end
figure
imshow(img2);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%初次去噪,将黑点变全白%%%%%%%%%%%%%%%%
for n = 1:(left_last)
for m = 3:(down1)
if (img2(n,m-2) >= value ) && (img2(n,m-1)
img2(n,m-1) = 255;
end
end
end
figure
imshow(img2);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%双线性填充图像%%%%%%%%%%%%%%%%
for n = 5:(left_last - 2)
for m = 5:(down1 - 2)
if img2(n,m) == 0
sum = img2(n-1,m-1) + img2(n+1,m+1) + img2(n-1,m+1) + img2(n+1,m-1);
point_num = sum / 2;
img2(n,m) = point_num;
end
end
end
figure
imshow(img2);
I2 = im2bw(img2,value2);%二值化
figure
imshow(I2);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%二次去噪1%%%%%%%%%%%%%%%%
for n = 3:(left_last)
for m = 3:(down1)
if (I2(n-2,m) == 0) && (I2(n-1,m) == 1) && (I2(n,m) == 0)
I2(n-1,m) = 0;
end
end
end
figure
subplot(2,2,1);imshow(I2);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%二次去噪2%%%%%%%%%%%%%%%%
for n = 3:(left_last)
for m = 3:(down1)
if (I2(n,m-2) == 0) && (I2(n,m-1) == 1) && (I2(n,m) == 0)
I2(n,m-1) = 0;
end
end
end
subplot(2,2,2);imshow(I2);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%二次去噪3%%%%%%%%%%%%%%%%
for n = 3:(left_last)
for m = 3:(down1)
if (I2(n,m-2) == 1) && (I2(n,m-1) == 0) && (I2(n,m) == 1)
I2(n,m-1) = 1;
end
end
end
subplot(2,2,3);imshow(I2);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%二次去噪4%%%%%%%%%%%%%%%%
for n = 3:(left_last)
for m = 3:(down1)
if (I2(n-2,m) == 0) && (I2(n-1,m) == 1) && (I2(n,m) == 0)
I2(n-1,m) = 0;
end
end
end
subplot(2,2,4);imshow(I2);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
figure
imshow(I2);
white = 0;
for n = 1:left_ans
for m = 1:down1
if I2(n,m) == 1
white = white + 1;
end
end
end
上一篇:飞思卡尔运动小车前方道路识别
下一篇:飞思卡尔微控制与MSCAN ----自学笔记
推荐阅读最新更新时间:2024-11-10 11:06
推荐帖子
- 基于ZigBee传输的粮库监测系统
- 2012TIC2000及MCU大奖赛,本科组,低功耗应用类,西安电子科技大学和基于ZigBee传输的粮库监测系统。欲知更多,请关注我的其他分享~~~基于ZigBee传输的粮库监测系统
- 德州仪器_视频 RF/无线
- [本周话题]预测今年控制类会出什么样的题目呢?有福利!
- 控制类赛题从来都是电赛必有的一类。这几年控制类赛题不断变化。今年会出现什么新的技术?AI会不会出现?大家可以开开脑洞。万一猜中了呢!回帖都送3芯币!要是有人猜中了,小管送100芯币红包预测今年控制类会出什么样的题目呢?有福利!百分百有无人机控制的题目AI范围很广呀,智能肯定是有的。神经网络或者类似于siri那些可能还是比较低的,工作量太大了今年机器人控制可能会有 专业呀,你备赛进展如何啦?小车图像识别无人机已经属于一个大方向了智能定位相关13
- 高进 电子竞赛
- 请教这个三极管上拉电阻的作用
- 图中三极管做开关管使用,驱动蜂鸣器,但图中的R41的作用查资料说是上拉作用,给三级管提供一个确定电平,在这里有一个疑问,VCC会一直提供一个高电平导通三级管,三级管不是一直处于饱和状态吗?怎么进入截止状态啊。。。请教这个三极管上拉电阻的作用那边是做一个高电平补偿吧。 如果mcu给出的信号不确定,那么会一直输出高电平,蜂鸣器会一直响 如果mcu给出的信号不确定,那么会一直输出高电平,蜂鸣器会一直响 现在实物就是这个状况吗? 如果是的话这个上拉就可以去掉了,应该没什么影响
- zhandizhandi 模拟电子
- 网通北京试推准IPTV
- 本帖最后由jameswangsynnex于2015-3-319:59编辑网通北京试推准IPTV2006-6-1410小区试点“宽频空间”宽带电视业务,网通称并非网络电视,专家称属于视频点播业务 发展IPTV业务一直是电信运营商和广电部门寻求新业务收入来源的目标。记者昨日从网通获悉,目前北京网通已在京城10个小区试推出“宽频空间”的网络电视(IPTV)业务。但网通表示,该项业务并不是真正意义上的IPTV,只是用户可以通过电视收看网通宽带提供的事前录制好的视频节目。
- ehk 移动便携
- 根据板块一个老贴中整理的 一个读键思路
- https://bbs.eeworld.com.cn/thread-454868-1-1.html这是原帖。这个帖子中提到一种新的扫描按键的算法(或者说思路吧)它虽然很简单,但是,它在获取触发状态的时候有一个很有用的意义:不需要另外清零。对这个帖子。我觉得首先写得有点长,比较罗嗦(呵呵,当然我也有这毛病)其次,其实就这种核心思路而言,并不需要实际硬件的掺和,只会让思路更乱。因为他的核心思路就在那三句代码。 unsignedcharTrg;unsignedcharCo
- 辛昕 编程基础
- 今天调了一天电路,终于在临下班调试成功了,但是原因很挫
- 今天调试了一天电路,本来很简单的工作,焊好板子,接上接口就OK了。结果搞得从电源查起,最终原因却是PCB上的一个小段铜丝断路了。做这块子的厂家,真是垃圾。我宝贵的时间啊。今天调了一天电路,终于在临下班调试成功了,但是原因很挫痛苦啊!原来也碰到过一次是一个过孔没做好那叫一个痛苦啊不过查出来就好了:carnation:毕竟查出来了,我还有没查出来的呢LZ,经验都是一步步积累的,折腾人的恰恰是我们最容易忽略的小事情。乐观了总比查不出来好慢慢来,有的时候过一个晚上
- 安_然 微控制器 MCU
设计资源 培训 开发板 精华推荐
- UB232R、USB Mini-B FT232R 评估板、FTDI 产品系列中的串行开发模块
- L7815C 可调输出稳压器的典型应用(7 至 30 V)
- 基于 Kinetis K22F 的Sub-μA 电流传感器
- DC1977A-A,用于 LTC4121EUD-4.2 VIN = 4.4V 至 40V、400mA 同步降压锂离子电池充电器的演示板
- 使用 ROHM Semiconductor 的 BD9137MUV 的参考设计
- 使用 Analog Devices 的 LT1674 的参考设计
- LT3091HFE 基本可调线性稳压器的典型应用
- 使用 NXP Semiconductors 的 MCF51MM256CLL 的参考设计
- LTC2418、16 通道、24 位 Delta-Sigma ADC 为数据采集提供了小巧、灵活和准确的解决方案
- DECA,基于 10M50DAF484C6GES MAX 10 FPGA 的开发套件