专栏首页FPGA开源工作室使用Simulink快速搭建视频处理硬件加速仿真平台

使用Simulink快速搭建视频处理硬件加速仿真平台

前言:这一讲我们使用Simulink来快速搭建图像/视频处理硬件加速平台。以简单的RGB2GREY算法为例。我们主要使用的Toolbox为HDL Coder和Vision HDL两个,以后会加上相关的Hardware Support Package。大家可以在Simulink的Library Brower中以及官网里熟悉一下他们所支持的功能。


正文:

首先我们新建一个Simulink模型,并且按照上一讲所讲到的设置配置完成。

然后在空白处双击,输入并添加以下模块:

  • Image From File
  • Frame To Pixels
  • Pixels to Frame
  • Video Reviewer
  • Embedded Subsystem

将Video Reviewer放入Enabled Subsystem中,如下图

然后按照下图连接所有模块。此处每个模块的输入都包含两个:pixel和ctrl。Pixel表示对应的像素值,ctrl信号会indicate行开始和结束,列开始和结束,以及valid信号。不了解的同学可以参考Mathwork关于视频接口控制总线的说明https://www.mathworks.com/help/visionhdl/ug/pixelcontrol-bus.html。

之后我们需要设置Image From File模块,双击它。如下图设置File Name,Sample time。

下面设置Frame To Pixels和Pixels To Frame模块,由于我们使用的图片格式是RGB240p,所以我们在双击模块之后弹出的配置窗口里选择Video Format为240p,RGB有3个通道,所以Number of components填3。Pixels To Frame同理。对于视频格式不太了解的同学,我建议阅读一下Matlab的Frame To Pixels文档的Video format部分,链接如下

https://www.mathworks.com/help/visionhdl/ref/frametopixels.html

接下来我们设置仿真参数,在空白处单击右键,选择Model Properties

然后我们在Callbacks中的InitFcn(初始化函数)填写以下代码,这样我们只要改变VideoFormat的格式就可以自动获取图像长宽等参数。

完成之后我们在Simulink Model的配置栏设置仿真时间为totalPixels(也就是上一步中配置的),仿真模式选择为Accelerator模式。

至此,我们可以测试一下仿真通路了,保存之后使用ctrl+D来验证模型完整性。如果没有报错即可点击开始按钮,开始仿真。如果不出意外,我们将会看到以下图片

既然视频通路搭建成功,我们就可以开始添加自己的RGBGREY模块了。

熟悉数字图像处理的同学一定知道,RGB图像转换成灰度图像的公式如下

GREY=0.299*R+0.587*G+0.114*B。因此我们搭建转换模块如下

Delay模块功能相当于寄存器模块,RGB信号通过pixelIn输入,通过乘法器与对应的常数相乘,并且使用Sum of Element模块求和,后面的Data Type Conversion模块截取了小数点之前的8位,也就是转换成uint8的类型。Control Bus也要有相应的延迟,以保证时序不变。(关于为什么使用2个寄存器延迟,以及乘法器的替代,将会在以后提到。)我们将这部分模块封装在一个subsystem中(选中想要封装的模块并点击右键,选中Create Subsystem from Selection)。至此,我们的算法搭建已经完成,如下图。由于灰度图像是单通道的,别忘记将Pixel To Frame中的通道数改为1。

开始仿真,Video Reviewer会显示以下图像,说明我们的转换算法验证成功。

说明:1. 细心的同学可能会发现,在实现RGBGREY算法,双击添加模块时,所有的模块都出自HDL Coder Toolbox,大家可以去官网查看更多实例以及熟悉支持功能。2.MathWorks提供了一套对应于上面模型的硬件框架来使用户可以快速的搭建算法验证测试平台,主要来自Xilinx Zynq Support from Computer Vision Toolbox。前图模型中显示绿色和黄色的部分并不能综合成硬件代码,但应该适配到对应的Zynq框架之后,只要用户按照接口,也就是pixel和ctrl,来开发算法,就可以很容易的使用该硬件支持包来布置到FPGA中。

在Github中,我还添加了软件部分的验证部分,并且计算硬件和软件的PSNR。欢迎大家下载并且在自己的电脑上验证,如果有问题和任何建议也可以与我联系。

以下为模型地址https://github.com/linbaiwpi/matlab_visionhdl/tree/master/rgb2grey

下集预告:之后,我们还会了解到哪些模块是可以被转换成HDL代码的,如何将模型部署到硬件之上,以及实现算法的时候将会用到的技巧等。

下一讲我将会实现以上模型的HDL代码,并且在Zedboard+FMC-HDMI-CAM板卡上进行验证。之后我们会讲解如何使用Line Buffer,如何生成patch,实例为将照片转换成素描风格(测试图片摘自Github-wyfunique/Convert-Photo-to-sketch,如有侵权,烦请告知,我会立刻删除)。实现结果如下(右边是输入图像,左边是硬件实现的结果)

本文分享自微信公众号 - FPGA开源工作室(leezym0317)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-12-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 「递归」第3集 | 向善的信念,让技术自带光芒

    ? 我们为什么叫「递归」 “递归” (recursion) 是一种在程序设计语言中被广泛使用的算法。它有两大特点,一是调用自己,二是化繁为简。我们当中那些优...

    腾讯技术工程官方号
  • 人类参考基因组转录本的秘密

    生信技能树
  • jsp

    之前聊过用java处理web请求,处理cookie和session等等,但是唯独没有提及如何返回信息。作为一个web程序,肯定需要使用HTML作为用户界面,这个...

    Masimaro
  • Python中的passed by assignment与.NET中的passing by reference、passing by value

    Remember that arguments are passed by assignment in Python. Since assignment jus...

    雪飞鸿
  • 图像处理初学者应该学习的100个问题-你都学会了吗?

    本文整理了图像处理初学者应该需要了解的100个基础问题,涉及读取、显示图像、操作像素、拷贝图像、保存图像、灰度化(Grayscale)、二值化(Thres...

    代码医生工作室
  • 打破两项世界纪录,腾讯优图开源视频动作检测算法DBG

    ? 近日,腾讯优图实验室提出一种新的视频动作检测算法DBG并开源,这是继今年4月人脸检测算法DSFD开源后,优图的又一次开源动作。 目前,DBG算法在全球两大...

    腾讯技术工程官方号
  • [Go] gocron源码阅读-go语言中数组和切片的字面值初始化语法

    源码中有这么一句,这个函数要求返回的是[]cli.Command,cli.Command类型的切片,这个地方直接使用字面值初始化了一个切片返回去了

    陶士涵
  • Pathview包:整合表达谱数据可视化KEGG通路

    Pathview是一个用于整合表达谱数据并用于可视化KEGG通路的一个R包,其会先下载KEGG官网上的通路图,然后整合输入数据对通路图进行再次渲染,从而对KEG...

    生信宝典
  • 如何计算两个字符串之间的文本相似度?

    最近好久没有写文章了,上一篇文章还是九月十一的时候写的,距今已经两个月了,期间一直在忙一些工作上的事情,今天终于有点空闲,所以写一篇文章散散心。

    呼延十
  • 腾讯正式开源图计算框架Plato,十亿级节点图计算进入分钟级时代

    ? 腾讯开源再次迎来重磅项目,14日,腾讯正式宣布开源高性能图计算框架Plato,这是在短短一周之内,开源的第五个重大项目。 相对于目前全球范围内其它的图计算...

    腾讯技术工程官方号

扫码关注云+社区

领取腾讯云代金券