主要内容

在Simulink中设计HDL视频处理算法

这个例子展示了如何使用Vision HDL Toolbox™块设计一个面向硬件的图像过滤器。它还使用了计算机视觉工具箱™块。

Simulink®中面向硬件的视频处理模型的主要特征是:

  • 流像素接口:在视觉HDL工具箱中的块使用流像素接口。串行处理对于硬件设计是有效的,因为存储用于计算的像素数据所需的内存更少。串行接口允许块独立于图像大小和格式运行,并使设计对视频定时错误更有弹性。有关更多信息,请参见流像素接口

  • 针对HDL代码生成的子系统:通过从Vision HDL Toolbox库中选择块,设计一个硬件友好的像素流视频处理模型。针对HDL代码生成的设计部分必须在单独的子系统中。

  • 转换到基于帧的视频:为了验证,您可以显示基于帧的视频,或将硬件兼容设计的结果与Simulink行为模型的输出进行比较。Vision HDL Toolbox提供了一个块,允许您对设计的输出进行反序列化。

开放模式模板

本教程使用一个Simulink模型模板开始。

单击Simulink按钮,或键入动态仿真模块在MATLAB®命令提示符。在Simulink开始页面,找到Vision HDL工具箱部分,并单击基本模型模板。

该模板创建一个您可以自定义的新模型。用新名称保存模型。

导入数据

该模板包含一个Video Source块,其中包含一个240p视频样本。每个像素都是一个标量uint8代表强度值。一个最佳实践是,在扩展到更大的图像尺寸之前,使用较小的帧大小来设计和调试您的设计,以便快速调试周期。您可以使用这个240p源来调试针对1080p视频的设计。

序列化数据

帧到像素块将有框的视频转换为像素流和控制结构。该块为以HDL代码生成为目标的子系统提供输入,但它本身不支持HDL代码生成。

模板包含此块的一个实例。若要使用标准视频格式进行模拟,请选择与输入源匹配的预定义视频填充格式。若要使用自定义大小的图像进行模拟,请选择要围绕在图像周围的非活动区域的尺寸。本教程使用标准视频格式。

打开“帧到像素”块对话框查看设置。源视频为240p灰度格式。标量整数表示每个像素的强度值。要匹配输入的视频,设置数量的组件到1,和视频格式240 p。

注意:视频源的采样时间必须与您在“帧到像素”块中选择的帧大小中的像素总数相匹配。设置采样时间为每行总像素×共线.在InitFcn回调,模板创建一个工作区变量,totalPixels为240p帧的采样时间。

设计HDL-Compatible模型

通过修改HDL算法子系统,设计了一个针对HDL代码生成的子系统。子系统输入和输出端口使用上一节中描述的流像素格式。打开HDL算法子系统来编辑它。

在Simulink库浏览器中,单击Vision HDL工具箱。您也可以通过键入打开这个库visionhdllib在MATLAB命令提示符。

选择一个图像处理块。此示例使用图像滤波筛选子库中的块。还可以通过键入访问该库visionhdlfilter在MATLAB命令提示符。将图像过滤器块添加到HDL算法子系统并连接端口。

打开Image Filter块,并进行以下更改:

  • 滤波器系数(4, 4) / 16实现4×4 blur操作。

  • 填充方法对称的

  • 线缓冲区大小到2的幂,以适应所需的最大帧格式的活动行大小。该参数不影响模拟速度,因此在用较小的测试图像进行模拟时不需要降低。默认的2048支持1080p视频格式。

  • 数据类型选项卡,在数据类型,设置系数fixdt(0、1、4)

设计行为模型

您可以将针对hdl的设计与行为模型进行可视化或数学比较,以验证硬件设计并监视量化错误。该模板包含一个行为模型子系统,该子系统具有用于此目的的基于框架的输入和输出端口。双击行为模型来编辑它。

对于本教程,添加二维滤波器(计算机视觉工具箱)从计算机视觉工具箱™的块。这个块一次过滤整个帧。

打开二维FIR Filter块,并进行以下更改,以匹配Vision HDL工具箱中的Image Filter块的配置:

  • 系数(4, 4) / 16实现4×4 blur操作。

  • 填充选项对称的

  • 数据类型选项卡,在数据类型,设置系数fixdt(0、2、4)

反序列化经过过滤的像素流

使用模板中包含的Pixels To Frame块来反序列化要显示的数据。

打开像素到帧块。设置图像尺寸属性以匹配输入视频和在“帧到像素”块中指定的设置。对于本教程,使用数量的组件设置为1,而视频格式设置为240p。该块将输出像素流和控制信号转换回表示帧的矩阵。

显示结果并与行为模型进行比较

使用模板中包含的Video Viewer块可视地比较输出帧。的validOut像素到帧块的信号连接到启用查看器的端口。运行模型以显示结果。

生成HDL代码

一旦你的设计在模拟中工作,你可以使用HDL Coder™为HDL算法子系统生成HDL代码。看到从Simulink生成HDL代码

相关的例子

更多关于

Baidu
map