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

闲庭信步使用图像验证平台加速FPGA的开发:第十九课——图像拉普拉斯金字塔的FPGA实现

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

图像的拉普拉斯金字塔就是图像高斯滤波丢失的高频图像数据,实现起来也很简单,那就是原图片减去高斯滤波后的图像,得到的数据就是拉普拉斯相关的数据,因为是和高斯金字塔以一对一的,所以称为拉普拉斯金字塔。

图像的拉普拉斯金字塔,用图像测试平台实现是非常的简单,因为原始图像和高斯滤波的图像都是保存在队列中,两个队列直接相减就可以了。但是在FPGA中实现却不是那么简单,这里涉及一个处理前后图像数据对齐的问题

前面进行讲解了,高斯滤波需要先对图像的数据进行行缓存,加速补零的操作,对第一个图像数据进行处理的时候,图像数据已经缓存到第2行的第2个数据了(从0开始计数),这时候的当前数据和高斯处理的数据至少有2行加两个数据的偏移

如何能让图像高斯滤波后的数据和原始数据对齐呢?那就必须对原始数据也进行行缓存,根据上面的分析,原始数据和高斯处理后的数据至少有2行加两个数据的偏移,那就至少要对原始数据进行3行的缓存。

还有一个问题,什么时候开始原始数据和高斯滤波后数据的相减操作?也就是说依哪个数据为准来读另一个数据?很明显应该是以高斯滤波处理完成的前一个时钟周期为准去对缓存的原始数据(读缓存需要一个时钟周期),这样读出的原始数据就和高斯滤波后的数据同步了

修改gaussian模块,将active信号作为同步信号输出,因为active信号指示高斯滤波完成前一个时钟周期的指示信号。

在\src\cache文件夹下新建row_cache3模块,用来缓存图像的数据,该模块的设计要点就是根据active信号将din数据写入ram,根据active_req信号将ram中的数据读出来

如下所示,sel_cnt信号计数0-2,用来控制3个ram的读写。active信号控制ram的写地址addra,active_req信号ram的写地址信号addrb和输出使能dout_en。

有了row_cache3模块,其实拉普拉斯金字塔实现就非常的简单了,直接将row_cache3输出的数据和高斯滤波后的数据相减即可。在\src\laplacian文件夹下新建laplacian.sv文件,内容如下,其实就是实现了绝对值相减。同理在img_process_pkt.sv包中也实现了laplacian相关的功能。

在top文件下例化rgb2ycbcr,gaussian,row_cache3和laplacian模块并将相关的信号进行连接。目前工程的顶层终于大于2个文件了,终于开始有做工程的感觉了。

在tb_image_sim文件中的第二个initial块中,将图像测试平台和FPGA硬件仿真的结果保存并比对。

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

可以看到在modelsim的Transcript有如下的打印信息,图像测试平台和FPGA硬件仿真的结果一致。

打开img文件夹,可以看到拉普拉斯金字塔的图像,就是一些高频的图像信息。

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

相关文章:

  • Image 和 IMU 时间戳同步
  • 事务~~~
  • JavaScript进阶篇——第五章 对象成员管理与数组遍历优化
  • 密码喷洒复现
  • Thymeleaf 基础语法与标准表达式详解
  • 如何区分Bug是前端问题还是后端问题?
  • LeetCode经典题解:141、判断链表是否有环
  • 【LeetCode】链表相关算法题
  • Node.js Process Events 深入全面讲解
  • 1.3 vue响应式对象
  • FATFS文件系统原理及其移植详解
  • PyTorch 损失函数详解:从理论到实践
  • 嵌入式学习-PyTorch(5)-day22
  • 【深度学习基础】PyTorch中model.eval()与with torch.no_grad()以及detach的区别与联系?
  • Vue 结合 Zabbix API 获取服务器 CPU、内存、GPU 等数据
  • 数据结构自学Day8: 堆的排序以及TopK问题
  • 前端Vue中,如何实现父组件打开子组件窗口等待子组件窗口关闭后继续执行父组件逻辑
  • DeepSeek(18):SpringAI+DeepSeek大模型应用开发之会话日志
  • 单片机(STM32-中断)
  • JS逆向 - YandexSmartCaptcha (worker线程)
  • 基于WebRTC构建应用的可复用模块
  • 下载webrtc M114版本源码只能使用外网googlesource源-命令版
  • i.mx8 RTC问题
  • TEngine学习
  • 【Noah-MP模型】陆面生态水文模拟与多源遥感数据同化的实践技术应用
  • JavaScript进阶篇——第六章 内置构造函数与内置方法
  • alpineLinux修改包管理为国内源
  • 越野小车结构设计\越野小车设计cad【6张】三维图+设计说明书
  • 【Java】【力扣】101.对称二叉树
  • 数据结构与算法——Leetcode215. 数组中的第K个最大元素