当前位置: 首页 > news >正文

闲庭信步使用图像验证平台加速FPGA的开发:第二十九课——车牌识别的FPGA实现(1)车牌定位的预处理

   (本系列只需要modelsim即可完成数字图像的处理,每个工程都搭建了全自动化的仿真环境,只需要双击top_tb.bat文件就可以完成整个的仿真,大大降低了初学者的门槛!!!!如需要该系列的工程文件请关注知识星球:成工fpga,https://t.zsxq.com/DMeqH,关注即送200GB学习资料,链接已置顶!)

《闲庭信步使用图像验证平台加速FPGA的开发》这个系列基本要结束了,最后我们用一个车牌识别的实例来进行收官,大约需要六节课的样子

这个实例是参考哔哩哔哩上大磊老师讲的《基于FPGA的车牌识别》,流程如下所示,成工是将与处理的一些模块进行了替换,因为我们有现成的rgb2ycbcr,二值化,sobel,腐蚀和膨胀相关的模块,后面的车牌边界和字符区域的水平投影,竖直投影,字符的识别按照自己的理解进行了一些改进。最主要的改进还是将仿真变成了自动化的仿真本节课就对车牌上下左右边界的定位进行预处理。

车牌上下左右边界的定位,先将RGB图像转换成Ycbcr的格式,然后取Cb的通道进行二值化,之所以取Cb通道是因为大部分车牌的背景都是蓝色的。Cb通道二值化后进行腐蚀操作,对腐蚀后的图片再进行sobel边缘检测,最后再进行膨胀就完成了预处理,预处理后的图片就可以进行车牌上下左右边界的定位操作了。

预处理的各个模块我们在前面的章节都有实现,直接调用即可,在顶层的top模块中例化上面的各个模块,为了能将每一步的处理都能保存图片查看,这儿成工用了img_sel信号来进行选择

下面就是对各个模块的例化,有个地方需要注意一下,那就是设计到行缓存的操作时序优化延时至少一行,所以我们在data_cache3模块中会在最后补一行,但是对于连续的行缓存(腐蚀,sobel,膨胀3个操作都需要行缓存),后面的操作都要在前面已经补了一行的基础上再补一行,行的位置需要根据DELAY参数来确定。所以整个预处理操作下来,图像最终至少延时3行。同时也可以看出,这个图像的预处理需要处理五帧图片。

在tb_image_sim文件中,我们来介绍一个新的功能,那就是关联数组,关联数组光看定义是不好理解的,用实例就能轻松的掌握。如下所示,img的input文件夹下有很多的测试图片,我想要那张就要把这一张的名称写在测试程序里面。那我们可不可以只用一个标号就可以取出来对应的图片呢?这时候就可以使用关联数组了。

如下我们新建了car和style两个关联数组,数组的标号是int类型,里面存储的内容是string类型,其中car就是存储上面图片的名称,sytle存储要输出图片的名称,这样后续的操作只需要对car_index和style_index操作即可,不需要再对图片名称进行直接处理了。

如下新增一个initial块,完成两个关联数组的初始化。

在下一个initial块中,分别将预处理的五帧图片进行保存。这儿有一点需要注意,198行是对队列进行清空的操作,否则图片数据会继续往后存储,那保存的五幅图片都是Cb通道的图片。

双击sim文件夹下的top_tb.bat文件,完成系统的自动化仿真。

因为要处理五幅图像,处理时间较长,modelsim的Transcript有如下的打印信息。

最后我们打开img/output文件夹,就可以看到预处理每一步的处理结果。

当然大家也可以修改car_index选择不同的值重新进行仿真,比如car_index=9重新进行仿真,img/output文件夹下的图片如下。

到现在就能体现出来图像验证平台的优势了,可以直接调用模块快速完成预处理,这样就可以把精力用在处理算法的开发上来。

http://www.dtcms.com/a/291912.html

相关文章:

  • 边缘计算网关赋能智慧农业:物联网边缘计算的创新应用与实践
  • vue apk返回键不好使
  • git push新版问题解决
  • ArrayList与顺序表
  • 【C++】继承和多态扩展学习
  • 面向对象的三大特征
  • Go 语言中,创建结构体实例对象有几种常用方式
  • 大数学习笔记整理
  • Leetcode—692. 前K个高频单词【中等】(桶排序)
  • 从感知到决策:虚拟仿真系统与视觉算法融合下的多路RTSP视频接入技术探究
  • freertos关键函数理解 uxListRemove
  • 基于 Spring Batch 和 XXL-Job 的批处理任务实现
  • linux c语言进阶 - 进程,通信方式
  • PHICOMM(斐讯)N1盒子 - Armbian25.05(Debian 12)刷入U盘/EMMC
  • Unity之C# 脚本与Unity Visual Scripting 交互
  • Java 网络编程详解:从基础到实战,彻底掌握 TCP/UDP、Socket、HTTP 网络通信
  • 【数据可视化-70】奶茶店销量数据可视化:打造炫酷黑金风格的可视化大屏
  • Vue + WebSocket 实时数据可视化实战:多源融合与模拟数据双模式设计
  • AI创作系列第22篇:前端缓存与更新机制重构 - 表情包系统的全面升级
  • 贪心算法Day4学习心得
  • 当直播间告别“真人时代”:AI数字人重构商业新秩序
  • haproxy七层代理新手入门详解
  • 零事故网站重构:11步标准化流程与风险管理指南
  • 第13天 | openGauss逻辑结构:表管理1
  • zabbix“专家坐诊”第295期问答
  • SPI的收发(W25Q64外部flash 和 内部flsah)
  • 小米视觉算法面试30问全景精解
  • Android常用的adb和logcat命令
  • 【bug】ubuntu20.04 orin nx Temporary failure resolving ‘ports.ubuntu.com‘
  • 【测试开发】---Bug篇