基于FPGA的图像双边滤波方法和装置与流程

文档序号:30428573发布日期:2022-06-15 16:04阅读:374来源:国知局
基于FPGA的图像双边滤波方法和装置与流程
基于fpga的图像双边滤波方法和装置
技术领域
1.本发明涉及图像处理领域,尤其涉及一种基于fpga的图像双边滤波方法和装置。


背景技术:

2.双边滤波是一种非线性的滤波方法,广泛用于图像滤波,它的核心是对图像的空间邻近度和像素值相似度进行折衷处理,以有效的实现图像噪声的抑制与平滑,并保持图像边缘信息。
3.传统的图像双边滤波,需采用高斯函数实时地对空域权重和值域权重进行计算,指数函数运算大,因此在fpga中实现双边滤波具有难度。
4.为此,技术人员将双边滤波复杂运算(指数运算,或者指数运算与乘法运算)由实时计算改为查表,使得在fpga中无需进行该复杂运算,降低运算压力。
5.但是,不论利用高斯函数实时计算空域权重和值域权重,还是存储查找表,都需要用到大量的fpga资源。
6.在专利号为cn112435156a的专利文献中,公开了一种基于fpga的双边滤波方法,但各种计算仍然需要大量的资源。在专利号为cn107230190a的专利文献中,提出了将一些计算转为查表,但未提及本发明中的用区间函数替换高斯函数以减少资源的方法。


技术实现要素:

7.本发明的目的是提供一种基于fpga的图像双边滤波方法和装置,以解决fpga中进行图像双边滤波需要用到大量的fpga资源的问题,从而减少fpga资源的使用,降低硬件成本。
8.第一方面,本发明实施例提供一种基于fpga的图像双边滤波方法,包括:
9.基于预先设定的分段函数以及邻域像素点与目标像素点之间的像素差值,确定所述邻域像素点的值域计算值;
10.根据预先存储的空域权重值查找表,确定所述邻域像素点的空域权重值;
11.利用所述值域计算值和所述空域权重值,实现对所述目标像素点的双边滤波;
12.其中,所述邻域像素点为滤波窗口的全部像素点;
13.所述目标像素点为滤波窗口的中心像素点;
14.所述分段函数,是以邻域像素点与目标像素点之间的像素差值为自变量,以邻域像素点的值域计算值为因变量的函数。
15.根据本发明提供的基于fpga的图像双边滤波方法,所述分段函数的设定方法,包括:
16.利用值域权重值高斯函数和预先设定的分段函数分界点个数,确定由所述分界点划分的各个区间以及各个区间对应的函数值;
17.基于所述各个区间以及所述各个区间对应的函数值,生成值域权重值分段函数;
18.对所述值域权重值分段函数进行推演,得到所述分段函数;
19.其中,所述值域权重值高斯函数和所述值域权重值分段函数,均为以邻域像素点与目标像素点之间的像素差值为自变量,以邻域像素点的值域权重值为因变量的函数。
20.根据本发明提供的基于fpga的图像双边滤波方法,所述利用值域权重值高斯函数和预先设定的分段函数分界点个数,确定由所述分界点划分的各个区间,包括:
21.基于所述值域权重值高斯函数,确定最大值域权重值;
22.根据所述最大值域权重值和所述分段函数分界点个数,确定所述值域权重值高斯函数中与所述分界点分别对应的函数值;
23.将所述函数值代入所述值域权重值高斯函数中进行计算,得到所述分界点的坐标;
24.按照所述分界点的坐标,对所述分段函数的定义域进行区间划分,得到由所述分界点划分的各个区间;
25.其中,所述分段函数的定义域为[0,+∞)。
[0026]
根据本发明提供的基于fpga的图像双边滤波方法,所述值域权重值高斯函数中与所述分界点分别对应的函数值,具体通过以下公式计算:
[0027][0028]
其中,g
max
表示最大值域权重值,n表示预先设定的分界点的个数,g
n-i
表示值域权重值高斯函数中与第i个分界点对应的函数值,i表示索引值。
[0029]
根据本发明提供的基于fpga的图像双边滤波方法,所述利用值域权重值高斯函数和预先设定的分段函数分界点个数,确定由所述分界点划分的各个区间对应的函数值,包括:
[0030]
将所述各个区间中第一个区间和最后一个区间之外的区间作为待选区间;
[0031]
令所述待选区间对应的函数值为所述值域权重值高斯函数中所述待选区间两个端点对应的函数值的均值;
[0032]
令第一个区间对应的函数值为最大值域权重值,并令最后一个区间对应的函数值为0;
[0033]
其中,所述第一个区间为0与第一个分界点围成的区间,所述最后一个区间为第n个分界点与+∞围成的区间。
[0034]
根据本发明提供的基于fpga的图像双边滤波方法,所述对所述值域权重值分段函数进行推演,得到所述分段函数,包括:
[0035]
对于所述值域权重值分段函数的每一个区间,确定区间对应的函数值与最大值域权重值的比值,以及1与所述比值的差值;
[0036]
将所述比值与邻域像素点的像素值之间的乘积作为第一记录值,并将所述差值与目标像素点的像素值之间的乘积作为第二记录值;
[0037]
利用所述第一记录值和所述第二记录值加和值替换区间对应的函数值,以得到所述分段函数。
[0038]
根据本发明提供的基于fpga的图像双边滤波方法,所述空域权重值查找表,由空域权重值及其对应的邻域像素点与目标像素点之间的像素距离构成的;
[0039]
所述空域权重值是基于空域的光滑参数以及邻域像素点与目标像素点之间的像素距离确定的;
[0040]
所述根据预先存储的空域权重值查找表,确定所述邻域像素点的空域权重值,包括:
[0041]
计算所述领域像素点与所述目标像素点之间的像素距离;
[0042]
查找空域权重值查找表中与所述领域像素点与所述目标像素点之间的像素距离对应的空域权重值;
[0043]
将查找到的空域权重值作为所述邻域像素点的空域权重值。
[0044]
根据本发明提供的基于fpga的图像双边滤波方法,所述利用所述值域计算值和所述空域权重值,实现对所述目标像素点的双边滤波,包括:
[0045]
按照空域权重值相同的邻域像素点归为一个集群的方式,将滤波窗口中全部邻域像素点进行集群划分,并确定各个集群对应的空域权重值;
[0046]
计算各个集群对应的值域计算值总和;
[0047]
将各个集群对应的值域计算值总和与空域权重值的乘积进行加和,得到滤波窗口邻域像素点的值域计算值和空域权重值乘积的合计值;
[0048]
将所述合计值与滤波窗口邻域像素点的空域权重值的合计值之间的比值作为双边滤波后所述目标像素点的像素值。
[0049]
第二方面,本发明实施例提供一种基于fpga的图像双边滤波装置,包括:
[0050]
第一确定模块,用于基于预先设定的分段函数以及邻域像素点与目标像素点之间的像素差值,确定所述邻域像素点的值域计算值;
[0051]
第二确定模块,用于根据预先存储的空域权重值查找表,确定所述邻域像素点的空域权重值;
[0052]
双边滤波模块,用于利用所述值域计算值和所述空域权重值,实现对所述目标像素点的双边滤波;
[0053]
其中,所述邻域像素点为滤波窗口的全部像素点;
[0054]
所述目标像素点为滤波窗口的中心像素点;
[0055]
所述分段函数,是以邻域像素点与目标像素点之间的像素差值为自变量,以邻域像素点的值域计算值为因变量的函数。
[0056]
第三方面,本发明还提供一种fpga程序,所述fpga程序在fpga系统上实现如第一方面所述基于fpga的图像双边滤波方法的步骤;
[0057]
其中,所述fpga系统,包括如第二方面所述的基于fpga的图像双边滤波装置。
[0058]
本发明提供的一种基于fpga的图像双边滤波方法和装置,基于预先设定的分段函数以及邻域像素点与目标像素点之间的像素差值,确定所述邻域像素点的值域计算值;在fpga中将用于实时计算邻域像素点值域的高斯函数替换成分段函数,进而将复杂的指数运算改成加法和乘法运算,降低了值域的计算分辨率,与传统的采用实时计算方式的图像双边滤波方法相比减少了fpga运算资源的使用;根据预先存储的空域权重值查找表,确定所述邻域像素点的空域权重值;仅将复杂的空域权重计算由实时计算改为查表操作,使fpga无需进行指数运算,与空域权重值和值域权重值均查表的方法相比降低了fpga存储资源的使用;利用所述值域计算值和所述空域权重值,实现对所述目标像素点的双边滤波;在fpga
中仅需进行乘法运算和加法运算,平衡了fpga的运算压力与fpga存储资源的配置压力,整体达到减小fpga资源使用的效果,降低了硬件成本。
附图说明
[0059]
为了更清楚地说明本发明或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0060]
图1是本发明提供的基于fpga的图像双边滤波方法的流程示意图;
[0061]
图2是本发明提供的值域权重值高斯函数示意图;
[0062]
图3是本发明提供的值域权重值分段函数示意图;
[0063]
图4是本发明提供的值域权重值高斯函数与值域权重值分段函数之间的关系示意图;
[0064]
图5是本发明提供的基于fpga的图像双边滤波装置的结构示意图。
具体实施方式
[0065]
为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明中的附图,对本发明中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0066]
下面结合图1-图5描述本发明。
[0067]
第一方面,如图1所示,本发明提供的一种基于fpga的图像双边滤波方法,包括:
[0068]
s11、基于预先设定的分段函数以及邻域像素点与目标像素点之间的像素差值,确定所述邻域像素点的值域计算值;
[0069]
需要了解的是,图像是由多个像素点构成的,每个像素点在图像中具有固定的坐标值和像素值,在图像双边滤波时,逐个对每个像素点进行滤波处理。
[0070]
另外,如果待滤波图像是yuv色域的,那么仅需对该图像像素点的y数值进行滤波处理(因为对uv进行滤波的意义不大);如果待滤波图像是rgb色域,那么需对该图像像素点的rgb三个值均进行滤波处理;这里,y、r、g和b统称为像素值。
[0071]
本发明预先设定的分段函数的表达式如下:
[0072][0073]
上式中,n表示预先设定的分段函数分界点个数,y表示邻域像素点的像素值,y0表示目标像素点的像素值,x表示邻域像素点与目标像素点之间的像素差值,f(x)表示邻域像素点的值域计算值,x
n-1
表示所述分段函数中第一个分界点,x
n-2
表示所述分段函数中第二个分界点,x
n-3
表示所述分段函数中第三个分界点,x0表示所述分段函数中第n个分界点;
[0074]
其中,所述分段函数中的分界点,具体通过以下公式计算:
[0075][0076]
上式中,i表示索引值,i∈[1,n],σg表示值域的光滑参数,x
n-i
表示所述分段函数中第i个分界点。
[0077]
本发明从高斯函数推导分段函数,以分段函数替代高斯函数实现邻域像素点值域的实时计算,进而将复杂的指数运算变换为乘法与加法结合的运算,降低了值域的计算分辨率,减小fpga计算资源的使用,并提升图像双边滤波的处理速度和实时性。
[0078]
s12、根据预先存储的空域权重值查找表,确定所述邻域像素点的空域权重值;
[0079]
将计算空域权重值必用的指数运算改为查表,进而减小fpga的运算压力,同时通过操作速度较快的查表方式来提高空域权重值的确定速度,与传统的采用实时计算方式的图像双边滤波方法相比可以提高在fpga上进行图像双边滤波处理的处理速度和实时性。
[0080]
s13、利用所述值域计算值和所述空域权重值,实现对所述目标像素点的双边滤波;
[0081]
本发明在已知所述值域计算值和所述空域权重值的基础上,只需进行简单的乘法、加法与除法运算,即可完成对目标像素点的双边滤波;逻辑简单且投入使用的fpga资源少,可以有效的减少fpga硬件配置成本。
[0082]
其中,所述邻域像素点为滤波窗口的全部像素点;
[0083]
所述目标像素点为滤波窗口的中心像素点;
[0084]
双边滤波一般会给定用于对目标像素点进行滤波的滤波窗口,滤波窗口一般是尺寸为(2n+1)*(2n+1)的正方形,具体尺寸可以是3*3,、5*7、9*9或者是别的数量。
[0085]
所述分段函数,是以邻域像素点与目标像素点之间的像素差值为自变量,以邻域像素点的值域计算值为因变量的函数。
[0086]
需要知晓的是,邻域像素点的值域计算值衡量的是邻域像素点与目标像素点之间的像素值差异对目标像素点的滤波所带来的影响,通常来说像素值差异越小影响越大。
[0087]
本发明提供的一种基于fpga的图像双边滤波方法,基于预先设定的分段函数以及邻域像素点与目标像素点之间的像素差值,确定所述邻域像素点的值域计算值;在fpga中将用于实时计算邻域像素点值域的高斯函数替换成分段函数,进而将复杂的指数运算改成加法和乘法运算,降低了值域的计算分辨率,与传统的采用实时计算方式的图像双边滤波方法相比减少了fpga运算资源的使用;根据预先存储的空域权重值查找表,确定所述邻域像素点的空域权重值;仅将复杂的空域权重计算由实时计算改为查表操作,使fpga无需进行指数运算,与空域权重值和值域权重值均查表的方法相比降低了fpga存储资源的使用;利用所述值域计算值和所述空域权重值,实现对所述目标像素点的双边滤波;在fpga中仅需进行乘法运算和加法运算,平衡了fpga的运算压力与fpga存储资源的配置压力,整体达到减小fpga资源使用的效果,降低了硬件成本。
[0088]
在上述各实施例的基础上,作为一种可选的实施例,所述分段函数的设定方法,包括:
[0089]
利用值域权重值高斯函数和预先设定的分段函数分界点个数,确定由所述分界点划分的各个区间以及各个区间对应的函数值;其中,所述值域权重值高斯函数和所述值域权重值分段函数,均为以邻域像素点与目标像素点之间的像素差值为自变量,以邻域像素点的值域权重值为因变量的函数;
[0090]
本发明的核心是在fpga中将用于实时计算邻域像素点值域的高斯函数替换为分段函数,以此降低值域的计算分辨率,从而减少fpga运算资源的使用。其过程为先将值域权重值高斯函数近似替换为值域权重值分段函数,即根据值域权重值高斯函数的分布情况和所需分段的段数(分界点个数加1),划分区间并确定区间对应的函数值,得到值域权重值分段函数;然后将值域权重值分段函数转换为分段函数。
[0091]
另外,因为在fpga中1/2^k、2/2^k、

1等很容易用移位和加法来实现,因此预先设定的分段函数分界点个数优选2k,其中,k为预设值。可以理解,预先设定的分段函数的区间个数是由预先设定的分段函数分界点个数决定的,选用的分段函数分界点个数的多少在一定程度上影响双边滤波的效果。
[0092]
基于所述各个区间以及所述各个区间对应的函数值,生成值域权重值分段函数;
[0093]
对所述值域权重值分段函数进行推演,得到所述分段函数。
[0094]
传统方法中先计算滤波窗口中各邻域像素点的值域权重值,然后对各邻域像素点的像素值进行加权求和,最后再归一化处理(加权求和值除以所有邻域像素点的值域权重值的合计值)得到邻域像素点的值域计算值;本发明考虑到值域权重值是一种权重的计算,邻域像素值和目标像素值的像素差值越大,邻域像素点的像素值对应的值域权重值越小,邻域像素点的像素值对目标像素点滤波的影响越小,相对而言,目标像素点的像素值对应的值域权重越大,目标像素点的像素值对其本身的滤波的影响就越大;换句话说,邻域像素点与目标像素点之间的值域权重值的比值就代表邻域像素点的像素值与目标像素点滤波的像素值分别对目标像素点滤波的影响程度的比值;因此,假设该比值为w:1;那么邻域像素点占其中的w/w+1,目标像素点占其中的1/w+1;那么就可将(w/w+1)y

+(1/w+1)y0作为邻域像素点的值域计算值;其中,y

表示邻域像素点的像素值,y0表示目标像素点的像素值。
[0095]
可以看出,本发明根据像素差值确定目标像素点的像素值与邻域像素点的像素值各自所对应的比例(比例的合计值为1,且比例代表影响程度),并将按照比例进行加权求和后得到的值作为最终的值域计算值,与传统方法中通过值域权重值对邻域像素点的像素值进行加权求和以及归一化得到值域计算值,起到了异曲同工之效,且本发明简化了值域计算值的计算过程,减轻了fpga中的运算压力,进而使用到的fpga资源有所降低。
[0096]
在上述各实施例的基础上,作为一种可选的实施例,所述利用值域权重值高斯函数和预先设定的分段函数分界点个数,确定由所述分界点划分的各个区间,包括:
[0097]
基于所述值域权重值高斯函数,确定最大值域权重值;
[0098]
值域权重值高斯函数表达式如下:
[0099][0100]
其中,σg表示值域的光滑参数,x表示邻域像素点与目标像素点之间的像素差值。
[0101]
其值域权重值高斯函数的示意图如图2所示,因为值域权重值高斯函数在x=0处有最大值,所以最大值域权重值为g
max

[0102]
根据所述最大值域权重值和所述分段函数分界点个数,确定所述值域权重值高斯函数中与所述分界点分别对应的函数值;
[0103]
本发明先将[0,1]均分为[0,1/n]、[1/n,2/n]、[2/n,3/n]

[n-1/n,1]这n个区段,然后选择这n个区段中间值作为n个分界点分别对应的函数值;
[0104]
将所述函数值代入所述值域权重值高斯函数中进行计算,得到所述分界点的坐标;
[0105]
按照所述分界点的坐标,对所述分段函数的定义域进行区间划分,得到由所述分界点划分的各个区间;
[0106]
其中,所述分段函数的定义域为[0,+∞)。
[0107]
本发明在值域权重值高斯函数的基础上,通过科学的方法选定分界点,进而为分段函数表达式的生成奠定基础。
[0108]
在上述各实施例的基础上,作为一种可选的实施例,所述值域权重值高斯函数中与所述分界点分别对应的函数值,具体通过以下公式计算:
[0109][0110]
其中,g
max
表示最大值域权重值,n表示预先设定的分界点的个数,g
n-i
表示值域权重值高斯函数中与第i个分界点对应的函数值,i表示索引值。
[0111]
本发明先通过对值域权重值高斯函数纵轴进行分区间,再以各区间中间值对应的横轴坐标作为分界点,以简单科学的方式进行了分界点的选取。
[0112]
在上述各实施例的基础上,作为一种可选的实施例,所述利用值域权重值高斯函数和预先设定的分段函数分界点个数,确定由所述分界点划分的各个区间对应的函数值,包括:
[0113]
将所述各个区间中第一个区间和最后一个区间之外的区间作为待选区间;
[0114]
令所述待选区间对应的函数值为所述值域权重值高斯函数中所述待选区间两个端点对应的函数值的均值;
[0115]
令第一个区间对应的函数值为最大值域权重值,并令最后一个区间对应的函数值为0;
[0116]
其中,所述第一个区间为0与第一个分界点围成的区间,所述最后一个区间为第n个分界点与+∞围成的区间。
[0117]
本发明对于值域权重值分段函数中任意一个区间对应的函数值,是对值域权重值高斯函数中同等区间对应的值域权重值进行近似,且近似为一个值。在这个过程中,如果采用平均方式作值域权重值的近似,那么就会丢失极值(最大值域权重值和最小值域权重值),因此对应有极值的区间,近似值取极值,对应没有极值的区间,近似值取平均值。通过综合考虑极值与平均值,提高了值域权重值分段函数的设定合理性。
[0118]
在上述各实施例的基础上,作为一种可选的实施例,所述对所述值域权重值分段函数进行推演,得到所述分段函数,包括:
[0119]
对于所述值域权重值分段函数的每一个区间,确定区间对应的函数值与最大值域权重值的比值,以及1与所述比值的差值;
[0120]
因为本发明值域权重值一定可以写为q*g
max
的形式且q一定的处于0~1之间的数值,因此将区间对应的函数值q*g
max
除以最大值域权重值g
max
的操作等同为实现归一化,得到对于邻域像素点与目标像素点两者来说,邻域像素点像素值对目标像素点的滤波的影响程度在总影响程度的占比;而1-q自然就代表了目标像素点像素值对自身滤波的影响程度在总影响程度的占比;
[0121]
将所述比值与邻域像素点的像素值之间的乘积作为第一记录值,并将所述差值与目标像素点的像素值之间的乘积作为第二记录值;
[0122]
对邻域像素点的像素值和目标像素点的像素值分别进行加权;
[0123]
利用所述第一记录值和所述第二记录值加和值替换区间对应的函数值,以得到所述分段函数。
[0124]
相当于将加权后的邻域像素点的像素值和加权后的目标像素点的像素值的和作为最终的值域计算值。
[0125]
本发明根据像素差值确定目标像素点的像素值与邻域像素点的像素值各自所对应的比例(比例的合计值为1,且比例代表影响程度),并将按照比例进行加权求和后的值作为最终的值域计算值,与传统方法中通过值域权重值对邻域像素点的像素值进行加权求和以及归一化得到值域计算值相比,起到了异曲同工之效,且用到的fpga资源有所降低。
[0126]
为了更清楚的解释本发明分段函数的设定过程,提供一下说明。
[0127]
分段函数表示式是由传统双边滤波方法中值域权重值高斯函数推导而来,推导过程如下:
[0128]
第一步,确定值域权重值高斯函数的最大值,即最大值域权重值;
[0129]
因为值域权重值高斯函数表达式如下:
[0130]
[0131]
其中,σg表示值域的光滑参数,x表示邻域像素点与目标像素点之间的像素差值。所以在x=0处有最大值,即最大值为g
max

[0132]
第二步,值域权重值分段函数具备5个区段,即预先设定的分段函数分界点个数为4,利用值域权重值高斯函数推导值域权重值高斯函数的表达式;
[0133]
本发明先将[0,1]均分为[0,1/4]、[1/4,2/4]、[2/4,3/4]和[3/4,1]四个区段,然后选择这四个区段中间值对应的横坐标作为分界点;
[0134]
即4个分界点的纵坐标分别为;
[0135][0136][0137][0138][0139]
其中,g0为第四个分界点对应的纵坐标,g1为第三个分界点对应的纵坐标,g2为第二个分界点对应的纵坐标,g3为第一个分界点对应的纵坐标。
[0140]
进而根据g0、g1、g2和g3,以及值域权重值高斯函数反推得到这4个分界点坐标(分界点在横轴上)为:
[0141][0142][0143][0144][0145]
其中,x0为第四个分界点,x1为第三个分界点,x2为第二个分界点,x3为第一个分界
点。
[0146]
第三步,根据x0、x1、x2和x3这四个分界点,得到的五个区段分别为:[0,x3),[x3,x2),[x2,,x1),[x1,x0),[x0,+∞),与之对应的纵坐标区间分别为与之对应的纵坐标区间分别为
[0147]
将将用5个值作近似替代:这5个值分别为g
max
、和0;
[0148]
这样设定的原因是,如果仅考虑区间平均值,那么最大值和最小值就丢失了。因此,对于有极值(最大值和最小值)的区间,近似值取极值,对于没有极值的区间,近似取平均值。
[0149]
由此构建出值域权重值分段函数,表达式如下:
[0150][0151]
对应的,值域权重值分段函数的函数示意图如图3所示,值域权重值高斯函数与值域权重值分段函数之间的关系如图4所示。
[0152]
第四步,值域权重值是一种权重的计算,邻域像素值和目标像素值的像素差值越大,邻域像素点的像素值对应的值域权重值越小,邻域像素点的像素值对目标像素点滤波的影响越小,相对而言,目标像素点的像素值对应的值域权重值越大,目标像素点的像素值对其本身的滤波的影响就越大。因此,本发明邻域像素点与目标像素点的像素差值为0时,邻域像素点的值域权重值有最大值g
max
,邻域像素点与目标像素点的像素差值为∞时有最小值0;
[0153]
本发明用邻域像素点的像素值y

替换g
max
,用目标像素点的像素值y0替换0,用3/4y

+1/4y0替换用2/4y

+2/4y0替换用1/4y

+3/4y0替换得到用于计算值域的分段函数,其表达式为:
[0154][0155]
这样设定的缘由是:传统方法中先计算滤波窗口中各邻域像素点的值域权重值,然后对各邻域像素点的像素值进行加权求和,最后再归一化处理(加权求和值除以所有邻域像素点的值域权重值的合计值)得到邻域像素点的值域计算值。本发明根据像素差值,利用目标像素点的像素值与邻域像素点的像素值的不同比例替换(比例的合计值为1,且比例代表影响程度),能达到加权求和以及归一化的效果,起到了和传统方法类似的效果,同时,只需很少的fpga资源来实现。
[0156]
需要说明的是,以4作为分界点的个数,是因为与1/4、1/2、3/4的相乘在fpga中很容易用移位和加法来实现,当然与4具有同样效果的还有2k,k为预设值;因此分界点的个数优选2k。值域计算利用加法器、移位器和比较器实现,其中,加法器实现加法运算,移位器实现乘法运算,比较器确定邻域像素点处于分段函数的那个区段。
[0157]
在上述各实施例的基础上,作为一种可选的实施例,所述空域权重值查找表,由空域权重值及其对应的邻域像素点与目标像素点之间的像素距离构成的;
[0158]
所述空域权重值是基于空域的光滑参数以及邻域像素点与目标像素点之间的像素距离确定的;
[0159]
即所述空域权重值是将空域的光滑参数以及邻域像素点与目标像素点之间的像素距离代入空域权重值高斯函数中计算得到的;
[0160]
所述空域权重值高斯函数,具体通过以下公式计算:
[0161][0162]
其中,σf表示空域的光滑参数,表示邻域像素点与目标像素点之间的像素距离,取值等于邻域像素点与目标像素点的横向像素距离的平方与相邻像素点与目标像素点的纵向像素距离的平方之间的加和值,e为自然数,π为圆周率。
[0163]
所述根据预先存储的空域权重值查找表,确定所述邻域像素点的空域权重值,包括:
[0164]
计算所述领域像素点与所述目标像素点之间的像素距离;
[0165]
查找空域权重值查找表中与所述领域像素点与所述目标像素点之间的像素距离对应的空域权重值;
[0166]
将查找到的空域权重值作为所述邻域像素点的空域权重值。
[0167]
本发明通过设置空域权重值查找表,将计算空域权重值所需用到的复杂的指数运
算改为查表,减轻运算压力;同时利用操作速度较快的查表方式来提高空域权重值的确定速度,以提高在fpga上进行图像双边滤波处理的实时性。
[0168]
在上述各实施例的基础上,作为一种可选的实施例,所述利用所述值域计算值和所述空域权重值,实现对所述目标像素点的双边滤波,包括:
[0169]
按照空域权重值相同的邻域像素点归为一个集群的方式,将滤波窗口中全部邻域像素点进行集群划分,并确定各个集群对应的空域权重值;
[0170]
在本发明中,与目标像素点之间的像素距离相同的邻域像素点具有相同的空域权重值;
[0171]
通俗的说:由于滤波窗口的对称性及计算公式中的平方运算,(a,b),(-a,b),(-a,-b),(a,-b),(b,a),(-b,a),(-b,-a),(b,-a)这8个邻域像素点的空域权重值相等,因此,当a≠0且b≠0时,有8个邻域像素点的空域权重值相等;当a=0且b≠0时或者当b≠0或者a=0时,有四个邻域像素点的空域权重值相等;当a=0且b=0时,没有相等的空域权重值。
[0172]
其中,a表示邻域像素点的横轴坐标,b表示邻域像素点的纵轴,目标像素点为(0,0)。
[0173]
例如:当滤波窗口尺寸为5*5(即共有25个邻域像素,分别对应25个空域权重值)时,各邻域像素与目标像素的像素距离如下:
[0174][0175][0176]
2 1 0 1 2
[0177][0178][0179]
从上表可以看出,这个数值一共重复了8次,2这个数值一共重复了4次,那么像素距离为的8个邻域像素点的空域像素值相等,像素距离为2的4个邻域像素点的空域像素值相等。
[0180]
计算各个集群对应的值域计算值总和;
[0181]
传统方法在滤波处理时一般逐个计算各邻域像素点的值域计算值与空域权重值乘积,然后再对乘积进行加和;本发明考虑到fpga中加法运算比乘法运算更为容易实现,因此先做加法运算再做乘法运算,以减少滤波时乘法运算的使用次数,进而减少乘法运算所需的硬件资源。
[0182]
例如:集群存在四个空域权重值均为w的领域像素点,其对应的值域计算值分别为v、p、d和o;传统方法计算公式是:v
×
w+p
×
w+d
×
w+o
×
w;共用到4次乘法运算;而本发明采用的计算公式是:(v+p+d+o)
×
w,只需用到一次乘法运算。
[0183]
将各个集群对应的值域计算值总和与空域权重值的乘积进行加和,得到滤波窗口邻域像素点的值域计算值和空域权重值乘积的合计值;
[0184]
需要注意的是,值域计算值在fpga中以寄存器方式存储即可,并不需要存储资源。
[0185]
将所述合计值与滤波窗口邻域像素点的空域权重值的合计值之间的比值作为双边滤波后所述目标像素点的像素值。
[0186]
本发明在已知所述值域计算值和所述空域权重值的基础上,只需进行简单的乘法、加法与除法运算,即可完成对目标像素点的双边滤波;逻辑简单且投入使用的fpga资源少,可以有效的减少fpga硬件配置成本。
[0187]
第二方面,对本发明提供的基于fpga的图像双边滤波装置进行描述,下文描述的基于fpga的图像双边滤波装置与上文描述的基于fpga的图像双边滤波方法可相互对应参照。图5示例了一种基于fpga的图像双边滤波装置的结构示意图,如图5所示,该装置包括:第一确定模块21、第二确定模块22和双边滤波模块23;
[0188]
第一确定模块21,用于基于预先设定的分段函数以及邻域像素点与目标像素点之间的像素差值,确定所述邻域像素点的值域计算值;
[0189]
第二确定模块22,用于根据预先存储的空域权重值查找表,确定所述邻域像素点的空域权重值;
[0190]
双边滤波模块23,用于利用所述值域计算值和所述空域权重值,实现对所述目标像素点的双边滤波;
[0191]
其中,所述邻域像素点为滤波窗口的全部像素点;
[0192]
所述目标像素点为滤波窗口的中心像素点;
[0193]
所述分段函数,是以邻域像素点与目标像素点之间的像素差值为自变量,以邻域像素点的值域计算值为因变量的函数。
[0194]
本发明提供的一种基于fpga的图像双边滤波装置,基于预先设定的分段函数以及邻域像素点与目标像素点之间的像素差值,确定所述邻域像素点的值域计算值;在fpga中将用于实时计算邻域像素点值域的高斯函数替换成分段函数,进而将复杂的指数运算改成加法和乘法运算,降低了值域的计算分辨率,与传统的采用实时计算方式的图像双边滤波方法相比减少了fpga运算资源的使用;根据预先存储的空域权重值查找表,确定所述邻域像素点的空域权重值;仅将复杂的空域权重计算由实时计算改为查表操作,使fpga无需进行指数运算,与空域权重值和值域权重值均查表的方法相比降低了fpga存储资源的使用;利用所述值域计算值和所述空域权重值,实现对所述目标像素点的双边滤波;在fpga中仅需进行乘法运算和加法运算,平衡了fpga的运算压力与fpga存储资源的配置压力,整体达到减小fpga资源使用的效果,降低了硬件成本。
[0195]
在上述各实施例的基础上,作为一种可选的实施例,所述装置还包括:预先设定分段函数的设定模块,所述设定模块,包括:
[0196]
第一确定单元,用于利用值域权重值高斯函数和预先设定的分段函数分界点个数,确定由所述分界点划分的各个区间以及各个区间对应的函数值;
[0197]
生成单元,用于基于所述各个区间以及所述各个区间对应的函数值,生成值域权重值分段函数;
[0198]
推演单元,用于对所述值域权重值分段函数进行推演,得到所述分段函数;
[0199]
其中,所述值域权重值高斯函数和所述值域权重值分段函数,均为以邻域像素点与目标像素点之间的像素差值为自变量,以邻域像素点的值域权重值为因变量的函数。
[0200]
在上述各实施例的基础上,作为一种可选的实施例,所述第一确定单元,包括:
[0201]
第一确定子模块,用于基于所述值域权重值高斯函数,确定最大值域权重值;
[0202]
第二确定子模块,用于根据所述最大值域权重值和所述分段函数分界点个数,确
定所述值域权重值高斯函数中与所述分界点分别对应的函数值;
[0203]
第一计算子模块,用于将所述函数值代入所述值域权重值高斯函数中进行计算,得到所述分界点的坐标;
[0204]
划分子模块,用于按照所述分界点的坐标,对所述分段函数的定义域进行区间划分,得到由所述分界点划分的各个区间;
[0205]
其中,所述分段函数的定义域为[0,+∞)。
[0206]
在上述各实施例的基础上,作为一种可选的实施例,所述值域权重值高斯函数中与所述分界点分别对应的函数值,具体通过以下公式计算:
[0207][0208]
其中,g
max
表示最大值域权重值,n表示预先设定的分界点的个数,g
n-i
表示值域权重值高斯函数中与第i个分界点对应的函数值,i表示索引值。
[0209]
在上述各实施例的基础上,作为一种可选的实施例,所述第一确定单元,还包括:
[0210]
第一设定子模块,用于将所述各个区间中第一个区间和最后一个区间之外的区间作为待选区间;
[0211]
第二设定子模块,用于令所述待选区间对应的函数值为所述值域权重值高斯函数中所述待选区间两个端点对应的函数值的均值;
[0212]
第三设定子模块,用于令第一个区间对应的函数值为最大值域权重值,并令最后一个区间对应的函数值为0;
[0213]
其中,所述第一个区间为0与第一个分界点围成的区间,所述最后一个区间为第n个分界点与+∞围成的区间。
[0214]
在上述各实施例的基础上,作为一种可选的实施例,所述推演单元,包括:
[0215]
第三确定子单元,用于对于所述值域权重值分段函数的每一个区间,确定区间对应的函数值与最大值域权重值的比值,以及1与所述比值的差值;
[0216]
第二计算子单元,用于将所述比值与邻域像素点的像素值之间的乘积作为第一记录值,并将所述差值与目标像素点的像素值之间的乘积作为第二记录值;
[0217]
替换子单元,用于利用所述第一记录值和所述第二记录值加和值替换区间对应的函数值,以得到所述分段函数。
[0218]
在上述各实施例的基础上,作为一种可选的实施例,所述空域权重值查找表,由空域权重值及其对应的邻域像素点与目标像素点之间的像素距离构成的;
[0219]
所述空域权重值是基于空域的光滑参数以及邻域像素点与目标像素点之间的像素距离确定的;
[0220]
所述第二确定模块22,包括:
[0221]
计算单元,用于计算所述领域像素点与所述目标像素点之间的像素距离;
[0222]
查找单元,用于查找空域权重值查找表中与所述领域像素点与所述目标像素点之间的像素距离对应的空域权重值;
[0223]
设定单元,用于将查找到的空域权重值作为所述邻域像素点的空域权重值。
[0224]
在上述各实施例的基础上,作为一种可选的实施例,所述利用所述值域计算值和
所述空域权重值,实现对所述目标像素点的双边滤波,包括:
[0225]
集群划分单元,用于按照空域权重值相同的邻域像素点归为一个集群的方式,将滤波窗口中全部邻域像素点进行集群划分,并确定各个集群对应的空域权重值;
[0226]
集群值域计算值合计单元,用于计算各个集群对应的值域计算值总和;
[0227]
加和单元,用于将各个集群对应的值域计算值总和与空域权重值的乘积进行加和,得到滤波窗口邻域像素点的值域计算值和空域权重值乘积的合计值;
[0228]
双边滤波单元,用于将所述合计值与滤波窗口邻域像素点的空域权重值的合计值之间的比值作为双边滤波后所述目标像素点的像素值。
[0229]
第三方面,本发明还提供一种fpga程序,所述fpga程序在fpga系统上执行基于fpga的图像双边滤波方法,该所述fpga系统,封装有基于fpga的图像双边滤波装置,该方法包括:基于预先设定的分段函数以及邻域像素点与目标像素点之间的像素差值,确定所述邻域像素点的值域计算值;根据预先存储的空域权重值查找表,确定所述邻域像素点的空域权重值;利用所述值域计算值和所述空域权重值,实现对所述目标像素点的双边滤波;其中,所述邻域像素点为滤波窗口的全部像素点;所述目标像素点为滤波窗口的中心像素点;所述分段函数,是以邻域像素点与目标像素点之间的像素差值为自变量,以邻域像素点的值域计算值为因变量的函数。
[0230]
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
[0231]
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
[0232]
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1