主要内容

过滤多像素视频流

此示例演示如何设计在多像素输入视频流上运行的过滤器。使用多像素流处理具有与单像素流接口相同的合成时钟频率的高分辨率或高帧速率视频。多像素流还提高了模拟速度和吞吐量,因为需要的迭代次数更少red用于处理每个帧,同时保持流接口的硬件优势。

示例模型有三个子系统,每个子系统执行相同的算法:

  • 单像素高斯成像:使用图像过滤器和边缘检测器块对单个像素流进行操作。这个子系统展示了单像素流的速率和接口如何与多像素设计进行比较。

  • 多像素高斯分布:使用图像过滤器和边缘检测器块对多像素流进行操作。这个子系统展示了如何使用库块的多像素接口。

  • 多像素高斯分布:使用Line Buffer块为多像素流建立高斯滤波器和Sobel边缘检测。这个子系统展示了如何使用Line Buffer输出进行多像素设计。

处理多像素视频流允许在不相应增加时钟频率的情况下实现更高的帧率。每个子系统都可以在Xilinx ZC706板上实现200MHz的时钟频率。480p视频流有每行总像素数x视频线路总数=每帧800*525个循环。使用单个像素流,您可以处理200M/(800*525)=475帧/秒。在多像素子系统中,每个周期处理4个像素,这将每行的周期数减少到200。这意味着,在480p流上,以200MHz的频率,一次处理4个像素的多像素流,每秒可以处理1900帧。如果分辨率从480p增加到1080p,则80帧在单像素情况下,每秒可以实现,而对于4个像素,每秒可以实现323帧,对于8个像素,每秒可以实现646帧。

使用库块的多像素流

通过设置从帧到像素块生成一个多像素流数量的像素4.或者8..的默认值1.返回采样率为的标量像素流每行总像素数*视频线路总数比帧速率快。该速率在示例模型中显示为红色。这两个多像素子系统使用具有数量的像素设置为4..该配置在每个时钟周期返回4个像素,采样率为(每行总像素数/ 4) *视频线路总数. 较低的输出速率(在模型中为绿色)表明,您可以将输入帧速率或分辨率提高4倍,从而使用与单像素情况相同的时钟频率在同一帧周期内处理4倍的像素。

这个单像素高斯成像多像素高斯分布子系统使用图像过滤器和边缘检测器块计算相同的结果。

多像素高斯分布,块接受并返回四个像素在每个时钟周期。你不必为多像素流配置块,它们检测端口上的输入大小。这个像素控制总线表示每组4个像素在帧中的有效性和位置。块缓冲区[4x1]流形成4 [KernelHeightx核宽度]内核,并并行计算四个卷积以给出[4x1]输出。

自定义多像素算法

这个多像素高斯分布子系统使用行缓冲区块实现自定义过滤算法。此子系统类似于库块内部实现多像素内核操作的方式。图像过滤器和边缘检测器块使用比此处所示更详细的优化。此实现显示了构建自定义多像素的起点el算法使用行缓冲块的输出。

自定义过滤器和自定义边缘检测器使用行缓冲区块连续返回[KernelHeightx像素数]地区。每个区域都传递给KernelIndex子系统,该子系统使用缓冲和索引逻辑来形成像素数*[KernelHeightx核宽度]过滤内核。然后将每个内核传递给单独的FilterKernel子系统,以并行执行卷积。

从行缓冲区输出形成内核

KernelIndexer子系统从Line Buffer块的2d输出形成4 [5x5]滤波内核。

该图显示了如何从[5x4]输出流中提取以[4x1]输出中第一个像素为中心的内核的过滤器内核。第一个内核包括两个相邻的[5x4]行缓冲区输出的像素。

以[4x1]输出中最后一个像素为中心的核也包括第三个相邻的[5x4]输出。因此,为了形成4个[5x5]内核,子系统必须从3个[5x4]矩阵中访问列。

KernelIndexer子系统使用当前的[5x4]输入,并使用寄存器存储另外两个[5x4]矩阵可移动.这种设计类似于使用单像素流的线缓冲器的抽头延迟线。子系统然后访问跨列的像素数据,以形成4个[5x5]内核。当块有多个像素输入时,Image Filter块在内部使用相同的逻辑。该块在编译时为任何受支持的内核大小自动设计此逻辑。金宝app

实现过滤器

由于输入的多像素流是一个[4x1]向量,过滤器必须在每个周期上执行四次卷积以跟上输入数据。有四个并行过滤器内核子系统,每个子系统执行相同的操作。[5x5]矩阵乘法实现为[5x1]向量乘法,通过为每个包含流水线乘法器的子系统使用a。输出被传递到加法器树。加法器树也是流水线的,流水线延迟被应用到像素控制信号匹配。然后将四个FilterKernel子系统的结果连接成一个[4x1]输出向量。

实现边缘检测器

为了匹配边缘检测器块的算法,这个自定义边缘检测器使用[3x3]的核大小。将用于[3x3]边缘检测的KernelIndexer子系统与上面描述的[5x5]内核进行比较。该算法仍然必须从Line Buffer块的输出中访问三个连续的矩阵(包括在内核的任何一边的填充)。然而,该算法节省了更少的列来形成更小的过滤器内核。

扩展到更大的内核大小

对于[4x1]多像素流,KernelIndexer逻辑看起来与[11x11]内核大小相似。在这个尺寸下,填充像素的数量,(楼层(11/2))=5,将在从行缓冲区返回的两个[11x4]矩阵上重叠。这种重叠意味着算法需要存储行缓冲区中的五个[5x4]矩阵,以便在每个循环中形成四个[11x11]内核。

改善模拟时间

在默认的示例配置中,单个像素、多像素和自定义多像素子系统都并行运行。仿真速度受到处理单像素路径的时间限制,因为处理相同大小的帧需要更多的迭代。为了观察多像素流模拟速度的提高,注释掉单像素数据路径。

HDL实现结果

HDL是由两个多像素高斯分布子系统和多像素高斯分布在Xilinx™ZC706板上通过Place和Route。这个多像素高斯分布子系统不尝试优化系数,结果如下-

T = 4x2 table Resource Usage _________ _____ DSP48 108 Flip Flop 9842 LUT 4960 BRAM 12

这个多像素高斯分布子系统,使用优化的Image Filter和Edge Detector块使用更少的资源,如下表所示。这个比较显示了由于块分析滤波器结构和预添加重复系数而节省的资源。

T = 4x2 table Resource Usage _________ _____ DSP48 16 Flip Flop 3959 LUT 1789 BRAM 10

另见

|||

相关话题