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

图像的直方图统计在上个系列有详细的讲解,本课主要完成直方图统计的FPGA实现。

图像的直方图统计就是对一副图像中0-255这256个像素点出现的次数,在FPGA中,就要用RAM将各个像素点出现的次数存储起来,每来一个新的像素点,就以这个像素点的值为地址从RAM从取出对应的值,加一后再写回到这个地址中去。

按照上面的分析,使用RAM进行直方图统计还有有些麻烦的,因为读RAM需要一个时钟周期,写RAM也需要一个时钟周期,而像素点数据是一个时钟来一个,这就要求每个时钟都要同时读写RAM,虽然读写的地址不同。其实Xilinx的双口RAM是不支持同时读写的,因为wea就是读写使能信号,要不是读,要不是写,不能同时读写。

其实这个问题很好解决,有时候用简单的方式更容易实现,这儿我们可以使用数组来存储,对于数组的操作,一个时钟周期就可以完成读写操作

还有一个问题,在视频处理中,图像是一帧帧流水处理的,我们要统计每幅图像的直方图,完成一幅图像的直方图统计后就要把直方图的数据传输出去并把数组的内容清零,为下一副图像的直方图统计做准备。而通过场同步信号可以判断一幅图像是否处理完成,来对存储直方图的数组读走和清空操作

在\src\hist文件夹下新建hist_statistics.sv文件,使用数组hist_ram来存储图像的直方图统计的信息。

有了数组,图像直方图统计的功能实现非常的简单,直接以输入的数据为索引读写数组即可;而且在直方图的数据被读取完毕后直接清空即可。

根据场同步信号,新建rd_result_domain信号,在该信号有效时间内根据wr_cnt将数组中的数据全部读走。

最后图像直方图的数据dout通过dout_en的标示输出出去,同时生成dout_done信号,用来表示直方图的数据被读完成。

到这儿还有一个问题,那就是可能有些像素点统计的值非常大,而有些像素点统计的值又非常的小,就是直方图的数据很难直观的反应出图像的信息,这时候我们就对图像进行归一化都一定的范围,以便直观的观察。

在\src\hist文件夹下新建hist_norm.sv文件,用来将直方图的数据归一化到0——NORM之间,这个避免除法的操作,直接将直方图数据和FACTOR相乘即可。由于数据扩大了1024*1240倍,最终的结果应该直接舍弃低20位,但是这样的话直方图的数据整体水平都会很小(因图像而异),所以这儿只是舍弃了低13位,让直方图的数据基本在0-255区间内。

top文件例化了rgb2ycbcr,hist_statistics和hist_norm这三个模块。

在img_process_pkt包中也新建hist_fpgatask,方便图像测试平台和FPGA仿真数据的比对。

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

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

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

打开img文件夹,也可以看到图像测试平台和FPGA硬件仿真的结果是一致的(no_seq*是图像测试平台处理后的图片,seq*是FPGA硬件仿真处理后的结果)。

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

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

相关文章

群晖中相册管理 immich大模型的使用

相对于其他的相册管理软件,Immich的智能搜索和人脸识别功能是其优势,通过应用机器学习模型,其智能搜索和人脸识别功能更为先进。 一、大模型的下载与安装 网上有大佬提供了相关大模型的下载:https://url22.ctfile.com/d/58003522…

在 Windows 上使用 Docker 运行 Elastic Open Crawler

作者:来自 Elastic Matt Nowzari 了解如何使用 Docker 在 Windows 环境中运行 Open Crawler。 了解将数据摄取到 Elasticsearch 的不同方式,并深入实践示例,尝试一些新方法。 Elasticsearch 拥有大量新功能,助你为特定场景构建最…

iOS高级开发工程师面试——RunTime

iOS高级开发工程师面试——RunTime 一、简介 二、介绍下 RunTime 的内存模型(isa、对象、类、metaclass、结构体的存储信息等) 对象 类 三、为什么要设计 metaclass ? 四、class_copyIvarList & class_copyPropertyList区别? 五、class_rw_t 和 class_ro_t 的区别? 六…

实现分页查询

分页查询分页查询语句项目中添加分页功能按钮设置前后端代码功能实现分页查询语句 限制查询的 sql 语句: select * from student limit 0,4sql 查询结果如下: 分页查询的每一页都对应一行 sql 语句,若每一行都写单独对应的 sql 语句不仅重复…

[QOI] qoi_desc | qoi_encode | qoi_decode

链接:https://phoboslab.org/log/2021/11/qoi-fast-lossless-image-compression (看代码设计的时候,真的大为震撼,伟大的algorithm T.T) docs:QOI图像格式 qoi项目提出了Quite OK Image(QOI&am…

智慧城轨可视化:一屏智管全城

图扑智慧城轨可视化系统,把地铁线路、车站、列车都搬进三维画面。列车晚点预警、站台拥挤提示、设备故障定位…… 这些关键信息一屏聚合,调度员能快速调整发车频次,疏导高峰客流。遇上突发情况,系统联动应急方案,同步显…

包新的Git安装与使用教程(2024九月更新)

目录 一、安装git 1.下载git 2.git安装 3.环境变量配置与测试 二、使用教程 1.创建版本库 2.版本回退 3.删除和恢复文件 一、安装git 1.下载git 官方下载地址:https://git-scm.com/download 然后进入以下页面,点击下载链接即可(windows一般都是…

中望3D 2026亮点速递(1)-全新槽功能螺纹功能,减少繁琐操作

本文为CAD芯智库整理,未经允许请勿复制、转载!中望3D 2026全新的槽功能,包括:(1)可快速生成多种槽形;(2)快速生成一个或多个槽;(3)支持…

2025毫米波雷达技术白皮书:智能汽车与物联网的感知核心

随着人工智能、物联网(IoT)和智能汽车产业的迅猛发展,毫米波雷达技术正成为感知领域的核心驱动力。毫米波雷达凭借其高精度、全天候和强抗干扰能力,广泛应用于智能汽车的自动驾驶、物联网的环境感知以及工业自动化。2025年&#x…

用 React-Three-Fiber 实现雪花下落与堆积效果:从零开始的 3D 雪景模拟

在 Web3D 开发中,自然现象模拟一直是极具吸引力的主题。本文将基于 React-Three-Fiber(R3F)框架,详解如何实现一个包含雪花下落、地面堆积的完整雪景效果。我们会从基础粒子系统入手,逐步完善物理交互逻辑,…

从抓包GitHub Copilot认证请求,认识OAuth 2.0技术

引言 在现代开发工具中,GitHub Copilot 以智能、嵌入式的人工智能代码补全能力著称。作为一项涉及用户敏感数据和付费授权的服务,其认证授权流程尤为值得技术研究。本文基于实际抓包 VS Code 中的 Copilot 登录认证请求,系统梳理其 OAuth 2.…

Linux操作系统之线程:分页式存储管理

目录 前言: 一、分页式存储管理 二、二级页表的地址转化 三、缺页中断 总结 前言: 我们上篇文章简单介绍了线程的一些知识点,但是还有很多坑没有给大家填上,包括页表部分我们还没为大家说明。 本篇文章我将会继续为大家讲解…

xss1-8

Level-1<script>alert()</script>基础反射型 无任何过滤Level-2"> <script>alert()</script> <"闭合属性&#xff1a;">用来闭合当前标签的value属性注入新标签&#xff1a;闭合属性后&#xff0c;插入独立的<script>…

51c嵌入式~单片机~合集1

自己的原文哦~ https://blog.51cto.com/whaosoft/11897656 一、STM32的启动模式配置与应用 三种BOOT模式 所谓启动&#xff0c;一般来说就是指我们下好程序后&#xff0c;重启芯片时&#xff0c;SYSCLK的第4个上升沿&#xff0c;BOOT引脚的值将被锁存。用户可以通过设…

Typecho分类导航栏开发指南:从基础到高级实现

文章目录 Typecho分类导航栏深度解析:父分类与子分类的完美呈现 引言 一、Typecho分类系统基础 1.1 Typecho分类结构 1.2 获取分类数据的基本方法 二、基础分类导航输出 2.1 简单的平铺式导航 2.2 带计数器的分类导航 三、层级分类导航实现 3.1 递归输出父子分类 3.2 使用Type…

C++异步编程工具 async promise-future packaged_task等

深入探讨 C11 中引入的四个核心异步编程工具&#xff1a;std::async, std::future, std::promise, 和 std::packaged_task。它们共同构成了 C 现代并发编程的基础。 为了更好地理解&#xff0c;我们可以使用一个餐厅点餐的类比&#xff1a; std::future (取餐凭证)&#xff1…

Linux-网络管理

网络管理1. 网络基础1.1 TCP/IP 协议栈&#xff08;四层模型&#xff09;1.2 网络设备配置与基础概念1.3 网络接口命名规则1.4 网络配置文件位置2. 常用网络配置命令2.1 查看网络接口信息2.2 配置 IP 地址2.3 启用/禁用网卡2.4 修改网卡 MAC 地址2.5 配置网卡的 MTU&#xff08…

Linux锁的概念及线程同步

目录 1.常见锁概念 死锁 死锁四个必要条件 避免死锁 避免死锁算法 2. Linux线程同步 条件变量 同步概念与竞态条件 条件变量函数 初始化 销毁 等待条件满足 唤醒等待 简单案例&#xff1a; 条件变量使用规范 1.常见锁概念 死锁 死锁是指在一组进程中的各个进程均占有不会释放的…

docker更换国内加速器-更换华为加速器2025-717亲测可用docker 拉取镜像出错

[rootlocalhost ~]# docker pull nginx Using default tag: latest Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)报错原因就是…

Unity VR多人手术模拟恢复2:客户端移动同步问题分析与解决方案

Unity VR多人手术模拟恢复2&#xff1a;客户端移动同步问题分析与解决方案 &#x1f3af; 问题背景 在开发基于Unity Mirror网络架构的VR多人手术模拟系统时&#xff0c;我们遇到了一个复杂的客户端移动同步问题&#xff1a; 主要操作者&#xff08;第一个客户端&#xff09;&a…