2021年全国大学生电子设计竞赛D题——基于互联网的摄像测量系统(一)

01 D题实现效果演示

视频参考微信原文:2021年全国大学生电子设计竞赛D题——基于互联网的摄像测量系统(一)

02 D题任务要求

(D题原文件参见本文附录)

设计并制作一个图中所示的基于互联网的摄像测量系统。图中边长为1米的正方形区域三个顶点分别为A、B和O。系统有两个独立的摄像节点分别放置在A和B,两个摄像节点拍摄尽量沿AO、BO方向正交,并通过一个百兆/千兆以太网交换机与连接在该交换机的一个终端节点实现网络互联。交换机必须为互联网通用交换机,使用的网口可以任意指定。

在O点上方悬挂一个用柔性透明细线吊起的激光笔,透明细线长度为 l,激光笔常亮向下指示,静止下垂时的指示光点与O点重合。

拉动激光笔偏离静止点的距离小于10cm,松开后激光笔自由摆动。应保证激光笔指示光点的轨迹经O点往复直线运动,轨迹与OA边的夹角为 θ。

利用该系统实现对长度 l 角度 θ 的测量。

基本要求分析

  1. 设计并制作两个独立的摄像节点。每个节点由一个摄像头和相应的电路组成,两个摄像节点均可以拍摄到激光笔的运动视频并显示。

  2. 设计并制作终端节点。在终端显示器上可以分别和同时显示两个摄像节点拍摄的实时视频。在视频中可以识别出激光笔,并在视频中用红色方框实时框住激光笔轮廓。

  3. 测量系统在终端节点设置一键启动。从激光笔摆动开始计时,测量系统通过对激光笔周期摆动视频信号的处理,自动测量长度 l。(50cm ≤ l ≤ 150cm,θ角度自定)  测量完成时,终端声光提示并显示长度 l。要求测量误差绝对值小于 2cm,测量时间小于 30 秒。

题目发挥部分

  1. 一键启动后,测量系统通过两个独立摄像节点的网络协同工作。当 θ = 0° 和 θ = 90° 时,能自动测量长度 l( 50cm ≤ l ≤ 150cm )。要求测量误差绝对值小于 2cm,测量时间小于 30 秒。

  2. 一键启动后,可以测量 θ ( 0° ≤ θ ≤ 90° ) 。要求测量误差绝对值小于 5°,测量时间小于 30 秒。

  3. 其他。

03 硬件方案选择

摄像节点由一个摄像头和相应的电路组成,需要拍摄到激光笔的运动视频并显示。可以使用下面两种方案:

方案一:USB摄像头 + 树莓派

树莓派调用OpenCV库从USB摄像头获取实时图像并显示在HDMI显示器上,然后调用OpenCV库中的图像处理算法识别激光笔,然后在原图像上用红框框住激光笔轮廓,再将激光笔的位置信息和图像通过网络传输到终端节点。

方案二:D8M摄像头 + DE10-Nano开发板

D8M摄像头可通过GPIO接口连接到DE10-Nano开发板上,使用Terasic Camera IP从D8M获取实时视频流数据并显示在HDMI显示器上,再对视频流数据进行处理识别激光笔,然后在原图像上用红框框住激光笔轮廓,再将激光笔的位置信息和图像通过网络传输到终端节点。

方案比较:

方案一采用USB摄像头可以直接使用OpenCV库进行操作,代码简单,但是只能用CPU进行处理,处理效率不够高。

方案二采用GPIO接口的D8M摄像头,直接与DE10-Nano开发板连接,可通过FPGA进行算法加速,CPU只需要读取FPGA端处理好的结果图像再进行简单的计算,可提高处理效率。

综上所述,为了提高处理效率、缩短测量时间,选择方案二作为摄像节点方案。其系统框图如下:

04 检测方案选择

运动目标的检测一般有三种方法:背景差分法、帧间差分法和光流法。

背景差分法

背景差分法是采用图像序列中的当前帧和背景参考模型比较来检测运动物体的一种方法,其性能依赖于所使用的背景建模技术,背景图像的建模和模拟的准确程度,直接影响到检测的效果。

帧间差分法

帧间差分法通过对视频或图像序列中相邻两帧做差分运算来获得运动目标的轮廓,可很好地适用于存在多个运动目标和摄像机移动的情况。

当场景中出现物体运动时,帧与帧之间会出现较为明显的差别,两帧相减,得到两帧图像亮度差的绝对值,判断它是否大于阈值来分析视频或图像序列的运动特性,确定图像序列中有无物体运动。

光流法

光流是关于视域中的物体运动检测中的概念,用来描述相对于观察者的运动所造成的观测目标、表面或边缘的运动。光流法的主要任务就是计算光流场,即在适当的平滑性约束条件下,根据图像序列的时空梯度估算

运动场,通过分析运动场的变化对运动目标和场景进行检测与分割。

方案比较:

背景差分法检测运动目标速度快,检测准确,但对于背景的建模和模拟却比较困难,而要提升准确度就会导致算法的计算量增大,实时性不够好;

帧间差分法对包含运动目标的场景有着比较强的鲁棒性,且运算速度快,实时性好,但该方法一般不能完全检测出运动物体的所有像素点,常常在检测到的运动物体内部出现“空洞”现象,因此仅适用于简单的运动物体检测的情况;

光流法不需要预先知道场景的任何信息,就能够检测到运动对象,可处理背景运动的情况,但噪声、多光源、阴影和遮挡等因素会对光流场分布的计算结果造成严重影响,而且光流法计算复杂,也很难实现实时处理。

综上所述,为了能够实时识别到激光笔,且激光笔内部少量像素点的缺失不会影响检测结果,选择帧间差分法作为运动目标检测算法。

05 长度L的理论计算

单摆的定义

将无重细杆或不可伸长的细柔绳一端悬于重力场内一定点,另一端固定一个重小球,就构成单摆。

小角近似简谐运动(一般认为10°以下可以这样近似),单摆能够往复摆动,在非常小的振幅/角度下,单摆做简谐运动,简谐运动方程式如下所示:

其中,A、 φ 为任意常数,由初值条件给定;而T等于:

其中 l 为无重细杆或细柔绳的长度, g 为当地的重力加速度。

如果已知简谐运动的周期 T,那么就可以计算得到无重细杆或细柔绳的长度 l:

那怎样得到简谐运动的周期T呢?这里采用拟合cos函数。

06 拟合cos函数

获取数据集

采用拟合cos函数的第一步,就是要获取数据集。

以摄像节点A为例进行介绍,这是摄像节点A拍摄到的画面,将左上角作为坐标原点,通过目标检测算法识别激光笔的位置,然后采集在t时刻对应的激光笔轮廓左上角顶点的坐标值x,y以及长和宽,再计算得到中心点的横坐标xt,将中心点的坐标作为激光笔的坐标。

这样就得到了拟合cos函数所需的一组数据,通过测量不同时刻对应的激光笔的位移xt就可以得到一组数据集。

最小二乘法

最小二乘法是解决曲线拟合问题最常用的方法,通过最小化误差的平方和来寻找数据的最佳函数匹配。

余弦曲线表示为:

其中包含4个参数,分别是振幅(A)、周期(T)、初相(φ)和偏距(k)。

设(x, y)是一对观测量,且 x和y满足理论函数:y=f(x, ω),其中ω为待定参数。

为了寻找函数f(x,ω)中参数ω的最优估计值,对于给定m组观测数据(x_i,y_i)(i=1, 2,⋯,m),求解目标函数

L取最小值时对应的参数ω为最优估计值。

07 角度 θ 的理论计算

接下来进行角度θ的理论计算,这是测量系统的俯视图:

图中红色实线CD是激光笔的运动轨迹,其与OA边的夹角为θ,过点C画OA的平行线,过点D画OB的平行线,交于点E,CE的长度为Xb,DE的长度为Xa。这样就可以得到摄像节点A处拍摄到的激光笔运动轨迹的横向分量DE的运动方程式和分量CE的运动方程式为:

又由于每次拉动激光笔后,角度θ是一个固定值,sinθ和cosθ为常量,所以横向分量和竖直分量也都是简谐运动,而DE的长度为Xa,振幅为Xa/2,所以Xa和Xb可以表示为:

我们将这两个式子相比,可以得到tanθ=Xa/Xb,则由反三角函数的正切公式可以计算得到:

08 附录

1. D题源码:socfpga demo: 分享socfpga 相关 demo - Gitee.com

2. Linux image文件:联系微信TerasicNicole

3. D题原始文件

END

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/824836.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Python】异常处理结构

文章目录 1.python异常2.try_except异常处理结构3.try... 多个except异常处理4.try_except_else异常处理结构5.try_except_finally异常处理结构6.常见报错类型 在运行代码时,总是遇到各种异常,且出现异常时,脚本就会自动的的停止运行&#xf…

时序分析基本知识点

【FPGA开发/IC开发之时序约束最全面的归纳总结】时序路径基本概念及时序约束分析方法_时序约束指令-CSDN博客

就业班 第三阶段(nginx) 2401--4.17 day1 nginx1

负载均衡集群 1、集群是什么? 1 集群(cluster)技术是一种较新的技术,通过集群技术,可以在付出较低成本的情况下获得在性能、可靠性、灵活性方面的相对较高的收益,其任务调度则是集群系统中的核心技术。 …

频率分辨率

频率分辨率是描述频谱分析能力的一个重要指标。它指的是频谱分析仪在频率轴上的最小可区分的频率间隔。 更具体地说: 频率分辨率描述了频谱分析中能够分辨出的最小频率差。例如,如果频率分辨率为1 Hz,就意味着该分析仪能够将相隔1 Hz的两个频率成分区分开来。 频率分辨率受到…

FinalShell 远程连接 Linux(Ubuntu)系统

Linux 系列教程: VMware 安装配置 Ubuntu(最新版、超详细)FinalShell 远程连接 Linux(Ubuntu)系统Ubuntu 系统安装 VS Code 并配置 C 环境 ➡️➡️➡️提出一个问题:为什么使用 FinalShell 连接&#xff0…

Unity Android 2022 Release-Notes

🌈Unity Android 2022 Release-Notes 本文信息收集来自自动搜集工具👈 版本更新内容2022.3.17Android: Added Auto Rotation behavior to the Orientation section.(UUM-44021)2022.3.16Android: Fixed ad banner disappearance after suspend/resume.(…

AI时代,智能体成下一个爆点

随着科技的飞速发展,人工智能(AI)已经从科幻小说中的概念变成了现实生活中的重要角色。AI大模型技术,作为人工智能领域的一项重要突破,如今已不再是一个新鲜词汇,而是正在深刻改变着我们的生活方式和工作模…

初识ansible服务及ansible主机清单配置

目录 1、什么是自动化批量管理 2、自动化工具ansible架构 3、ansible服务专用术语对照表 4、设置主机清单(inventory) 4.1实验环境准备 4.2配置主机清单 4.2.1分组基本格式 4.2.2指定用户名,密码。端口 4.2.3子组 4.3查看 4.3.1看…

LeetCode———144—— 二叉树的前序遍历

目录 ​编辑 1.题目 2.解答 1.首先计算二叉树的节点个数: 2.以先序遍历(Preorder Traversal)的方式遍历一个二叉树,并将遍历到的节点的值存储在一个整数数组中 3.最终代码 1.题目 . - 力扣(LeetCode) 给…

java中如何将各种日期时间转换成LocalDateTime,(时间转换)

//假如是时间戳 "createTimeLong": 1679287522749,long createTimeLong Long.parseLong(axl800TestResByExamTO.getCreateTimeLong()); // 将时间戳转换为Instant对象Instant instant Instant.ofEpochMilli(createTimeLong); // 转换为LocalDateTime对象LocalDate…

牛客周赛 Round 39题解

题目讲解:牛客周赛39讲题直播回放_哔哩哔哩_bilibili 题号标题已通过代码通过率我的状态A小红不想做炸鸡块粉丝粉丝题点击查看1978/2610未通过B小红不想做鸽巢原理点击查看1172/8606未通过C小红不想做完全背包(easy)点击查看1261/3574未通过…

软件看门狗:让服务永不宕机

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 缘起 看门狗WatchDog是个硬件领…

双碳目标下基于“遥感+”集成技术的碳储量、碳排放、碳循环、温室气体等多领域监测与模拟

以全球变暖为主要特征的气候变化已成为全球性环境问题,对全球可持续发展带来严峻挑战。2015年多国在《巴黎协定》上明确提出缔约方应尽快实现碳达峰和碳中和目标。2019年第49届 IPCC全会明确增加了基于卫星遥感的排放清单校验方法。随着碳中和目标以及全球碳盘点的现…

Verilog中#的2种作用

在Verilog中,#有2种作用。 第一种作用是指定时间延时,如#10,表示延时10个时间单位; 第二种作用在模块定义时指定常量型参数的默认值,在模块实例化时传递常量型参数的指定值。 module uart_tx //采用#()形式定义常量型…

[stm32]DMA使用

自动重装和M2M(软件trig)不能一起使用,否则会停不下来 void MyDMA_Init(uint32_t AddrA,uint32_t AddrB,uint16_t Size){RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);DMA_InitTypeDef DMA_InitStructure;DMA_InitStructure.DMA_PeripheralBaseAddrAddrA;//外…

爬楼梯(c)

文章目录 描述分析思路关键代码运行结果 描述 给定一个整数数组 cost ,其中 cost[i]是从楼梯第i 个台阶向上爬需要支付的费用,下标从0开始。-旦你支付此费用,即可选择向上爬一个或者两个台阶 要求:请你计算并返回达到楼梯顶部的…

在使用lombok的@Slf4j时,启动项目报错。java:找不到符号

问题背景: 在使用lombok的Slf4j时,启动项目报错。 java:找不到符号符号: 方法info(java.lang.String,java.lang.String)位置: 类型为org.apache.ibatis.logging.Log的变量 log解决方式: 在如图所示位置加…

mysql的常用配置

1. 设置MySQL字段名不区分大小写 [mysqld] lower_case_table_names1 2. GROUP BY 字段不需要在 SELECT 查询中出现 在 SQL 中,通常要求在 SELECT 语句中的 GROUP BY 字段也必须出现在 SELECT 字段列表中,这是为了确保查询的一致性,并且遵循…

Rust开发笔记 | IDE选择与Rust工具链配置指南

在当代编程语言中,Rust以其独特的内存管理和类型系统,提供了无与伦比的安全性和性能,尤其在系统编程领域表现突出。选择合适的集成开发环境(IDE)和配置正确的工具链,对于提升Rust开发效率至关重要。本文将为…

在线预约家政服务小程序上门服务源码系统 带完整的安装代码包以及搭建教程

随着互联网的快速发展,家政服务行业也逐渐向线上化、智能化转型。为了满足广大用户的需求,罗峰给大家分享一款在线预约家政服务小程序上门服务源码系统。该系统不仅功能完善,而且操作简单,是您打造高效、便捷的家政服务平台的首选…