过滤器的多像素视频流

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

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

  • SinglePixelGaussianEdge:使用图像过滤器和边缘检测块上的单个像素流进行操作。该子系统显示了如何单像素的速率和接口流式比较多像素设计。

  • MultiPixelGaussianEdge:使用图像过滤器和边缘检测块上的多像素流进行操作。该子系统展示了如何使用与库块的多像素接口。

  • MultiPixelCustomGaussianEdge:使用行缓冲器块来构建一个高斯滤波器和Sobel边缘检测为多像素流。该子系统展示了如何使用多像素设计在线缓冲器输出。

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

多像素流媒体使用库块

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

SinglePixelGaussianEdgeMultiPixelGaussianEdge子系统使用图像滤波器和边缘检测块计算相同的结果。

MultiPixelGaussianEdge,块接受,并在每个时钟周期返回四个像素。您不必配置多像素流块,他们检测端口输入的内容。的pixelcontrol总线表示各组的四个像素的帧的有效性和位置。块缓冲[4X1]流以形成四个[KernelHeightxKernelWidth,并并行计算4个卷积,得到一个[4x1]输出。

自定义Multipixel算法

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

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

从行缓冲区输出形成内核

所述KernelIndexer子系统形式4 [5x5的]滤波器从行缓冲器块的2-d输出的内核。

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

内核上在[4X1]输出的最后一个像素为中心还包括第三相邻[5x4的]输出。所以,以形成四个[5×5]粒,从三个子系统必须访问列[5x4的]矩阵。

KernelIndexer子系统使用当前的[5x4]输入,并使用启用的寄存器存储另外两个[5x4]矩阵shiftEnable。这种设计是类似与使用行缓冲区单个像素流上使用的抽头延迟线。该子系统然后访问跨各列的像素数据,以形成四个[5×5]内核。图像滤波器块使用此相同的逻辑内部时,块具有多像素的输入。块自动设计在编译时间,以任何支持的内核大小此逻辑。金宝app

实现过滤器

由于输入多像素流是[4X1]载体,该过滤器必须在每个周期执行四项卷积,以保持与输入数据速度。有四个平行FilterKernel子系统各自执行相同的操作。所述[5×5]矩阵乘法被乘以平坦化输入矩阵,并且使用对于包含流水线乘法器每个子系统实现为[25×]载体。输出传递到加法器树。加法树又流水线和流水线延时被应用到pixelcontrol信号匹配。然后将四个FilterKernel子系统的结果连接到一个[4x1]输出向量中。

实现边缘检测器

为了匹配边缘检测器块的算法,此自定义边缘检测器使用[3×3]内核的大小。比较这KernelIndexer子系统为[3×3]边缘检测用[5×5]内核如上所述。该算法仍然必须从行缓冲器块的输出(包括内核的任一侧填充)访问三个相继矩阵。然而,该算法可以节省少列,以形成一个较小的滤波器内核。

延伸到大内核大小

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

提高仿真时间

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

HDL实现结果

HDL是由MultiPixelGaussianEdge子系统和MultiPixelCustomGaussianEdge子系统,并通过布局和布线换上了赛灵思™ZC706板。的MultiPixelCustomGaussianEdge子系统,不尝试优化系数,有以下结果-

T = 4×2表资源使用_________ _____ DSP48 108触发器4195 LUT 4655 BRAM 12

MultiPixelGaussianEdge子系统,其使用优化的图像过滤器和边缘检测块使用较少的资源,如表中所示的下方。该比较示出了资源节省实现,因为块分析滤波器结构和预加重复系数。

T = 4x2表资源使用与DSP48 16触发器3959 LUT 1797 BRAM 10

另请参阅

|||

相关的话题