关于激光探测器光斑质心算法在FPGA硬件的设计
目录
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幅图进行求均方根,即可得到噪声数据。
第二步:去噪声。此时开始进行激光光斑的采集,CCD所采集的每幅图数据为h[m][n],进行去噪声处理,将CCD所采集的数据与采集算好的噪声相减。如果低于最小灰度值0则为0;如果高于最大灰度值255则为255。
第三步:去一定比例的最大灰度值,比例系数为p。此时经过去噪声的图像数据h[i][j]还具有一定的干扰,采用阈值去掉干扰,阈值为最大灰度值的比例数。首先寻找图像的最大灰度值,然后进行去掉阈值。
第四步:进行质心计算。CCD所采集图像质心即图像灰度的重心,i与j分别为两个方向的坐标,g[i][j]为像素点(i,j)坐标的灰度值,则图像质心位置坐标为:
式中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为光斑质心算法的总体架构图。
噪声系数模块:初始化后检测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为去噪模块仿真结果。
质心坐标算法模块:输入的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个模块整体的顶层模块仿真结果图。
将此算法用C++++在VS2012上运行并验证质心坐标是否正确,输入相同输入数据,验证结果如图4所示。
通过分析和仿真验证了设计的正确性,CCD图像质心算法被很好地应用到可编程逻辑语言中,FPGA的高速并行优点使得算法可以达到流水线高速运行,由于相机的图像采集速度可达到每秒300帧,为了符合这样的高速采集能力,本文采用了流水线算法可实时算出质心坐标供上位机采集和使用。
4结论
本文所设计的光斑质心定位算法是基于实际应用的激光探测器相机控制器的算法实现部分,该算法的实现使得摄像机与计算机可以远距离部署,将复杂算法的运算量交给控制器去处理,减轻了计算机的工作量去处理更重要的事情。该方法适用于有一定存储空间的FPGA芯片去实现,注重高速与实时性,对工业高清相机这种高精度要求的应用有一定的实用价值。
相关文章:
关于激光探测器光斑质心算法在FPGA硬件的设计
目录 0引言 1CCD采集图像质心算法 2基于FPGA的图像质心算法 3仿真结果与分析 4结论 0引言 在一些姿态检测的实际应用中,需要在被测对象上安装激光探测器[1],利用CCD相机捕捉激光光斑来检测观测对象的实际情况,光斑图像质心坐标的提取是图…...
理清SpringBoot CURD处理逻辑、顺序
💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! 理清SpringBoot CURD处理逻辑、顺序 Controller(控制器): 控制器接收来自客户端的请求,并负责处理请求的路由和参数解析…...
缓存读写淘汰算法W-TinyLFU算法
在W-TinyLFU中,每个缓存项都会被赋予一个权重。这个权重可以表示缓存项的大小、使用频率、是否是热数据等因素。每次需要淘汰缓存时,W-TinyLFU会选择小于一定阈值的权重的缓存项进行淘汰,以避免淘汰热数据。 另外,W-TinyLFU也会根…...
C++中的 throw详解
在《C++异常处理》一节中,我们讲到了 C++ 异常处理的流程,具体为: 抛出(Throw)--> 检测(Try) --> 捕获(Catch) 异常必须显式地抛出,才能被检测和捕获到;如果没有显式的抛出,即使有异常也检测不到。在 C++ 中,我们使用 throw 关键字来显式地抛出异常,它的用…...
vue 封装Table组件
基于element-plus UI 框架封装一个table组件 在项目目录下的components新建一个Table.vue <template><section class"wrap"><el-tableref"table":data"tableData" v-loading"loading" style"width: 100%":…...
MySQL主从复制错误
当在MySQL的多线程复制中遇到错误时,你可能会看到上述的错误信息。错误的核心在于从服务器上的工作线程在尝试执行一个特定的事务时遇到了问题。 为了解决这个问题,你可以采取以下步骤: 查看MySQL的错误日志:错误日志可能会提供更…...
Redis群集
目录 1、redis群集三种模式 2、Redis 主从复制 2.1 主从复制的作用 2.2 主从复制流程 2.3 搭建Redis 主从复制 3、Redis 哨兵模式 3.1 哨兵模式的作用 3.2 故障转移机制 3.3 主节点的选举 4、Redis 群集模式 4.1 集群的作用 4.2 Redis集群的数据分片 4.3 搭建Redis…...
Spring AOP以及统一处理
一.Spring AOP 1.什么是Spring AOP AOP(Aspect Oriented Programming):面向切面编程,它是一种思想,它是对某一类事情的集中处理。 2.AOP的作用 想象一个场景,我们在做后台系统时,除了登录…...
vue2markdown转思维导图
官网 http://markmap.js.org 按照官网安装markmap-lib,markmap-view两个依赖外,还需要安装markmap-common 如果报错提示vuePdfNoSss相关问题,需要安装vue-pdf 如果报错can’t import the named export ‘xxx’ from non EcmaScript module,需…...
docker下redis备份文件dump.rdb获取
1.查看镜像 docker ps -a 2.进入redis客户端 docker exec -it redis redis-cli 3.保存备份文件 save 4.查看文件存放位置 CONFIG GET dir 5.将docker中文件拷出 docker cp id或name:容器中文件的路径 目标目录地址...
二十一、MySQL(多表)内连接、外连接、自连接实现
1、多表查询 (1)基础概念: (2)多表查询的分类: 2、内连接 (1)基础概念: (2)隐式内连接: 基础语法: select 表1.name,…...
Zookeeper运维
我是一个目录 1. 参数说明2. Zookeeper优化建议3. Zookeeper性能查看4. 建议 1. 参数说明 工作节点瞬间压力大,导致和集群通信出现延迟,被踢出节点,瞬间释放的连接立即又连接到另外节点,最终集群挂掉。加了一些延迟配置后…...
uniapp 点击事件-防重复点击
uniapp 点击事件-防重复点击 1、common文件并创建anti-shake.js文件 // 防止处理多次点击 function noMoreClicks(methods, info) {// methods是需要点击后需要执行的函数, info是点击需要传的参数let that this;if (that.noClick) {// 第一次点击that.noClick f…...
推进“数智+数治”,中期科技智慧公厕驱动城市公厕更新升级发展
随着城市化的快速发展和人口的不断增加,公共厕所这一基础设施的更新升级成为了亟待解决的问题。过去的传统公厕往往存在着环境脏乱差、无法保证使用者的舒适度等诸多问题。而智慧公厕则能够通过互联网和物联网的技术手段,实现智能化的运行管理࿰…...
4、模板(二叉树,红黑树,STL的实现)
1. 泛型编程 2. 模板:参数类型化 3. 模板分类 3.1 函数模板 概念 实例化:隐式实例化,显式实例化 3.2 类模板 4. 在模板参数列表中:class和typename 5.模板参数列表:template <class T , size_t N> 类型参数&#x…...
了解JVM
一.了解JVM 1.1什么是JVM JVM是Java Virtual Machine(Java虚拟机)的缩写,是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟计算机功能来实现的,JVM屏蔽了与具体操作系统平台相关的信息,Java程序只…...
vue2实现组织机构树
参考大佬文章:https://www.cnblogs.com/10ve/p/12573772.html 【vue——实现组织架构图(vue-org-tree)——技能提升 - CSDN App】http://t.csdn.cn/Mpe4B...
JS中BigInt的使用
JS中BigInt的使用 BigInt是一种内置对象,它提供了一种方法来表示大于2^53 - 1的整数,通俗来讲就是提供了一种可以表示任意大整数的方法,当我们使用Number来表示一个超过了2 ^53 - 1的整数的时候,会出错。所以此时我们需要使用Big…...
你的第1个 Unity 游戏!!!
简介 首先新建一个方块添加重力!!!总结首先 首先,你要先打开 U n i t y Unity Unity...
炫云云渲染3ds max效果图渲染教程
很多人在第一次使用炫云云渲染渲染效果图的时候不知道怎么使用,其实现在使用炫云渲染效果图真的很简单,我们一起来看看。 一客户端安装 1、打开炫云云渲染官网,点击右上角的客户端下载,选择炫云客户端(NEXT版…...
Java中数组array和列表list相互转换
在Java中,可以将数组(array)和列表(list)相互转换,但需要注意一些细节和限制。以下是一些示例和说明: 从数组到列表: 使用Arrays.asList()方法:可以使用Arrays.asList()…...
【JavaSE笔记】数据类型与变量
一、前言 在Java这门“啰嗦”的编程语言中,我们必须弄清楚每种数据类型的性质和用途,才能让程序“说人话”。要成为Java高手,就必须与各种数据类型打成一片。 本文则将带你认识Java中常见的两位“角色”—数据类型与变量。 二、数据类型 在Java中数据类型主要分…...
VR全景智慧文旅解决方案,助力文旅产业转型升级
引言: 随着科技的不断发展,虚拟现实(VR)技术正逐渐展露其影响力,改变着旅游业。VR全景智慧文旅解决方案也应运而生,将传统旅游的体验形式从线下扩展到了线上,带来了不一般的文旅体验。 一.VR全…...
采用cv2和默认的人脸识别分类器实现人脸检测功能
人脸识别分类器 haarcascade_frontalface_default 提示:分类器文件地址在这里:https://github.com/opencv/opencv/blob/687fc11626901cff09d2b3b5f331fd59190ad4c7/data/haarcascades/haarcascade_frontalface_default.xml 文章目录 人脸识别分类器 haar…...
C# 实现迷宫游戏
智能提示: /// <summary>/// 迷宫/// </summary>internal class Maze : IDisposable{private MazeCell[,] cells;private readonly Stack<MazeCell> stack new Stack<MazeCell>();private readonly Random rand new Random();private int…...
chales 重写/断点/映射/手机代理/其他主机代理
1 chales 安装和代理配置/手机代理配置/电脑代理配置 chales 安装和代理配置/手机代理配置/电脑代理配置 2 转载:Charles Rewrite重写(详解!必懂系列) Charles Rewrite重写(详解!必懂系列) 1.打开charles,点击菜单栏的Tools选中Rewrite2.…...
django添加数据库字段进行数据迁移
1.修改view.py里面的变量 2.在model.py新增字段 3.打开terminal并将环境切到项目所在环境,切换方式为 4.执行命令 python manage.py makemigrations backend python manage.py migrate...
flink1.15.0消费kafka 报错 The coordinator is not available.
报错 You should retry committing the latest consumed offsets. Caused by: org.apache.kafka.common.errors.CoordinatorNotAvailableException: The coordinator is not available. 但是任务还在正常跑. 开源bug [FLINK-28060] Kafka Commit on checkpointing fails re…...
2023华为杯研究生数学建模F题思路模型代码(9.22早第一时间更新)
目录 1.F题思路模型:9.7晚上比赛开始后,第一时间更新,获取见文末名片 3 全国大学生数学建模竞赛常见数模问题常见模型分类 3.1 分类问题 3.2 优化问题 详细思路见此名片,开赛第一时间更新 1.F题思路模型:9.7晚上比…...
[k8s] pod的创建过程
pod的创建过程 定义 Pod 的规范: apiVersion: v1 kind: Pod metadata:name: my-pod spec:containers:- name: my-containerimage: nginx:latest创建 Pod 对象: 使用 kubectl 命令行工具或其他客户端工具创建 Pod 对象: kubectl create -f…...
遵义疫情最新情况/百度 seo排名查询
转载于:https://www.cnblogs.com/fdxxiaobai/p/6857644.html...
网站正在升级建设中代码/小程序排名优化
所有您想了解的有关K2 blackpearl以及流程驱动应用程序知识尽在于此书Wrox Press, 2009 (点击窗口右边网站链接即刻订购)K2 blackpearl 正在改变人们使用软件的方式 — 帮助全球各地从事各种行业的企业和机构精简业务、提高工作效率和节约时间。K2 blackpearl 是一款商务人士、…...
营销型网站代理/关键词优化推广公司排名
衣柜的安装步骤,如果是全屋都贴地砖的话,基本就没什么好纠结,直接等地面贴砖工作都装修好了,再来装衣柜;但是如果打算铺木地板的话,那么衣柜与木地板的安装顺序,就是一个选择题了。毕竟很多人装…...
汉沽谁做网站/怎样免费给自己的公司做网站
展开全部1、从Kmeans说起Kmeans是一个非常基础的聚类算法,使用了迭代的思想,关于其原理这里不说62616964757a686964616fe58685e5aeb931333339666131了。下面说一下如何在matlab中使用kmeans算法。创建7个二维的数据点:复制代码代码如下:x[ran…...
网站html下载/网站建站方式有哪些
现在,你已可以使用 Visual Studio 将所有 .NET 应用程序升级到最新版本的 .NET!这一功能可以从 Visual Studio 扩展包中获取,它会升级你的 .NET Framework 或 .NET Core 网页和桌面应用程序。一些项目类型仍正在开发中并将在不久的未来推出&a…...
做网站需要会的软件/东莞网站营销推广
楼主电脑系统状况:win10主系统,128固态为ubuntu系统 安装一共为两次。 第一次出现ubuntu安装成功后没有声音,主系统win10有声音,Ubuntu上检测不到声卡,说明ubuntu对声卡没有正确识别,楼主是hdmi和独显。网上…...