关于激光探测器光斑质心算法在FPGA硬件的设计

news2024/9/24 5:24:50

目录

0引言

1CCD采集图像质心算法

2基于FPGA的图像质心算法

3仿真结果与分析

4结论


0引言

在一些姿态检测的实际应用中,需要在被测对象上安装激光探测器[1],利用CCD相机捕捉激光光斑来检测观测对象的实际情况,光斑图像质心坐标的提取是图像处理技术中常见的问题,激光的瞬时和高速性是激光光斑图像的重要特征[2]。为了实时准确地获取激光光斑质心的坐标,相机要求以300帧每秒的速度进行采集。原设备原始应用场景为工业高清相机通过专用CameraLink电缆连接图像采集卡,图像采集卡插入计算机内部,计算机接收图像数据后进行信号处理运算,质心算法的实现在计算机上完成[3]。本文通过对原设备的结构进行优化,将算法部分移植到硬件环境中形成相机控制器,使得摄像机与计算机可以远距离部署,一台计算机可以控制和接收多台相机数据并同时进行信号处理,并且对计算机的配置要求较低,有灵活的扩展性。在质心算法研究方面,将计算机软件实现的算法用硬件描述语言Verilog设计实现,获取激光光斑的实时质心坐标。

1CCD采集图像质心算法

激光探测器形成的激光光斑在CCD表面的光强分布可以看作以中心对称的高斯分布[4],所以在激光光斑质心坐标算法中,可以用光斑光亮的最强点作为激光光斑的质心坐标,对于CCD数字视频信号来说就是灰度值最大的那一点的坐标值[5]。具体算法如下:

第一步:噪声采集。假设图像x方向与y方向分别有m与n个像素点。在无激光照射CCD情况下采集N幅图(N理论上越多越好,实际N值手动可设即可),databuffa[m][n]为第a幅图的数据。对N幅图进行求均方根,即可得到噪声数据。

99e5d4a2aa0cd65d219bfef2e41d5ed6.gif

第二步:去噪声。此时开始进行激光光斑的采集,CCD所采集的每幅图数据为h[m][n],进行去噪声处理,将CCD所采集的数据与采集算好的噪声相减。如果低于最小灰度值0则为0;如果高于最大灰度值255则为255。

287899d334f90b5952dc91eae25aa5ee.gif

第三步:去一定比例的最大灰度值,比例系数为p。此时经过去噪声的图像数据h[i][j]还具有一定的干扰,采用阈值去掉干扰,阈值为最大灰度值的比例数。首先寻找图像的最大灰度值,然后进行去掉阈值。

1d5185546263519753e50eb0456adb48.gif

第四步:进行质心计算。CCD所采集图像质心即图像灰度的重心,i与j分别为两个方向的坐标,g[i][j]为像素点(i,j)坐标的灰度值,则图像质心位置坐标为:

7ab4dbfe3237be02c4a654ba5f920ae1.gif

式中x、y即为图像质心的坐标。

2基于FPGA的图像质心算法

FPGA的特点是数字逻辑的思维与并行的处理方式。FPGA的并行处理能力使得它有着更高的处理速度,让人们更青睐于这种可编程逻辑方式去实现所需要的算法。本文的目的是将CCD采集图像质心算法用可编程逻辑Verilog语言去实现所需算法,为了实现上述算法,需要对算法进行必要的改造。

第一步:噪声均方根的采集实现。对于数字逻辑中只有0和1之分,灰度图像的颜色由8位二进制来表示,故灰度颜色由0~255这256个数据来表示。故这里不需对根号内数据进行开方,而是直接根据根号下的数据即可算出均方根的结果,因为这里的结果都是四舍五入后的整数。

第二步:去噪声的实现。此算法可直接用可编程逻辑实现,与原算法一致。

第三步:去一定比例的最大灰度值中比例数p是一个0~1之间的小数,在实际应用中小数可以通过浮点数的方法来表示,浮点数的表示有32位与64位的表示方法。所以本文的设计方法是将0~1的数与0~100的数字一一对应,在后续再转换缩回比例,求出数据。例如0.16对应整数16,这样只需要7位二进制数即可表示,节省了寄存器占用的空间,利于算法的实现。

第四步:质心计算的实现。第三步中的质心计算的算法方式由于求矩阵过程复杂,运算量大,不适用于可编程逻辑方式,为此将此算法进行了转换。一种基于函数转换的快速搜素质心算法,利用目标质心与目标上所有各点间距离之和值最小的原理,快速求出质心。此算法适用于灰度图像,对灰度图像求质心具有广泛的用途与实际的意义。应用此算法后,n个乘法转换成了1个乘法,便于Verilog语言去实现。

3仿真结果与分析

将改进后的算法应用到可编程逻辑Verilog语言中后,实现了光斑质心算法的功能并能够实时求出质心的坐标。通过上位机选择需要算出的N幅图得到的噪声系数,将求出的噪声系数存入RAM中,当激光照射后读出RAM中存储的噪声系数值即可。本设计包括噪声系数模块,去噪声模块与质心坐标算法3个模块。图1为光斑质心算法的总体架构图。

872f34d7257d4de5b96dfb2edc40cb76.gif

噪声系数模块:初始化后检测ready信号,ready拉高表示外部输入已经准备好可以接收数据,可保证在一帧图像数据内的连续性。在准备好后等待pulse_in信号的到来,pulse_in为脉冲信号,当接收到此信号时表示通知模块需要计算噪声系数。pixel_num为像素值选择,frame_num为帧数选择,范围是0~131072。data_in为输入的图像数据8位灰度值,noise_req为噪声系数输入数据请求信号,当此信号拉高后,输入信号data_in在下一拍输入数据。noise_done为噪声系数计算完成信号,当计算结束并没有接收到重新计算信号pulse_in时,noise_done一直拉高来表示噪声系数模块处理完成。在noise_done高电平期间,输入来自去噪声模块的地址信号addr_in,即可读出RAN中对应地址的数据databuffnoise。

去噪声模块:在noise_done高电平期间可启动去噪声模块。read_en为脉冲信号,一个脉冲可接收一帧图像数据。proportion信号是上位机发来的比例系数,范围在0~100之间,表示0~1之间的数。在接收到read_en脉冲信号后,发出数据请求信号data_req,data_req拉高后输入dec_in数据信号,由于需要求出一帧图像的最大图像数据,所以会有一帧图像的延迟,当输出图像数据有效data_valid信号拉高时,输出去噪后有效的pixel_data数据,在data_valid信号拉高后输出的pixel_data数据会传到质心算法模块中进行计算。图2为去噪模块仿真结果。

e19bf46db89dba1906cefde89c2ceff7.gif

质心坐标算法模块:输入的request_in信号是去噪声模块的输出信号data_valid,在request_in信号有效时,输入的数据gravity_in信号有效,与去噪模块的输出数据信号pixel_data线性连接。在信号请求输出req_out高脉冲同时输出质心坐标xy_pos信号,输出的x、y坐标都是10位二进制数表示,根据需求以32位xy_pos信号输出,高25~16位填充x坐标,9~0位填充y坐标,其他填充0。通过各个模块的验证可看出算法符合基本要求,最后得到如图3所示的3个模块整体的顶层模块仿真结果图。

1d5154f5ce838766ac360ddad025031e.gif

将此算法用C++++在VS2012上运行并验证质心坐标是否正确,输入相同输入数据,验证结果如图4所示。

82eaf84b9de04b27638a447d0034086f.gif

通过分析和仿真验证了设计的正确性,CCD图像质心算法被很好地应用到可编程逻辑语言中,FPGA的高速并行优点使得算法可以达到流水线高速运行,由于相机的图像采集速度可达到每秒300帧,为了符合这样的高速采集能力,本文采用了流水线算法可实时算出质心坐标供上位机采集和使用。

4结论

本文所设计的光斑质心定位算法是基于实际应用的激光探测器相机控制器的算法实现部分,该算法的实现使得摄像机与计算机可以远距离部署,将复杂算法的运算量交给控制器去处理,减轻了计算机的工作量去处理更重要的事情。该方法适用于有一定存储空间的FPGA芯片去实现,注重高速与实时性,对工业高清相机这种高精度要求的应用有一定的实用价值。

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

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

相关文章

机器学习——SVM(支持向量机)

0、前言: SVM应用:主要针对小样本数据进行学习、分类和回归(预测),能解决神经网络不能解决的过学习问题,有很好的泛化能力。(注意:SVM算法的数学原理涉及知识点比较多,所…

grep多行匹配以及一些问题

测试文本, a.txt 123 456789这里是简单的文本 使用grep多行匹配 grep -Pzo "123\s456" a.txt-P: 启用Perl正则表达式模式。 -z: 允许多行匹配,即使匹配跨越了换行符的行。 -o: 只输出匹配的部分。 这里能匹配到 123 456但是有的时候也匹配不到&#…

表演复读生的王炸班型——薪火表演·独角兽班开课介绍

我们拥有同样的目标——大院名校 薪火独角兽班计划 最懂复读生的地方 不想上大课,只想1对1? 录制费用高,不愿增加父母经济压力? 稿件烂大街? 专业没人管? 这些都不是问题! 一站式解决复读生难题 选薪火独角兽班! ---------ifire.ar…

利用前端和后端技术,海豚物流实现高效物流管理系统

随着信息技术的快速发展,前端和后端技术在物流行业中扮演着越来越重要的角色。海豚物流充分利用前后端技术,实现了物流管理的无缝协作,大大提升了运输效率和客户满意度。 前端技术在物流管理中扮演着用户界面的角色。通过优化用户界面&#x…

【产品运营】你真的懂B端大客户吗?来试试这8个棘手的需求问题

在与B端客户交流的过程中,有很多需要注意的问题,在产品的不同风格阶段,客户都会提出很多需求,而对于客户的需求产品经理需要有判断以及解决的能力; 本文主要讨论做需求时的棘手问题,在职责上与项目经理有些…

crypto++下载、安装(VS2017)及加解密使用

crpto 下载按个人喜好下载,我使用了图中框选的8.8.0 Release.解压 安装打开修改以适应本机配置整理至标准库 调用加解密使用 Crypto(也称为Crypto Library或Crypto STL)是一个C密码学库,它提供了各种密码学算法和安全编程工具&…

20230917后台面经总结

1.ping底层原理 Ping 是 ICMP 的一个重要应用,主要用来测试两台主机之间的连通性。Ping 的原理是通过向目的主机发送 ICMP Echo 请求报文,目的主机收到之后会发送 Echo 回答报文。Ping 会根据时间和成功响应的次数估算出数据包往返时间以及丢包率。 基…

vue项目 高德地图搜索带关键字效果demo(整理)

<!-- 高德地图引入 --> <script type"text/javascript">window._AMapSecurityConfig {securityJsCode: be00dfb4bcd4b18dd7760486c40aa1ed, //秘钥} </script> <!-- <script type"text/javascript" src"./qrcode.js"&g…

如何解决 503 Service Temporarily Unavailable?

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f405;&#x1f43e;猫头虎建议程序员必备技术栈一览表&#x1f4d6;&#xff1a; &#x1f6e0;️ 全栈技术 Full Stack: &#x1f4da…

Prompt-To-Prompt——仅通过文本进行图像编辑

文章目录 1.摘要2.算法2.1 Cross-attention in text-conditioned Diffusion Models2.2 Controlling the Cross-attentionWord SwapAdding a New PhraseAttention Re–weighting 3.应用Text-Only Localized EditingGlobal editingFader Control using Attention Re-weightingRea…

【QT5-解决不同分辨率屏幕-进行匹配大小-适应屏幕大小-基础样例】

【QT5-解决不同分辨率屏幕-进行匹配大小-适应屏幕大小】 1、前言2、实验环境3-1、问题说明-屏幕视频3-2、解决方式-个人总结解决思路&#xff1a;我们在软件启动的时候&#xff0c;先获取屏幕大小&#xff0c;然后根据长宽&#xff0c;按照一定比例&#xff0c;重新设置大小。并…

如何用思维导图做备考计划

大学除了上课&#xff0c;还有很多事情需要我们去做&#xff0c;比如说期末考试、考证等。思维导图作为一种高效的思维工具&#xff0c;可以帮助我们整理和规划备考内容。今天我们就将探讨如何用思维导图做备考计划&#xff0c;并提供一些实用的建议。甘特图&#xff08;Gantt …

flutter开发实战-自定义长按TextField输入框剪切、复制、选择全部菜单AdaptiveTextSelectionToolba样式UI效果

flutter开发实战-自定义长按TextField输入框剪切、复制、选择全部菜单样式UI效果 在开发过程中&#xff0c;需要长按TextField输入框cut、copy设置为中文“复制、粘贴”&#xff0c;我首先查看了TextField中的源码&#xff0c;看到了ToolbarOptions、AdaptiveTextSelectionToo…

工作5年,没用过分布式锁,正常吗?

公司想招聘一个5年开发经验的后端程序员&#xff0c;看了很多简历&#xff0c;发现一个共性问题&#xff0c;普遍都没用过分布式锁&#xff0c;这正常吗&#xff1f; 下面是已经入职的一位小伙伴的个人技能包&#xff0c;乍一看&#xff0c;还行&#xff0c;也没用过分布式锁。…

基于Java的新能源充电系统的设计与实现(亮点:完整合理的充电流程,举报反馈机制、余额充值、在线支付、在线聊天)

新能源充电系统 一、前言二、我的优势2.1 自己的网站2.2 自己的小程序&#xff08;小蔡coding&#xff09;2.3 有保障的售后2.4 福利 三、开发环境与技术3.1 MySQL数据库3.2 Vue前端技术3.3 Spring Boot框架3.4 微信小程序 四、功能设计4.1 主要功能描述 五、系统实现5.1 完整充…

【Python】自动化办公之路:word自动化实战宝典!

文章目录 前言一、环境安装二、使用步骤1.引入库2.读入数据 Python-docx 编辑已存在文档win32com 将 doc 转为 docxwin32com 操作 word总结 前言 使用Python操作word大部分情况都是写操作&#xff0c;也有少许情况会用到读操作&#xff0c;在本次教程中都会进行讲解&#xff0…

GitHub无法访问的解决方法

每次刚装完系统我们访问GitHub就会出现无法访问的情况&#xff0c;此时只需要修改host文件将可访问的dns解析地址写入进去即可。 查询DNS 使用dns监测查询工具 https://tool.chinaz.com/dns https://dnsdaquan.com/ 输入无法访问的IP github.com 进行检测 查询到可访问的i…

HarmonyOS应用开发Web组件基本属性应用和事件

一、Web组件概述 Web组件用于在应用程序中显示Web页面内容&#xff0c;为开发者提供页面加载、页面交互、页面调试等能力。 页面加载&#xff1a;Web组件提供基础的前端页面加载的能力&#xff0c;包括加载网络页面、本地页面、Html格式文本数据。页面交互&#xff1a;Web组件提…

【C刷题训练营】第四讲(打好基础很重要)

前言: 大家好&#xff0c;这是c语言刷题训练营的第四讲&#xff0c;打好基础便于对c语言语法与算法思维的提高&#xff0c;感谢你的来访与支持&#xff01; &#x1f4a5;&#x1f388;个人主页:​​​​​​Dream_Chaser&#xff5e; &#x1f388;&#x1f4a5; ✨✨刷题专栏…

QT工具MaintenanceTool.exe如何管理组件(解决“要继续此操作,至少需要一个有效且已启用的储存库”问题)

试了好多个博客的链接&#xff0c;终于是试了一个&#xff1a; http://mirrors.ustc.edu.cn/qtproject/online/qtsdkrepository/windows_x86/root/qt/ 哪里放这个链接就不说了&#xff0c;可以自己去找其他博客&#xff0c;我用其他博客的链接不行&#xff0c;但这个链接试用。…