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

闲庭信步使用图像验证平台加速FPGA的开发:第五课——HSV转RGB的FPGA实现

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

图像在HSV域完成了处理,最终还是要转换回RGB域进行显示。本篇我们介绍一下HSV转RGB的FPGA实现。

图像HSV转RGB的公式如下所示,看似简单,其实暗藏玄机,主要是设计除法和取余的运算,还有就是多步的乘法运算。我们首先将q和t的公式化简一下,最终变成v-v*f*s,p+v*f*s,由于p已经进行了一步的乘法运算,而单独求v*f*s还需要两步的乘法运算,其实v*f*s=(v-p)*f,这样就减少了一步的乘法运算;而求q和t都离不开f,f的计算需要除法,求模和减法,所以求f是本公式的一个关键。

如何求f呢?首先需要求出来hi,而求hi的关键是求h/60,这儿成工想到的有三种方法,一是用直接用除法器,花费一个时钟周期;而是将除法转变成乘法,1/60约等于0.01667,再按照前面讲解的放大到整数,计算出结果后再缩放回去;第三种方法就是根据实际情况将除法变成判断,因为h取值是0-360,我们根据h取值的区间直接就能得出h/60到底是多少,而且可以直接得到hi的值。

至于求f,我们可以先计算出h-hi*60,因为hi*60也是可以直接判断得出数值的,最后再除以60来计算f,当然这个除法也可以转换成乘法,简单起见,本例成工直接使用除法。

所以我们来确定一下该公式需要的处理周期。第一个时钟周期计算出hi和1-s,第二个时钟周期计算出f和p,第三个时钟周期计算出v*f*s,第四个时钟周期用组合逻辑计算出q和t,然后根据v、t、p的值用时序逻辑完成最终的计算。

在src文件夹下的rgb文件夹中,hsv2rgb.sv模块完成图像的HSV到RGB的转换。第一个时钟周期,完成hi的计算。

第一个时钟周期同时完成hi*60的计算。

第二个时钟周期完成f的计算。

当然还有第一个时钟周期1-s的计算和第二个时钟周期p的计算,这样第三个时钟周期就可以完成v*f*s的计算。

用组合逻辑实现一些计算结果。

最后一个时钟周期完成最终结果的计算。

由于公式的计算用了四个时钟周期,所以图像的场同步,行同步,数据有效信号都需要延时4个时钟周期进行同步。

在src的top模块中,将rgb2hsv和hsv2rgb模块进行例化。

在tb_image_sim仿真文件中,将图像的数据分别给到图像测试平台和FPGA可综合模块经常仿真测试,最后将结果进行比对并保存图像。

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

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

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

其实成工在上个系列的第二十一课中,说到图像测试平台中的hsv2rgb这个task处理后图像的颜色有失真,而安装FPGA的设计思路hsv2rgb_fpga这个task解决了相关的问题,请大家来分析一下问题到底出在哪儿。

http://www.lryc.cn/news/582503.html

相关文章:

  • Java连接Emqx实现订阅发布消息
  • 恒创科技:香港站群服务器做seo站群优化效果如何
  • ReactNative【实战】瀑布流布局列表(含图片自适应、点亮红心动画)
  • Rust DevOps框架管理实例
  • ffmpeg下编译tsan
  • iOS 性能测试工具全流程:主流工具实战对比与适用场景
  • cocos2dx3.x项目升级到xcode15以上的iconv与duplicate symbols报错问题
  • CSP-S模拟赛二总结(实际难度大于CSP-S)
  • 力扣 239 题:滑动窗口最大值的两种高效解法
  • Android kotlin 协程的详细使用指南
  • C++--AVL树
  • 微前端框架对比
  • (16)Java+Playwright自动化测试-iframe操作-监听事件和执行js脚本
  • 精益管理与数字化转型的融合:中小制造企业降本增效的双重引擎
  • Nexus zkVM 3.0 及未来:迈向模块化、分布式的零知识证明
  • 生成PDF文件(基于 iText PDF )
  • Android framework修改解决偶发开机时有两个launcher入口的情况
  • Prompt Injection Attack to Tool Selection in LLM Agents
  • 论文略读:Prefix-Tuning: Optimizing Continuous Prompts for Generation
  • C++11标准库算法:深入理解std::find, std::find_if与std::find_if_not
  • Python中os.path和pathlib模块路径操作函数汇总
  • react的条件渲染【简约风5min】
  • C#使用Semantic Kernel实现Embedding功能
  • 【知足常乐ai笔记】机器人强化学习
  • TVS管工作原理是什么?主要的应用场景都有哪些?
  • MySQL数据库访问(C/C++)
  • 赛博威破解快消品渠道营销三重困局,助力企业实现“活动即战力”
  • 小米YU7预售现象深度解析:智能电动汽车的下一个范式革命
  • 内容页模板表格显示不全的问题处理
  • IP 能ping通,服务器是否开机?