CN110648287B - 盒式滤波器并行高效计算方法 - Google Patents
盒式滤波器并行高效计算方法 Download PDFInfo
- Publication number
- CN110648287B CN110648287B CN201910788715.0A CN201910788715A CN110648287B CN 110648287 B CN110648287 B CN 110648287B CN 201910788715 A CN201910788715 A CN 201910788715A CN 110648287 B CN110648287 B CN 110648287B
- Authority
- CN
- China
- Prior art keywords
- layer
- filter
- tree
- pixels
- filter kernel
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T5/00—Image enhancement or restoration
- G06T5/70—Denoising; Smoothing
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T5/00—Image enhancement or restoration
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T7/00—Image analysis
- G06T7/40—Analysis of texture
- G06T7/41—Analysis of texture based on statistical description of texture
- G06T7/44—Analysis of texture based on statistical description of texture using image operators, e.g. filters, edge density metrics or local histograms
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F1/00—Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
- G06F1/04—Generating or distributing clock signals or signals derived directly therefrom
- G06F1/10—Distribution of clock signals, e.g. skew
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/30105—Register structure
- G06F9/30109—Register structure having multiple operands in a single register
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3838—Dependency mechanisms, e.g. register scoreboarding
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/545—Interprogram communication where tasks reside in different layers, e.g. user- and kernel-space
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T5/00—Image enhancement or restoration
- G06T5/20—Image enhancement or restoration using local operators
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Probability & Statistics with Applications (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Image Processing (AREA)
Abstract
本发明提供了一种盒式滤波器并行高效计算方法本发明提出了两种并行实现盒式过滤器的体系结构,并通过构造一个加法树来减少所需的资源,本发明具有如下特点:基于“部分和”算法,本发明提出了两种适用于不同参数组合的体系结构,它们消除了算法的固有数据依赖性,因此可以任意并行;本发明通过使用加法树重用所有中间结果,这大大减少了算法并行性所需的计算资源;本发明开发了一个程序,可以根据输入参数合成自动生成一个盒式滤波器代码,该代码可以被高层次综合工具接受。
Description
技术领域
本发明涉及一种盒式滤波器的快速有效的计算方法,盒式滤波器通常用于各种图像和视频处理应用中,它们也被广泛应用于实现其他算法。
背景技术
在计算机视觉领域,可能需要在算法中使用大量的盒式滤波器。盒式滤波器是一种平滑滤波器,可用于计算内核中所有像素的平均值。因此,盒式滤波器的实现应该足够快,以便即使大量使用也不会消耗太多时间。出于同样的原因,盒式滤波器的实现应该更经济,这样它就不会消耗太多的资源。
过去的研究项目试图在不同的计算平台中加速盒式滤波器,如图形处理单元(GPU)或现场可编程门阵列(FPGA)。在某些研究(Christoph Rhemann,Asmaa Hosni,Michael Bleyer,Carsten Rother,and Margrit Gelautz.Fast cost-volume filteringfor visual correspondence and beyond.CVPR 2011,pages 3017–3024,2011.;ZiyangMa,Kaiming He,Yichen Wei,Jian Sun,and Enhua Wu.Constant time weighted medianfiltering for stereo matching and beyond.2013IEEE International Conference onComputer Vision,pages 49–56,2013.;H.Gupta,D.S.Antony,and R.G.N.Implementationof gaussian and box kernel-based approximation of bilateral filter usingOpenCL.In 2015International Conference on Digital Image Computing:Techniquesand Applications(DICTA),pages 1–5,Nov 2015.)中,使用GPU来加速一系列盒式滤波器,这些盒式滤波器受益于CUDA/OpenCL提供的更大的可访问性。然而,对于功率受限的系统,FPGA正在成为竞争日益激烈的替代方案。在其他一些研究(Hadi Parandeh-Afshar,Arkosnato Neogy,Philip Brisk,and Paolo Ienne.Compressor tree synthesis oncommercial high-performance fpgas.TRETS,4:39:1–39:19,2011.)中公开了使用FPGA实现盒式滤波器的原始方法。不幸的是,虽然现有研究提高了盒式滤波器的速度,但它们还没有充分考虑FPGA的并行化能力。它与普通算法不同,这种Z字形扫描方法使得必须具有额外的行缓冲器辅助以与其他算法协作,这也导致资源的浪费和通用性受限。
通常人们使用以下几种方法来计算盒式滤波器:
通用方法:只是简单的内核中的数字一个一个加起来。每一轮都是这样计算:该方法在操作之间没有依赖性,因此可以任意并行以实现高速。但是,这种方法计算复杂度太高,对每一个像素平均需要(2r+1)2个计算。这使得它的实现会消耗大量资源。
积分图方法:积分图的定义是从坐标原点到当前位置所有像素的加和。使用这种方法时,首先计算积分图:然后使用积分图来计算最终结果:F(x,y)=Box(x+r,y+r)-Box(x-r-1,y+r)-Box(x+r,y-r-1)+Box(x-r-1,y-r-1)。这种计算方法要求我们缓存积分图以用于后续计算。我们至少需要缓存(2r+1)×W+(2r+1)个中间结果,每个结果需要消耗个比特。这对于硬件实现来说是过于昂贵而不可接受的。
部分和方法:首先计算部分和,然后使用部分和来计算最终结果。此计算可节省资源,但它具有很强的依赖性,并且无法通过并行化加速。
发明内容
本发明的目的是提供一种盒式滤波器的快速有效的计算方法。
为了达到上述目的,本发明的技术方案是提供了一种盒式滤波器并行高效计算方法,将滤波器核自盒式滤波器的左上角开始自左向右、自上向下移动,设滤波器核的半径为r,则滤波器核由(2r+1)列像素组成,每一列像素由(2r+1)行像素组成,则滤波器核自左向右移动时每次移动一列,滤波器核自上向下移动时每次移动一行,将滤波器核内所有像素的平均值定义为像素平均值,计算每次移动后的滤波器核所对应的像素平均值,所有滤波器核所对应的像素平均值即为盒式滤波器的计算结果,其特征在于,计算所有滤波器核所对应的平均值包括以下步骤:
步骤1、针对给定的并行度N及滤波器核的半径r建立两种并行的架构,分别为不需要额外寄存器的架构及需要额外寄存器的架构,其中:
在不需要额外寄存器的架构中,每个时钟周期内并行计算滤波器核在某次自左向右移动过程中所形成的所有像素平均值中N个像素平均值,每个像素平均值直接由所有部分和相加而得,部分和为一列像素的像素值的和;
在需要额外寄存器的架构中,每个时钟周期内并行计算滤波器核在某次自左向右移动过程中所形成的所有像素平均值中N个像素平均值,对于当前时钟周期T而言,在寄存器中存储有上一时钟周期(T-1)的N个滤波器核所在位置的像素平均值,则当前时钟周期T的任一滤波器核所在位置FT(x,y)由上一时钟周期的滤波器核所在位置FT-1(x,y)自左向右移动N次得到,即FT-1(x,y)=FT(x-N,y),设当前时钟周期T的滤波器核所在位置FT(x,y)的像素平均值为FT(x,y),存储于寄存器内的上一时钟周期的滤波器核所在位置FT-1(x,y)的像素平均值为FT-1(x,y),则有:
FT(x,y)=FT-1(x,y)-SS-+SS+,式中,SS-表示滤波器核所在位置FT-1(x,y)自左向右移动N次时,滤波器核所在位置FT-1(x,y)的左侧边缘所经过的N列像素的像素值的和,每一列像素的像素值的和定义为一个部分和;SS+表示滤波器核所在位置FT-1(x,y)自左向右移动N次时,滤波器核所在位置FT-1(x,y)的右侧边缘所经过的N列像素的像素值的和,每一列像素的像素值的和定义为一个部分和;
步骤2、针对步骤1建立的两种架构分别建立加法树,分别定义为加法树一及加法树二,其中建立两个加法树二,分别用于计算每个SS-及每个SS+;
步骤3、自顶向下搜索加法树一及加法树二,分别通过加法树一及加法树二计算各个滤波器核所对应的像素平均值,计算当前滤波器核时重用计算之前滤波器核时相同的部分和,统计步骤1建立的两种架构分别需要耗费的资源;
步骤4、选择步骤1建立的耗费资源少的架构来计算盒式滤波器。
优选地,建立所述加法树一的约束条件包括:1)加法树一的输入为(2r+N)个所述部分和;2)加法树一同时计算N个输出,每个输出为滤波器核的像素平均值;3)每个输出都是2r+1个相邻输入的和;
所述加法树一的建树方式包括:1)是几颗组合在一起的二叉树,共有[log2(2r+1)+1层,分别为第0层至第[log2(2r+1)层;2)第0层的每个节点为一个所述部分和,从第1层至第[log2(2r+1)层的每一层,相邻节点的起始元素在输入中的索引相差2;每一层每个节点所包含的元素数目是2的层数次幂;
加法树一的各层节点以得到输出的组合方式为:将2r+1表示为M位二进制数,从右至左二进制数的第1位至第M位依次对应加法树一的第0层至第M-1层,在M位二进制数中值为1的位所对应的层数上,按照从高到低、从左到右的顺序寻找所需要的节点并组合形成输出。
优选地,建立用于计算每个SS-或用于计算每个SS+的所述加法树二的约束条件为:1)加法树二的输入为(2N-1)个所述部分和;2)加法树二的每个输出都是N个相邻输入的和;3)加法树二同时计算N个输出,每个输出为一个SS-或一个SS+;
所述加法树二的建树方式:1)是几颗组合在一起的二叉树,一共有log2N+1层,分别为第0层至第log2N层;2)第0层的每个节点为一个所述部分和,从而第1层开始,每一层相邻节点的起始元素在输入中的索引相差2;3)将位于第0层的第N个节点分别与第1层中的第N/2-1个节点、第N/2个节点组合,生成的新节点包含双亲节点的所有元素,生成的新节点仍位于第1层并与其第1层中的父节点占据同一位置;4)计算第2层时,优先选用第1层中包含三个元素的节点,除非不能满足第2)个条件;5)其余层构建方式与所述加法树一的相同
加法树二的各层节点以得到输出的组合方式为:自顶向下、自左向右寻找节点进行组合,本层没有合适的用于组合的元素时进入下一层。
本发明提出了两种并行实现盒式过滤器的体系结构,并通过构造一个加法树来减少所需的资源,本发明具有如下特点:
(1)基于“部分和”算法,本发明提出了两种适用于不同参数组合的体系结构,它们消除了算法的固有数据依赖性,因此可以任意并行;
(2)本发明通过使用加法树重用所有中间结果,这大大减少了算法并行性所需的计算资源;
(3)本发明开发了一个程序,可以根据输入参数合成自动生成一个盒式滤波器代码,该代码可以被高层次综合工具接受。
附图说明
图1为盒式滤波器的设计示意图;
图2为Sy(x+r,y)的计算示意图;
图3为F(x,y)的计算示意图;
图4为不需要额外寄存器的架构所采用的滤波器核的像素平均值的计算示意图;
图5为需要额外寄存器的架构所采用的滤波器核的像素平均值的计算示意图;
图6为加法树一的构建示意图;
图7为加法树一的构建示意图。
具体实施方式
下面结合具体实施例,进一步阐述本发明。应理解,这些实施例仅用于说明本发明而不用于限制本发明的范围。此外应理解,在阅读了本发明讲授的内容之后,本领域技术人员可以对本发明作各种改动或修改,这些等价形式同样落于本申请所附权利要求书所限定的范围。
如图1所示,图1中的外框等效为盒式滤波器,位于中心的小框等效为滤波器核。r为滤波器核的半径,为计算盒式滤波器时的外部输入值,则滤波器核的当前位置F(x,y)由(2r+1)列像素组成,每一列像素由(2r+1)行像素组成。将滤波器核内所有像素的平均值定义为像素平均值。以盒式滤波器的中心像素为原点建立XY作标轴,则对于滤波器核的当前位置F(x,y),其像素平均值为F(x,y),则有:
式中,I(x,y)为滤波器核的当前位置F(x,y)中作标为第x列第y行,即作标为(x,y),的像素点的像素值;(X,Y)为滤波器核的当前位置F(x,y)的中心像素点的作标;dx、dy分别为相对于X、Y的偏移量。
计算盒式滤波器时将滤波器核自盒式滤波器的左上角开始自左向右、自上向下移动。滤波器核自左向右移动时每次移动一列,滤波器核自上向下移动时每次移动一行。滤波器核每移动一次就能够得到不同的像素平均值,计算盒式滤波器的目标是计算所有的像素平均值。
本发明基于现有的“部分和”算法,提出了两种适用于不同参数组合的体系结构,它们消除了算法的固有数据依赖性,因此可以任意并行。以下对“部分和”算法做简单介绍:
对于半径为r的滤波器核,这种方先计算每一列像素中2r+1行像素的像素值的和,例如对于第x+r列像素,将其中2r+1行像素的像素值的和定义为Sy(x+r,y),如图2所示。计算Sy(x+r,y)时,采用先前计算的结果Sy(x+r,y-1),Sy(x+r,y-1)为将当前的第x+r列像素向上移动一行所对应的那一列像素的像素值的和。则有:Sy(x+r,y)=Sy(x+r,y-1)+I(x+r,y+r)-I(x+r,y-r-1)。即将当前的第x+r列像素看作是由相同位置的一列像素下移一行得到的,那一列像素向下移时,其上边缘向下移动经过的一个像素的像素值为I(x+r,y-r-1),同时,那一列像素向下移时,其下边缘向下移动经过的一个像素的像素值为I(x+r,y+r)。随后用每一列像素的和来计算滤波器核的像素平均值。
如图3所示,滤波器核的当前位置F(x,y)内的像素平均值F(x,y)表示为:F(x,y)=F(x-1,y)+Sy(x+r,y)-Sy(x-r-1,y),式中,F(x-1,y)为滤波器核的当前位置F(x,y)自左向右移动前的滤波器核的前一位置F(x-1,y)内所有像素的平均值;(X,Y)为滤波器核的当前位置F(x,y)中心像素的坐标;Sy(X+r,y)表示第X+r列像素的像素值的和,Sy(X-r-1,y)表示第X-r-1列像素的像素值的和。即滤波器核的前一位置F(x-1,y)左向右移动一列有形成滤波器核的当前位置F(x,y),则Sy(X+r,y)对应于滤波器核的前一位置F(x-1,y)移动时其右侧边缘经过的一列像素的像素值和,Sy(X-r-1,y)对应于滤波器核的前一位置F(x-1,y)移动时其右侧边缘经过的一列像素的像素值和。
我们希望能够并行计算多个像素平均值以提高计算速度。假设约定的并行度为N,则我们希望同时得到N个像素平均值:F(x,y),F(x+1,y),F(x+2,y),...,F(x+N-1,y)。这要求计算这些最终结果的过程是相互独立的。而原始的部分和算法公式为F(x,y)=F(x-1,y)+Sy(X+r,y)-Sy(X-r-1,y),可见F(x,y)的计算依赖于F(x-1,y)的计算结果。
为此,本发明针对给定的并行度N及滤波器核的半径r设计了可并行的两种构架,分别为不需要额外寄存器的架构及需要额外寄存器的架构,其中:
在不需要额外寄存器的架构中,在计算最终结果时,直接将所有部分和相加,部分和为一列像素的像素值的和,而不利用之前的计算结果。举例:并行度N=2,需同时计算像素平均值F0和像素平均值F1,计算方式如图4所示。图4中,Sa至Sh均为不同列像素的像素值的和,则像素平均值F0即为将Sa累加至Sg,像素平均值F1为将Sb累加至Sh。在不需要额外寄存器的架构中,像素平均值的计算公式可以总结为:
式中,Sy(x,y)表示第x列像素的像素值的和,(X,Y)为滤波器核当前位置的中心像素。
在需要额外寄存器的架构中,每个时钟周期内一次计算位于同一行的N个滤波器核的像素平均值,对于当前时钟周期T而言,在寄存器中存储有上一时钟周期(T-1)的N个滤波器核的像素平均值,则当前时钟周期T的任一滤波器核所在位置FT(x,y)由上一时钟周期的滤波器核所在位置FT-1(x,y)自左向右移动N次得到,即FT-1(x,y)=FT(x-N,y),设当前时钟周期T的滤波器核所在位置FT(x,y)的像素平均值为FT(x,y),存储于寄存器内的上一时钟周期的滤波器核所在位置FT-1(x,y)的像素平均值为FT-1(x,y),则有:
FT(x,y)=FT-1(x,y)-SS-+SS+,式中,SS-表示滤波器核所在位置FT-1(x,y)自左向右移动N次时,滤波器核所在位置FT-1(x,y)的左侧边缘所经过的N列像素的像素值的和,每一列像素的像素值的和定义为一个部分和,SS+表示滤波器核所在位置FT-1(x,y)自左向右移动N次时,滤波器核所在位置FT-1(x,y)的右侧边缘所经过的N列像素的像素值的和,每一列像素的像素值的和定义为一个部分和,举例:并行度N=2,需同时计算像素平均值F0和像素平均值F1,计算方式如图5所示。图5中,Sa至Sj均为不同列像素的像素值的和,F0’及F1’为存储在寄存器内的上一时钟周期的像素平均值,则有:F0=F0’-Sa-Sb+Sh+Si,F1=F1’-Sb-Sc+Si+Sj。
假设并行度N=6,滤波器内核半径r=4,在使用部分Sy(x,y)和计算最终结果F(x,y)的过程中,进行了运算:
A)对于不需要额外寄存器的架构,按照图4中的公式,需要同时运算如下六个等式。共需要2Nr=48个加法器:
i.F0=Sa+Sb+Sc+Sd+Se+Sf+Sg+Sh+Si
ii.F1=Sb+Sc+Sd+Se+Sf+Sg+Sh+Si+Sj
iii.F2=Sc+Sd+Se+Sf+Sg+Sh+Si+Sj+Sk
iv.F3=Sd+Se+Sf+Sg+Sh+Si+Sj+Sk+Sl
v.F4=Se+Sf+Sg+Sh+Si+Sj+Sk+Sl+Sm
vi.F5=Sf+Sg+Sh+Si+Sj+Sk+Sl+Sm+Sn
B)对于需要额外寄存器的架构,按照图5中的公式,需要同时运算如下12个等式,共需2(N-1)2=60个加法器:
本发明通过使用加法树重用上述架构中的所有中间结果,这大大减少了算法并行性所需的计算资源。
适用于不需要额外寄存器的架构的加法树一,用以进行上述步骤A)中的运算过程。使用加法树后所需要的加法器数目降低为20个。
通过以下几个方面构建加法树一:
第一)需求
1)需要2r+N个输入,如上述步骤A)中N=6、r=4,则输入为Sa至Sn共14个;
2)每个输出都是2r+1个相邻输入的和,如上述步骤A)中r=4,则输出F为9个S相加;
3)同时计算N个输出,如上述步骤A)中N=6,则同时计算F0至F5共6个输出。
第二)建树方式
1)这是几颗组合在一起的二叉树,[log2(2r+1)+1层,分别为第0层至第[log2(2r+1)层;
2)每一层相邻节点的起始元素在输入中的索引相差2;
3)每一层每个节点所包含的元素数目是2的层数次幂。
如图6所示,a至n分别为不同列的像素的像素值的和,即为输入,其为第0层的节点,第1层的节点包含的元素为bc、de等,其他层以此类推。
第三)组合方式
将2r+1表示为二进制,在值为1的位所对应的层数上,按照从高到低,从左到右的顺序寻找所需要的节点并组合。
举例:2r+1=19=10011。则需要在第4层,第1层和第0层寻找节点进行组合,组合后得到输出。
通过以下几个方面构建用于计算SS-的加法树二(构建用于计算SS+的加法树二与此相同):
第一)需求
1)需要2N-1个输入,例如上述步骤B)中N=6、r=4,则输入为Sa至Sk共11个;
2)每个输出都是N个相邻输入的和,例如上述步骤B)中N=6,则输出SS为6个S相加;
第二)建树方式
1)这是几颗组合在一起的二叉树,log2N+1层,分别为第0层至第log2N层。
2)每一层,相邻节点的起始元素在输入中的索引相差2。
3)将第N个输入元素(位于第0层)分别与第一层中的第N/2-1个节点、第N/2个节点组合。生成的新节点包含双亲节点的所有元素。生成的新节点仍位于第一层并与其第一层中的父节点占据同一位置。
4)计算第二层时,优先选用第一层中包含三个元素的节点,除非不能满足第2个条件。
5)其余层构建方式与不需要额外寄存器的架构的加法树一相同。
如图7所示,a至k分别为不同列的像素的像素值的和,即为输入,其为第0层的节点。
第三)组合方式
自顶向下,自左向右寻找节点进行组合,本层没有合适的用于组合的元素时进入下一层。
使用加法树后,步骤A)及步骤B)中的运算变为:
对于不需要额外寄存器的架构,进行如下运算,共需要20个加法器:
i.tmp_bc=Sb+Sc;tmp_de=Sd+Se;tmp_fg=Sf+Sg;
ii.tmp_hi=Sh+Si;tmp_jk=Sj+Sk;tmp_lm=Sl+Sm;
iii.tmp_bcde=tmp_bc+tmp_de;tmp_defg=tmp_de+tmp_fg;
iv.tmp_fghi=tmp_fg+tmp_hi;tmp_hijk=tmp_hi+tmp_jk;
v.tmp_jklm=tmp_jk+tmp_lm;
vi.tmp_bcdefghi=tmp_bcde+tmp_fghi;
vii.tmp_defghijk=tmp_defg+tmp_hijk;
viii.tmp_fghihklm=tmp_fghi+tmp_jklm;
ix.F0=Sa+tmp_bcdefghi;F1=tmp_bcdefghi+Sj;
x.F2=Sc+tmp_defghijk;F3=tmp_defghijk+Sl;
xi.F4=Se+tmp_fghihklm;F5=tmp_fghihklm+Sn;
本发明还开发了一个程序,可以根据输入参数合成自动生成一个盒式滤波器代码,该代码可以被高层次综合工具接受:
a)这个程序包含两份人工编写的代码模板,分别使用以上描述的两种并行化架构之一;
b)这个程序读取输入参数(并行度N和滤波器内核半径r),随后根据上述规则生成两种架构所对应的加法树;
c)程序自顶向下搜索加法树,生成代码,并统计两种架构所需要耗费的资源;
d)比较并选择消耗资源更少的解决方案,填充代码模板,并输出可以被高层次综合工具接受的C++代码。
Claims (3)
1.一种盒式滤波器并行高效计算方法,将滤波器核自盒式滤波器的左上角开始自左向右、自上向下移动,设滤波器核的半径为r,则滤波器核由(2r+1)列像素组成,每一列像素由(2r+1)行像素组成,则滤波器核自左向右移动时每次移动一列,滤波器核自上向下移动时每次移动一行,将滤波器核内所有像素的平均值定义为像素平均值,计算每次移动后的滤波器核所对应的像素平均值,所有滤波器核所对应的像素平均值即为盒式滤波器的计算结果,其特征在于,计算所有滤波器核所对应的平均值包括以下步骤:
步骤1、针对给定的并行度N及滤波器核的半径r建立两种并行的架构,分别为不需要额外寄存器的架构及需要额外寄存器的架构,其中:
在不需要额外寄存器的架构中,每个时钟周期内并行计算滤波器核在某次自左向右移动过程中所形成的所有像素平均值中N个像素平均值,每个像素平均值直接由所有部分和相加而得,部分和为一列像素的像素值的和;
在需要额外寄存器的架构中,每个时钟周期内并行计算滤波器核在某次自左向右移动过程中所形成的所有像素平均值中N个像素平均值,对于当前时钟周期T而言,在寄存器中存储有上一时钟周期(T-1)的N个滤波器核的像素平均值,则当前时钟周期T的任一滤波器核所在位置FT(x,y)由上一时钟周期的滤波器核所在位置FT-1(x,y)自左向右移动N次得到,即FT-1(x,y)=FT(x-N,y),设当前时钟周期T的滤波器核所在位置FT(x,y)的像素平均值为FT(x,y),存储于寄存器内的上一时钟周期的滤波器核所在位置FT-1(x,y)的像素平均值为FT-1(x,y),则有:
FT(x,y)=FT-1(x,y)-SS-+SS+,式中,SS-表示滤波器核所在位置FT-1(x,y)自左向右移动N次时,滤波器核所在位置FT-1(x,y)的左侧边缘所经过的N列像素的像素值的和,每一列像素的像素值的和定义为一个部分和;SS+表示滤波器核所在位置FT-1(x,y)自左向右移动N次时,滤波器核所在位置FT-1(x,y)的右侧边缘所经过的N列像素的像素值的和,每一列像素的像素值的和定义为一个部分和;
步骤2、针对步骤1建立的两种架构分别建立加法树,分别定义为加法树一及加法树二,其中建立两个加法树二,分别用于计算每个SS-及每个SS+;
步骤3、自顶向下搜索加法树一及加法树二,分别通过加法树一及加法树二计算各个滤波器核所对应的像素平均值,计算当前滤波器核时重用计算之前滤波器核时相同的部分和,统计步骤1建立的两种架构分别需要耗费的资源;
步骤4、选择步骤1建立的耗费资源少的架构来计算盒式滤波器。
2.如权利要求1所述的一种盒式滤波器并行高效计算方法,其特征在于,建立所述加法树一的约束条件包括:1)加法树一的输入为(2r+N)个所述部分和;2)加法树一同时计算N个输出,每个输出为滤波器核的像素平均值;3)每个输出都是2r+1个相邻输入的和;
所述加法树一的建树方式包括:1)是几颗组合在一起的二叉树,共有[log2(2r+1)]+1层,分别为第0层至第[log2(2r+1)]层;2)第0层的每个节点为一个所述部分和,从第1层至第[log2(2r+1)]层的每一层,相邻节点的起始元素在输入中的索引相差2;每一层每个节点所包含的元素数目是2的层数次幂;
加法树一的各层节点以得到输出的组合方式为:将2r+1表示为M位二进制数,从右至左二进制数的第1位至第M位依次对应加法树一的第0层至第M-1层,在M位二进制数中值为1的位所对应的层数上,按照从高到低、从左到右的顺序寻找所需要的节点并组合形成输出。
3.如权利要求2所述的一种盒式滤波器并行高效计算方法,其特征在于,建立用于计算每个SS-或用于计算每个SS+的所述加法树二的约束条件为:1)加法树二的输入为(2N-1)个所述部分和;2)加法树二的每个输出都是N个相邻输入的和;3)加法树二同时计算N个输出,每个输出为一个SS-或一个SS+;
所述加法树二的建树方式:1)是几颗组合在一起的二叉树,一共有log2N+1层,分别为第0层至第log2N层;2)第0层的每个节点为一个所述部分和,从而第1层开始,每一层相邻节点的起始元素在输入中的索引相差2;3)将位于第0层的第N个节点分别与第1层中的第N/2-1个节点、第N/2个节点组合,生成的新节点包含双亲节点的所有元素,生成的新节点仍位于第1层并与其第1层中的父节点占据同一位置;4)计算第2层时,优先选用第1层中包含三个元素的节点,除非不能满足第2)个条件;5)其余层构建方式与所述加法树一的相同
加法树二的各层节点以得到输出的组合方式为:自顶向下、自左向右寻找节点进行组合,本层没有合适的用于组合的元素时进入下一层。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910788715.0A CN110648287B (zh) | 2019-08-26 | 2019-08-26 | 盒式滤波器并行高效计算方法 |
US17/054,169 US11094071B1 (en) | 2019-08-26 | 2020-06-17 | Efficient parallel computing method for box filter |
PCT/CN2020/096461 WO2021036424A1 (zh) | 2019-08-26 | 2020-06-17 | 盒式滤波器并行高效计算方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910788715.0A CN110648287B (zh) | 2019-08-26 | 2019-08-26 | 盒式滤波器并行高效计算方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110648287A CN110648287A (zh) | 2020-01-03 |
CN110648287B true CN110648287B (zh) | 2022-11-25 |
Family
ID=69009733
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910788715.0A Active CN110648287B (zh) | 2019-08-26 | 2019-08-26 | 盒式滤波器并行高效计算方法 |
Country Status (3)
Country | Link |
---|---|
US (1) | US11094071B1 (zh) |
CN (1) | CN110648287B (zh) |
WO (1) | WO2021036424A1 (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110648287B (zh) * | 2019-08-26 | 2022-11-25 | 上海科技大学 | 盒式滤波器并行高效计算方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8005881B1 (en) * | 2007-03-02 | 2011-08-23 | Xilinx, Inc. | Scalable architecture for rank order filtering |
CN105787910A (zh) * | 2015-12-24 | 2016-07-20 | 武汉鸿瑞达信息技术有限公司 | 一种人脸区域滤波方法基于异构平台的计算优化方法 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7889923B1 (en) * | 2007-05-31 | 2011-02-15 | Adobe Systems Incorporated | System and method for sparse histogram merging |
KR100973964B1 (ko) * | 2009-11-13 | 2010-08-05 | 재단법인대구경북과학기술원 | 영역 기반 영상 처리에서 병렬적인 박스 필터링을 수행하는 방법 및 장치 |
US8781234B2 (en) | 2010-10-01 | 2014-07-15 | Intel Corporation | Optimized fast hessian matrix computation architecture |
CN104571401A (zh) | 2013-10-18 | 2015-04-29 | 中国航天科工集团第三研究院第八三五八研究所 | 一种高速导向滤波器在fpga平台的实现装置 |
CN110097514A (zh) | 2019-04-18 | 2019-08-06 | 南京理工大学 | 基于学习余弦字典的稀疏逼近加速双边滤波方法 |
CN110648287B (zh) | 2019-08-26 | 2022-11-25 | 上海科技大学 | 盒式滤波器并行高效计算方法 |
-
2019
- 2019-08-26 CN CN201910788715.0A patent/CN110648287B/zh active Active
-
2020
- 2020-06-17 WO PCT/CN2020/096461 patent/WO2021036424A1/zh active Application Filing
- 2020-06-17 US US17/054,169 patent/US11094071B1/en active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8005881B1 (en) * | 2007-03-02 | 2011-08-23 | Xilinx, Inc. | Scalable architecture for rank order filtering |
CN105787910A (zh) * | 2015-12-24 | 2016-07-20 | 武汉鸿瑞达信息技术有限公司 | 一种人脸区域滤波方法基于异构平台的计算优化方法 |
Non-Patent Citations (3)
Title |
---|
基于FPGA的模板滤波IP核的设计与实现;李东等;《深圳大学学报(理工版)》;20181130(第06期);全文 * |
基于FPGA的高速FIR数字滤波器的设计;王心焕;《现代电子技术》;20070801(第15期);全文 * |
基于改进DA算法的高效FIR滤波器设计;李建军等;《仪表技术与传感器》;20180515(第05期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
US11094071B1 (en) | 2021-08-17 |
US20210248764A1 (en) | 2021-08-12 |
CN110648287A (zh) | 2020-01-03 |
WO2021036424A1 (zh) | 2021-03-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8996846B2 (en) | System, method and computer program product for performing a scan operation | |
US20180173676A1 (en) | Adaptive execution engine for convolution computing systems | |
CN114241388B (zh) | 基于时空记忆信息的视频实例分割方法和分割装置 | |
JP2021516382A (ja) | 機械学習のための画像変換 | |
CN115147598A (zh) | 目标检测分割方法、装置、智能终端及存储介质 | |
US10402196B2 (en) | Multi-dimensional sliding window operation for a vector processor, including dividing a filter into a plurality of patterns for selecting data elements from a plurality of input registers and performing calculations in parallel using groups of the data elements and coefficients | |
US6668020B2 (en) | Method for motion estimation in video coding | |
CN101727580A (zh) | 图像处理装置、电子介质和图像处理方法 | |
US10026148B2 (en) | Image recognition method, image recognition device and image recognition program | |
US12346816B2 (en) | Neural networks for embedded devices | |
CN110648287B (zh) | 盒式滤波器并行高效计算方法 | |
US9690752B2 (en) | Method and system for performing robust regular gridded data resampling | |
CN113672232A (zh) | 程序编译方法和装置 | |
CN110580880B (zh) | 一种基于rgb三角亚像素布局式的亚像素渲染方法、系统以及显示装置 | |
US20160232641A1 (en) | Method for efficient median filtering | |
US11682099B2 (en) | Hardware accelerator for integral image computation | |
KR20230159489A (ko) | 행렬 곱하기 동작들에 대한 행렬의 근사화 | |
EP3699863B1 (en) | IMAGE INTERPRETATION DEVICE | |
US9667960B1 (en) | Low complexity cost function for sub-pixel motion estimation | |
CN115546009B (zh) | 非极大值抑制算法的优化方法、装置以及设备、存储介质 | |
KR20200030524A (ko) | 연산 가속화가 적용된 신경망 모델의 생성 및 활용을 위한 장치 및 방법 | |
Liu et al. | Area efficient box filter acceleration by parallelizing with optimized adder tree | |
CN111986277B (zh) | 基于灰度值的图像局部比对方法、装置、设备和介质 | |
CN107766863A (zh) | 图像表征方法和服务器 | |
KR102636101B1 (ko) | Gpu에서 그래픽 데이터 처리 방법 및 장치 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |