数字视频信号处理中的去噪音方法及系统
技术领域
本发明属于数字视频信号处理领域,具体地说,涉及一种数字视频信号处理中的去噪音方法及系统。
背景技术
数字视频信号,无论是通过模拟方式还是数字方式传输的,在最终显示在屏幕上时都需要进行去噪音处理,以达到平滑干净的显示效果。目前在数字视频信号处理中最常用的去噪音方法是对输入的信号进行时间轴上的递归运算,例如,如果t-1时刻输入视频图像上的一个像素值为G(x,y,t-1),其中x和y代表该像素在图像G中的位置,而t时刻相同位置上的像素为G(x,y,t),那么对G(x,y,t)进行下面的运算:
G(x,y,t)=k*G(x,y,t)+(1-k)*G(x,y,t-1) (1)
其中0≤k≤1.0,利用新算出的G(x,y,t)数值代替旧的数值。这样的递归运算不断的进行下去发生在G(x,y)像素位置上的噪音将呈现一个收敛的过程,并且k越接近0收敛过程越快,去噪音的效果也越好。
上面介绍的去噪音方法在目前商用的数字视频处理芯片中已得到了广泛的引用。但这种方法有一个问题,就是它在理论上只能应用于静止的视频图像,即像素G(x,y,t-1)和像素G(x,y,t)应是原始图像中的同一个像素,也就是说该像素从时刻t-1到时刻t没有发生移动。如果图像是变化的,例如t-1时刻的像素G(x,y,t-1)在图像中的某物体上,到了t时刻该物体移动到了别处,像素G(x,y,t)不再是原来的G(x,y,t-1)了,那么这种情况下仍然进行(1)中的运算就会出现所谓拖尾的问题,即移动物体的后面会出现一条轨迹。由于噪音的存在,准确判断一个视频图像中的像素是否静止本来就是一个棘手的问题,所以上面的方法在进行去噪音的同时拖尾的现象是很难解决的。通常的做法是将像素的静止判断用某种方法分级,越静止的使用越小的k值以达到越强的去噪音效果,反之越不静止的则使用越大的k值以减弱去噪音的效果,但这也只是一个权宜之计,并不能很好的解决去噪音效果与拖尾问题间的矛盾。
发明内容
本发明的目的在于提供一种数字视频信号处理中的去噪音方法及系统,以解决去噪音效果与拖尾缺陷间的矛盾的技术问题。
为了达到上述目的,本发明的技术方案如下:
一种数字视频信号处理中的去噪音方法,包括:
1-1)存储输入的视频流的步骤;
1-2)对视频流中的当前图像t中的像素G(i,j,t)的同一行上的连续像素分成M组后分别进行最大-最小值运算的步骤;每组所包含的像素均不完全相同且均为包含有像素G(i,j,t)的连续的像素;其中M为大于2的正整数;
1-3)对于所得的M个最小值求取其最大值G(i,j,t)_out_max的步骤;
1-4)对于所得的M个最大值求取其最小值G(i,j,t)_out_min的步骤;
1-5)计算所述最大值G(i,j,t)_out_max和最小值G(i,j,t)_out_min的平均值G(i,j,t)_out_tmp的步骤;
1-6)计算所述最大值G(i,j,t)_out_max和最小值G(i,j,t)_out_min之间的绝对差diff的步骤;
1-7)对当前图像t之后连续的N幅图像中的相应的像素G(i,j,t+1),…,G(i,j,t+N)分别进行步骤1-2)至步骤1-5)相同的处理的步骤;其中N为大于等于1的正整数;
1-8)将得到的N+1个平均值G(i,j,t)_out_tmp,…,G(i,j,t+N)_out_tmp和N+1个原始像素G(i,j,t),…,G(i,j,t+N)进行比较的步骤:如果每一个平均值都大于对应的原始像素值,或每一个平均值都小于对应的原始像素值,则设置标志flag为TRUE,否则标志flag被设置为FALSE;
1-9)判断是否去噪音的步骤:如果所述标志flag为TRUE或者diff大于DST,则对当前像素G(i,j,t)不作去噪音处理;否则用G(i,j,t)_out_tmp代替当前处理像素G(i,j,t)的值;其中DST为去噪音处理中最大允许的噪音幅度;
1-10)当前像素G(i,j,t)处理完后,处理下一个像素G(i,j+1,t),直到第i行中的像素均处理完成;然后,开始第i+1行的处理,直到当前处理图像t全部完成。
对应地,一种数字视频信号处理中的去噪音系统,包括:
存储输入的视频流的装置;
当前图像t到图像t+N的N+1幅连续图像各对应一套相同的处理系统,其中对应当前图像t的处理系统包括:
对视频流中的当前图像t中的像素G(i,j,t)的同一行上的连续像素分成M组后分别进行最大-最小值运算的装置;每组所包含的像素均不完全相同且均为包含有像素G(i,j,t)的连续的像素;其中M为大于2的正整数;
对于所得的M个最小值求取其最大值G(i,j,t)_out_max的装置;
对于所得的M个最大值求取其最小值G(i,j,t)_out_min的装置;
计算所述最大值G(i,j,t)_out_max和最小值G(i,j,t)_out_min的平均值G(i,j,t)_out_tmp的装置;
计算所述最大值G(i,j,t)_out_max和最小值G(i,j,t)_out_min之间的绝对差diff的装置;
将得到的N+1个平均值G(i,j,t)_out_tmp,…,G(i,j,t+N)_out_tmp和N+1个原始像素G(i,j,t),…,G(i,j,t+N)进行比较的装置:如果每一个平均值都大于对应的原始像素值,或每一个平均值都小于对应的原始像素值,则设置标志flag为TRUE,否则标志flag被设置为FALSE;
判断是否去噪音的装置:如果所述标志flag为TRUE或者diff大于DST,则对当前像素G(i,j,t)不作去噪音处理;否则通过去噪音单元用G(i,j,t)_out_tmp代替当前处理像素G(i,j,t)的值;其中DST为去噪音处理中最大允许的噪音幅度。
对应地,一种数字视频信号处理中的去噪音系统,包括:
存储输入的视频流的图像缓存器;
当前图像t到图像t+N的N+1幅连续图像各对应一套相同的计算装置,其中对应当前图像t的计算装置包括:
对视频流中的当前图像t中的像素G(i,j,t)的同一行上的连续像素分成M组后分别进行最大-最小值运算的装置;每组所包含的像素均不完全相同且均为包含有像素G(i,j,t)的连续的像素;其中M为大于2的正整数;
对于所得的M个最小值求取其最大值G(i,j,t)_out_max的装置;
对于所得的M个最大值求取其最小值G(i,j,t)_out_min的装置;
计算所述最大值G(i,j,t)_out_max和最小值G(i,j,t)_out_min的平均值G(i,j,t)_out_tmp的装置;
计算所述最大值G(i,j,t)_out_max和最小值G(i,j,t)_out_min之间的绝对差diff的装置;
将得到的N+1个平均值G(i,j,t)_out_tmp,…,G(i,j,t+N)_out_tmp和N+1个原始像素G(i,j,t),…,G(i,j,t+N)进行比较的装置:如果每一个平均值都大于对应的原始像素值,或每一个平均值都小于对应的原始像素值,则设置标志flag为TRUE,否则标志flag被设置为FALSE;
并联所述N+1套相同的计算装置的纹理检测单元:如果所述标志flag为TRUE或者diff大于DST,则对当前像素G(i,j,t)不作去噪音处理;否则通过一于纹理检测单元相连的去噪音单元用G(i,j,t)_out_tmp代替当前处理像素G(i,j,t)的值;其中DST为去噪音处理中最大允许的噪音幅度。
本发明利用了一种新颖的方法判断像素是否静止并位于图像固有的纹理之上,只对不在图像固有的纹理之上或运动的像素进行去噪音处理。并且,该方法及系统的去噪音操作不带有递归的性质,只利用当前图像中的信息,不会产生拖尾的问题。
优选地,所述同一行上的像素以像素G(i,j,t)为中心,这可以使得像素G(i,j,t)两边的像素数量对称,如此截取的取样窗口能保持对称从而保证降噪处理结果的对称性。
优选地,所述同一行上的像素为4*HW+1个连续排列的像素,其中HW为大于0的正整数。所述M=2*HW+1。分组后的每组像素由包含像素G(i,j,t)以及与该像素连续排列的2*HW个像素组成。如此能保证窗口是奇数,也能让被处理像素处于中央窗口的中心,同时最两边的两个窗口中被处理像素必定位于最旁边的位置。
附图说明
图1是本发明的去噪音处理流程图;
图2是本发明的纹理检测单元的结构示意图。
具体实施方式
下面根据图1至图2,给出本发明的较佳实施例,并予以详细描述,使能更好地理解本发明的功能、特点。
本发明介绍了一种能完全解决拖尾问题的去噪音方法及系统。首先,该方法及系统利用了一种新颖的方法判断像素是否静止并位于图像固有的纹理之上,只对不在图像固有的纹理之上或运动的像素进行去噪音处理。并且,该方法及系统的去噪音操作不带有递归的性质,只利用当前图像中的信息,不会产生拖尾的问题。
图1给出了本发明的去噪音处理流程图。输入的视频流被存储在图像缓存器中,通常图像缓存器使用SDRAM或DDR存储器器件。假设图像t为当前处理的图像,对图像t中像素的去噪音处理,本发明共使用到了N+1幅图像的数据,其中N可由用户按图像缓存器的资源大小决定,N为大于等于1的正整数。越大的N,即越多的图像资源会得到越好的去噪音效果。另外,这里要注意的是对于逐行输入视频流图1中的图像t到图像t+N,就是输入的连续N+1幅逐行视频图像。但是,对于隔行的输入视频流图1中的图像则对应于同为奇场或同为偶场的连续隔行视频图像。由于隔行的输入视频流中奇场图像和偶场图像是交替传送的,所以图像缓存器中所要存储的数据会比图1中所示的多一倍。例如,如果图像t是隔行输入视频流中的一个奇场图像,则图像t到图像t+N应该对应于N+1幅连续的奇场图像,而每两幅连续的奇场图像之间还有一幅偶场图像,这些偶场图像在图像缓存器中的存储在图1中并未画出。类似地,如果图像t代表的是隔行输入视频流中的一个偶场图像,那么图像t到图像t+N就应该对应于N+1幅连续的偶场图像,而每两幅连续的偶场图像之间还有一幅奇场图像,这些奇场图像在图像缓存器中的存储在图1中也并未画出。总之,如果图像t是隔行输入视频流中的一个奇(偶)场图像,则图1中的图像t到图像t+N表示的就是连续的N+1幅奇(偶)场图像。
奇偶场是交替进入芯片的,每一个场都有一个ID,所以芯片会知道图像的顺序。而且奇与偶是相对的,并不规定什么是奇场,什么是偶场,只要知道视频流中总是一奇,一偶,一奇,一偶…。如果输入的是逐行图像,则图中的N+1幅图像就是连续的N+1幅逐行图像。也就是说,图像缓存被视为一个先进先出的队列,视频图像流中的图像依此进入图像缓存器,使用完的图像再依此被新的图像覆盖,以达到图像缓存器的循环使用。这里,图像缓存器的循环使用是众所周知的技术,本发明在此不做详述。
对于图1中的最大-最小值运算单元,它完成的是如下的运算。首先,假设当前处理像素是当前处理图像t中的第(i,j)个像素,即第i行第j列的像素G(i,j,t)。每一个最大-最小值运算单元利用相应图像里第i行中以第(i,j)像素为中心的4*HW+1个像素,即G(i,j-2*HW),G(i,j-2*HW+1),…,G(i,j),…,G(i,j+2*HW-1),G(i,j+2*HW)。
其中HW为用户调节的数值,HW为大于0的正整数。当HW=1时,我们使用的是一个5像素的窗口,当HW=2时,窗口大小是9个像素,以此类推。
第一步,利用上面的4*HW+1个像素,我们共要产生两组各2*HW+1个中间运算结果:对第i行中以第(i,j)像素为中心的4*HW+1个像素进行分组,其中连续排列的2*HW+1个像素为一组,对每组像素求取最大值:
Xmax(i,j-HW)=max[G(i,j-2*HW),G(i,j-2*HW+1),...,G(i,j)]
Xmax(i,j-HW+1)=max[G(i,j-2*HW+1),G(i,j-2*HW+2),...,G(i,j+1)]
…
Xmax(i,j)=max[G(i,j-HW),G(i,j-HW+1),...,G(i,j+HW)]
…
Xmax(i,j+HW-1)=max[G(i,j-1),G(i,j),...,G(i,j+2*HW-1)]
Xmax(i,j+HW)=max[G(i,j),G(i,j+1),...,G(i,j+2*HW)]
及对第i行中以第(i,j)像素为中心的4*HW+1个像素进行分组,其中连续排列的2*HW+1个像素为一组,对每组像素求取最小值:
Xmin(i,j-HW)=min[G(i,j-2*HW),G(i,j-2*HW+1),...,G(i,j)]
Xmin(i,j-HW+1)=min[G(i,j-2*HW+1),G(i,j-2*HW+2),...,G(i,j+1)]
…
Xmin(i,j)=min[G(i,j-HW),G(i,j-HW+1),...,G(i,j+HW)]
…
Xmin(i,j+HW-1)=min[G(i,j-1),G(i,j),...,G(i,j+2*HW-1)]
Xmin(i,j+HW)=min[G(i,j),G(i,j+1),...,G(i,j+2*HW)]
第二步,我们利用上面产生的两组各2*HW+1个中间运算结果继续进行如下运算,即对于如上所得的2*HW+1个最小值,求取其最大值,并对2*HW+1个最大值,求取其最小值:
G(i,j)_out_max =max[Xmin(i,j-HW),Xmin(i,j-HW+1),...,Xmin(i,j),...,Xmin(i,j+HW-1),Xmin(i,j+HW)]
G(i,j)_out_min =min[Xmax(i,j-HW),Xmax(i,j-HW+1),...,Xmax(i,j),...,Xmax(i,j+HW-1),Xmax(i,j+HW)]
对于所得的最大值G(i,j)_out_max和最小值G(i,j)_out_min做平均运算,得到它们的平均值G(i,j)_out_tmp,并计算产生最大值G(i,j)_out_max和最小值G(i,j)_out_min之间的绝对差diff:
G(i,j)_out_tmp=[G(i,j)_out_max+G(i,j)_out_min]/2
diff=|G(i,j)_out_max-G(i,j)_out_min|
图1中共有N+1个最大-最小值运算单元,分别对图像t到图像t+N的N+1幅图像中的相应的G(i,j)像素进行如上的处理,得到N+1个结果:G(i,j,t)_out_tmp,G(i,j,t+1)_out_tmp,…,G(i,j,t+N)_out_tmp。这N+1个结果连同N+1个原始像素G(i,j,t),G(i,j,t+1),…,G(i,j,t+N)被传送到纹理检测单元。
纹理检测单元进行图2中所示的判断处理。如图2所示,纹理检测单元产生一个标志flag传送到后面的去噪音单元,该标志flag是通过一系列判断产生的,既将如上计算所得的N+1个平均值:G(i,j,t)_out_tmp,G(i,j,t+1)_out_tmp,...,G(i,j,t+N)_out_tmp分别与N+1个原始像素G(i,j,t),G(i,j,t+1),...,G(i,j,t+N)进行比较,如果每一个平均值都大于对应的原始像素值,或每一个平均值都小于对应的原始像素值,则flag被设置为TRUE,否则flag被设置为FALSE。
然后,去噪音单元会利用该标志flag以及前面产生的diff变量来判断是否进行去噪音操作:
if flag=TRUE或者diff>DST
then 不作去噪音处理,当前处理像素G(i,j,t)的值不作改动;
else
用G(i,j,t)_out_tmp代替当前处理像素G(i,j,t)的值;
其中DST是一个由用户设置的寄存器,表示去噪音处理中最大允许的噪音幅度。
当前像素G(i,j,t)处理完后,就开始处理下一个像素G(i,j+1,t),直到第i行中的像素均处理完成。然后,开始第i+1行的处理,直到当前处理图像t全部完成。
显然,一个像素的处理并不需要别的像素的处理结果,所以是可以并行处理的,但这会增加成本,因为并行的每一路的处理都要一套资源完成上述运算和判断。
之后设定当前处理图像为图像缓存器里的下一幅图像(注意,对于隔行的输入视频流应奇偶交替进行处理),继续处理。
可以看出,本发明中的方法只利用了当前图像t中的信息,即G(i,j,t)_out_tmp,来进行去噪音的计算处理,所以没有递归运算,也不会产生拖尾的问题。另外,纹理检测单元中的检测判断能使去噪音的操作避开图像中静止的纹理区域,使图像本身的高频信息得以保存,不受去噪音操作的影响
对于静止的纹理区域,即图像t,图像t+1,…,图像t+N中相应位置的纹理区域均一致未随时间发生变化,那么纹理检测单元中检测判断里用到的平均值G(i,j,t)_out_tmp,G(i,j,t+1)_out_tmp,…,G(i,j,t+N)_out_tmp应该都相等,且其中用到的原始像素G(i,j,t),G(i,j,t+1),…,G(i,j,t+N)也都相等,所以检测判断一定会得出flag=TRUE的结果,从而在去噪音单元中不做去噪音处理,图像中的纹理也就不会受去噪音的影响了。当图像中存在噪音时,噪音也可能造成平均值G(i,j,t)_out_tmp,…,G(i,j,t+N)_out_tmp及原始像素G(i,j,t),…,G(i,j,t+N)不尽相同,但在噪音不是非常大的时候,所有的平均值G(i,j,t)_out_tmp,…,G(i,j,t+N)_out_tmp都会比较接近,而所有的原始像素G(i,j,t),…,G(i,j,t+N)也会比较接近,这样得到flag=TRUE结果的概率会很高,从而能很好的保留图像中静止的纹理区域。另一方面,在实际情况中,当噪音很大的时候,即使图像t,图像t+1,…,图像t+N中相应位置的纹理区域均未随时间发生变化,噪音也可能造成平均值G(i,j,t)_out_tmp,G(i,j,t+1)_out_tmp,…,G(i,j,t+N)_out_tmp及原始像素G(i,j,t),G(i,j,t+1),…,G(i,j,t+N)不尽相同,从而得到flag=FLASE的结果,但这时的情况说明图像中的噪音已经大到可以覆盖图像原有的纹理了,所以我们认为这是非常特殊的情况,在这么大的噪音下,即使去噪音处理会影响到图像中原有的纹理,观看者也不易觉察,故可以认为这一点并不影响图像的观看。
与传统的递归方法相比,本发明中介绍的方法更为简便且易于在集成电路中实现。并且该去噪音方法及系统对于视频图像的亮度信号和色彩信号都适用。
前面提供了对较佳实施例的描述,以使本领域内的任何技术人员可使用或利用本发明。对该较佳实施例,本领域内的技术人员在不脱离本发明原理的基础上,可以作出各种修改或者变换。应当理解,这些修改或者变换都不脱离本发明的保护范围。