用MATLAB对车辆的统计第三章,对车速的测量,对车速的测量是在前两章的基础上进行补充:
对车速的测量我想到的有两种方法:
方法一:
直接在路上设置两个框,在已知路面的实际距离,和图上车辆经过的图上距离的情况下,简单地利用比例(要更加精确一点的话应该用摄像机的标定,用摄像机的内参外差,在经过一系列的变化,得到实际物体在空间中的位置)来计算车速,再知道车辆经过这两帧的帧数差与每帧之间的时间可以大致估计出车辆的车速。
在同一条车道前后设置两个记录车辆经过的框框与框之间的距离为L,当车辆经过第一个框时记录下记录下图片的帧数n1n_{1} ,当车辆进过第二个框时记录下第二个的帧数 n2n_{2},通过已知两个框实际距离L和帧与帧之间的时间间隔t利用公式:
V=L(n1−n2)×tV=\frac{L}{(n_{1}-n_{2})\times t}
可以大致求出车辆的速度。
这个方法个人认为简单地不能在简单,以致刚开始想也没想就排除了(结果好像让我们用这个方法感觉有点伤)
首先
同一辆车经过两个框的帧差 大约在1到20之间为一个整数 ,V也为二十个速度之一,测的速度较为不准确。
再者:如果遇到车辆的变道如:


图中的这两白色面包车,
甚至是:

在发生前后两个框无法检测到同一辆车时会对后面的车辆的计数产生很大的影响;
解决方法1,将框的距离设置近一些,但测速的范围会下降
解决方法2,设置一个时间,当上框遇到框时,设置当过几帧时没检测到时就放弃这辆车,在后框设置当前框没检测到后框检测到时认为这辆车为变道而放弃;
方法二:
加上跟踪的方法:
步骤一:
往函数中传入要测量到车子进入测量框的帧数和记录车辆框的位置,读入相邻两张图片进行差分,并且二值化,同时声明一个一个数组来保存记录要每一帧中检测车辆质心位置。

function [jiludian,rect,speed]=gengzhong(shizheng,rect)
number=shizheng;
name=strcat('sy',num2str(number),'.jpg');
src1=imread(name);
number=number+1;
name=strcat('sy',num2str(number),'.jpg');
src2=imread(name);
jiludian=zeros(100,2);
k=1;
zhic1=src2-src1;
zhic1=im2bw(zhic1,0.1);

步骤二:
求出测量框内车辆的质心坐标位置:
并将质心坐标保存

function [y,x]=zhixin1(zhic1,rect)
u=0;
v=0;
zuobiaox=0;
zuobiaoy=0;
number=0;
jilux=0;
jiluy=0;
zhongxinx=rect(1)+rect(3)/2;
zhongxiny=rect(2)+rect(4)/2;
for i=zhongxiny-rect(4)/2:zhongxiny+rect(4)/2for j=zhongxinx-rect(3)/2:zhongxinx+rect(3)/2if(j<1920)if(zhic1(i,j)==1)number=number+1;u=(int64(i)+int64(u));v=(int64(j)+int64(v));zuobiaox=zuobiaox+double(zhic1(i,j));zuobiaoy=double(zhic1(i,j))+zuobiaoy;jilux=int64(jilux)+int64(j);jiluy=int64(jiluy)+int64(i);endendend
end
y=int64(u/zuobiaoy);
x=int64(v/zuobiaox);

步骤三:
读入第三张图片并与第二张图片进行差分和二值,并进行质心的查找:
质心的查找我们先对车辆的测量框按照车道的方向进行一定的扩充,大致预测出车在下一帧中的大致位置,进行质心的查找,并记录下第二个质心的坐标点;

number=number+1;
name=strcat('sy',num2str(number),'.jpg');
src1=src2;
src2=imread(name);
zhic2=src2-src1;
zhic2=im2bw(zhic2,0.1);
imshow(zhic2);
[y2,x2]=zhixin2(zhic2,rect);
jiludian(2,1)=y2;
jiludian(2,2)=x2;function [y,x]=zhixin2(zhic1,rect)
u=0;
v=0;
zuobiaox=0;
zuobiaoy=0;
number=0;
jilux=0;
jiluy=0;
zhongxinx=rect(1)+rect(3)/2;
zhongxiny=rect(2)+rect(4)/2;
for i=zhongxiny-rect(4)/2:zhongxiny+rect(4)/2+40for j=zhongxinx-rect(3)/2:zhongxinx+rect(3)/2+30if(j<1920)if(zhic1(i,j)==1)number=number+1;u=(int64(i)+int64(u));v=(int64(j)+int64(v));zuobiaox=zuobiaox+double(zhic1(i,j));zuobiaoy=double(zhic1(i,j))+zuobiaoy;jilux=int64(jilux)+int64(j);jiluy=int64(jiluy)+int64(i);endendend
end
y=int64(u/zuobiaoy);
x=int64(v/zuobiaox);

步骤四:
根据前两个质心的坐标移动搜索质心的框的位置,并在搜索框中搜索出质心的位置,并记录下质心的位置,再根据找到的质心坐标和前一个的质心坐标位置移动搜索框的位置找出下一个质心的位置如此循环。退出条件为最多寻找20帧图片,或车辆的质心坐标y已经到达或大于图上坐标的1016。

for b=number+1:number+40yuandian(1,1)=y1;yuandian(1,2)=x1;yuandian(2,1)=y2;yuandian(2,2)=x2;x1=x2;y1=y2;name=strcat('sy',num2str(b),'.jpg');src1=src2;src3=src2;src2=imread(name);zhic2=src2-src1;zhic2=im2bw(zhic2,0.2);houx=2*yuandian(2,2)-yuandian(1,2);houy=2*yuandian(2,1)-yuandian(1,1);[y2,x2]=zhixin3(zhic2,rect,houy,houx);hold on;[state,result]=draw_rect(src3,[x2-rect(3)/2,y2-rect(4)/2],[rect(3),rect(4)],0);plot(x2,y2,'LineWidth',2,'Color','b'); imshow(result);jiludian(k,1)=y2;jiludian(k,2)=x2;k=k+1;if(y2>1016)break;endpause(0.01);end
function [y,x]=zhixin3(zhic1,rect,houy,houx)
u=0;
v=0;
zuobiaox=0;
zuobiaoy=0;
number=0;
jilux=0;
jiluy=0;for i=houy-rect(4)/2:houy+rect(4)/2for j=houx-rect(3)/2:houx+rect(3)/2if(j<1920&&i<1072&&j>0&&i>0)if(zhic1(i,j)==1)number=number+1;u=(int64(i)+int64(u));v=(int64(j)+int64(v));zuobiaox=zuobiaox+double(zhic1(i,j));zuobiaoy=double(zhic1(i,j))+zuobiaoy;jilux=int64(jilux)+int64(j);jiluy=int64(jiluy)+int64(i);endendend
end
y=int64(u/zuobiaoy);
x=int64(v/zuobiaox)

步骤五:
根据网上的查找得到道路上白虚线为2m,白虚线之间的距离为4m,我们选择如图红框区域长度为10m作为比例尺,从图中测量红框上边点的坐标为490,下边坐标为760

zhengshu=b;
[kaishi,kaiwei]=zhidao_nearest(jiludian,760);
[jieshu,jiewei]=zhidao_nearest(jiludian,460);
speed=((jiewei-kaiwei)/270*10)/((jieshu-kaishi)*0.1);
function [x,y]=zhidao_nearest(A,b)
[Asort,index]=sort(abs(A(:)-b));
y=A(index(1));
x=find(A==y);

对质心的坐标的数组进行监视查找到最接近460,760的帧数与质心坐标,
根据对视频进行图片的分解,得出相邻两帧之间的时间差为0.1s
根据公式:
V=y1−y2n差×t×10270V=\frac{y_{1}-y_{2}}{n_{差}\times{t}}\times {\frac{10}{270}}
其中 y1y_{1}为最接近y=760的坐标值, y2y_{2}为最接近y=490的坐标值,10270\frac{10}{270} 为接近490与接近760的帧数之差,10为实际距离为10m,270为图上距离为270像素,
运行结果:

终结这只是简易版本,完整版可以参考论文
浙江大学的《基于视频的高速公路车速检测和车辆跟踪系统》感觉还是比较详细的介绍地(不过还是推荐用C来实现)

利用MATLAB进行车辆的速度测量相关推荐

  1. 基于Matlab生成车辆传感器惯性测量单元读数(附源码)

    此示例演示如何从安装在地面车辆上的传感器生成惯性测量单元 (IMU) 读数.根据传感器的位置,IMU 加速度会有所不同. 一.创建轨迹 指定车辆的航点轨迹并使用计算车辆姿势. % Sampling r ...

  2. python画车辆轨迹图_如何利用 Python 绘制酷炫的 车辆轨迹 — 速度时空图?三维数据用二维图像呈现...

    说明:本文系交通攻城狮原创文章,如需转载请私信联系,侵权必究. 2020,第 30 期,编程笔记 建议直接阅读精编版:如何利用 Python 绘制酷炫的 车辆轨迹 - 速度时空图?三维数据用二维图像呈 ...

  3. fmcw matlab仿真,干货 | 利用MATLAB实现FMCW雷达的角度估计

    在上一篇文章中,我们已经介绍了,这篇文章将会对目标的角度进行估计. 简单回顾一下前面的文章,对接收得到的差频信号分别在快时间维,慢时间维进行FFT处理,可以获得目标的距离和速度信息,关于目标的角度信息 ...

  4. 幅度调制信号 matlab,《利用MATLAB实现信号的幅度调制与解调.doc

    <利用MATLAB实现信号的幅度调制与解调 课程设计论文 姓名:姜勇 学院:机电与车辆工程学院 专业:电子信息工程2班 学号:1665090208 安徽科技学院 学年第 学期 < > ...

  5. 2020-12-14 Matlab 模糊控制 车辆泊车 案例分享

    Matlab 模糊控制 车辆泊车 案例分享 最近看到了一个知网的文献,研究基于模糊控制的自动泊车,复现了论文, 模糊控制方法参看之前的文章: matlab模糊控制工具箱使用和模糊控制pid实例参考(一 ...

  6. 利用matlab处理点云

    本文主要分享利用matlab点云工具的相关模块来处理点云,并通过点云轮廓对点云体积进行简单的估计测量. 目录 利用matlab处理点云 目录 主要的操作流程图 2具体流程 1 点云的读入和显示 2 点 ...

  7. 坎蒂雷赋权法 matlab,干货 | 利用MATLAB实现FMCW雷达中的常用角度估计方法

    其中在介绍角度估计中,通过对接收差频信号在快慢时间维度的扩展,增加了空域的信息.扩展后的接收差频信号可以表示为 其中k表示接收天线的个数,d为天线间距. 在"干货|利用MATLAB实现FMC ...

  8. C++包扩展_利用 MATLAB Coder 将M代码生成C/C++代码

    利用MATLAB Coder将MATLAB代码生成C/C++代码​mp.weixin.qq.com MATLAB Coder 可以将MATLAB代码生成工程中常用的嵌入式或其他硬件平台的C或者C++代 ...

  9. matlab segy文件,利用matlab实现segy格式数据的读写研究和分析.ppt

    利用matlab实现segy格式数据的读写研究和分析 2.SEGY数据格式 地震数据一般以地震道为单位进行组织,采用SEG-Y文件格式存储.SEG-Y格式是由SEG (Society of Explo ...

  10. 利用matlab点云工具处理点云

    利用matlab处理点云 本文主要分享利用matlab点云工具的相关模块来处理点云,并通过点云轮廓对点云体积进行简单的估计测量. 目录 利用matlab处理点云 目录 主要的操作流程图 2具体流程 1 ...

最新文章

  1. NumPy中可用的聚合函数
  2. JS Range 对象的使用
  3. c# for提升效率的写法
  4. Java连接数据库(3)
  5. python 格式化方法 从其他信息构建字符串
  6. 【机器学习基础】回归相关指标优化​
  7. docker-compose执行报错(selinux所致):write /proc/self/attr/keycreate: permission denied
  8. CentOS安装Chrome
  9. Java——方法重载(overload)(比较两个数据是否相等)
  10. 《Python Cookbook 3rd》笔记(2.3):用Shell通配符匹配字符串
  11. 莫名其妙的解决了MagicDraw中文问题
  12. 3DMine安装教程(附详细图文安装步骤)
  13. 同步助手java_八大手机平台全覆盖 QQ同步助手Java版发布
  14. 一文读懂什么是卡尔曼滤波
  15. 职场人需要的2大礼物
  16. html语言多行注释,html多行注释方法
  17. 输出一个小游戏——三子棋
  18. matlab多元回归分析怎么计算,第11讲_matlab多元回归分析
  19. laravel faker 数据填充
  20. 127.0.0.1 拒绝了我们的连接请求--访问本地IP时显示拒绝访问

热门文章

  1. 【高清视频压制教程】使用MeGUI压制视频教程(以PSP视频为例)(转载)
  2. 面试如何进行自我介绍
  3. TPA6100A2DGKR立体声音频功率放大器
  4. 全球各大主流卫星拍摄到的苏伊士运河货轮画面,看看哪个最清晰
  5. 笔记本计算机图标怎么设置出来,电脑桌面图标隐藏了怎么弄出来
  6. plc是微型计算机,plc控制系统与微型计算机系统有什么区别
  7. PLC控制系统接地要求
  8. 双非上岸北大计算机,双非二战考研上岸北大汇丰经验贴
  9. gocv拆分颜色通道
  10. 掠过和记黄埔IDC机房