声明:以下文章转载自疯狂的FPGA,作者CrazyFPGA
1 为什么要降噪?
作为最主要的多媒体传播载体之一,视频图像的质量问题得到了越来越多的关注,这就要求我们不但要不断完善传统的视频图像像素域去噪技术,而且还要进一步展开对新的视频图像降噪算法的研究与开发,比如近几年发展迅猛的转换域视频图像降噪算法。
视频处理系统的主要作用是对数字视频图像数据进行采集、处理、传输、显示等,在这些处理过程中,视频图像会不可避免遭到随机噪声的损坏。噪声的来源无处不在,包括采集、传输、处理中,各种噪声不但影响了视觉质量,产生不良的视觉感受,还会阻碍用户获取真实正确的信息,甚至使用户对视频信息产生曲解。因此在所有数字视频图像处 理技术中,图像降噪技术就显得尤为重要。视频图像降噪也是图像缩放、编码、解码、图像增强以及目标识别等过程的预处理阶段,若处理不当会导致噪声在后续过程的累积,严重影响视频图像后续的各种处理任务。因此,面对数字视频图像应用系统对降噪技术的迫切需求,开发和研究更为理想的视频降噪方案非常有必要。
2 什么是降噪
图像是2D的空间域上的像素,随着时间的延续,每秒25、30、60帧,就成了视频,那么2D也就扩展到了3D,因此我们直接从3D来解释如何降噪(当然3D也包含了2D)。
2.1 3D降噪的优势
图像噪声从统计理论观点可以分为平稳噪声和非平稳噪声两种。在实际应用中,不去追究严格的数学定义,这两种噪声可以理解为:其统计特性不随时间变化的噪声,称之为平稳噪声;其统计特性随时间变化而变化的噪声,称之为非平稳噪声。
为克服运动带来的时域非平稳特性,还可进一步划分为运动估计方法和运动自适应的滤波方法:运动估计的降噪方法直接利用运动估计过程找到当前像素在参考帧中的对应像素,通过维持时间维的平稳性以保证滤波效果,实际上是沿着像素在图像序列中的运动轨迹进行滤波;运动自适应的滤波方法则直接沿着时间轴进行滤波,但采用某种自适应机制抵消运动引起的时域非平稳。
在国内,华为的视频降噪专利中,在进行滤波之前判断平坦区域和静止区域。对于平坦区域的像素点进行低通滤波,对静止区域的像素点进行多图像平均处理,对边界区域的像素点不进行低通滤波、以保护边缘,对运动区域像素点不进行处理,避免了运动剧烈的画面出现‘拖尾’的现象。
2.2 空域降噪介绍
空域降噪为在像素域(单帧)以及转换域进行。比如中值滤波、均值滤波、双边滤波等像素域处理算法,对相邻像素进行处理;转换域滤波需要先将图像进行分解,在转换域进行滤波后再反变换回来,这种方法比较典型的有小波降噪。
空域降噪不考虑时间的延续性,就当前帧进行处理,好处是保持了当前帧的独立性,不会因为前后帧率的运算而使得图像产生拖影、快效应等结果。
但空间域降噪方法只考虑到相邻像素间的相关性,对视频序列的每一帧进行独立处理,而忽视了视频序列的时间相关性,因此空间域降噪会引起图像的降质,导致图像边缘模糊,失去了图像的细节。
视频图像的空域滤波是在单帧视频图像中的滤波,即利用的只是图像的空间上的相关性,不会采用其他帧的信息,空域滤波可以采用二维平面图像处理中的降噪方法
2.2.1 平滑性滤波
平滑线性空域滤波器的输出是包含在滤波掩模邻域内像素的简单平均值,也称均值滤波器。它用滤波掩模确定的邻域内像素的平均灰度值去代替掩模中心像素点的值,这种处理减小了图像灰度的‘尖锐’变化。由于典型的随机噪声由灰度级的尖锐变化组成,因此,常见的平滑处理应用就是降噪,但是图像边缘也是由图像灰度尖锐变化带来的特性,因而均值滤波总是存在不希望的边缘模糊的负面效应。实现步骤如下:
1) STEP1:将掩模中心与图中某个像素位置重合。
2) STEP2;将掩模的各个系数与掩模下各对应像素的灰度值相乘。
3) STEP3:将所有乘积相加,再除以掩模的系数的和。
4) STEP4:将上述运算结果赋给图中对应掩模中心位置的像素。
均值滤波器可以衍生出另一种特殊的加权均值滤波器,用不同的系数乘以像素,这样,从权值上看,一些像素比另一些更重要。如下图,左为均值滤波,右为加权均值滤波:
2.2.2 统计排序滤波
统计排序滤波器是一种非线性的空域滤波器,它的响应基于图像滤波器包围的图像区域中的像素的排序,然后由排序结果决定的值代替中心像素的值。统计滤波器中最常见的例子就是中值滤波器,它是用像素邻域内灰度的中值代替该像素的值。
【优点】:
中值滤波器的使用非常普遍,它降噪效果较好,对图像的模糊程度比线性平滑滤波器的模糊程度要低,也比均值滤波器更适合去除加性椒盐噪声。
【缺点】:
由于实际的图像信号具有极其复杂的结构,这些结构(例如线段、锐角等)可能会被窗口较大的中值滤波处理破坏,排序过程很可能破坏任意结构和空间的邻域信息。
2.2.3 双边滤波
传统的平滑线性滤波器将图像中的每个点与其相邻的几个像素点的像素值作邻域运算,即进行加权平均运算。当图像中存在明显的边缘信息时,通常的邻域运算必然会导致图像中边缘点的像素值发生变化,使图像的边缘变得模糊不清。
为了改善这一现象,提出了双边滤波的方法,双边滤波器模板的卷积权值的选取不仅取决于普通低通滤波的像素邻域位置关系,同时还由相邻像素的亮度信息所决定。用模板对图像的边缘进行平滑处理,在有效去除噪声的同时,还能很大程度地保持并加强边缘信息。
2.2.4 非局部平均滤波
双边滤波采用了距离与相似度因素,进行权重的计算,但在相似度计算时,仅仅是通过像素间的均方差(相似度)来计算权重,容易受噪声影响。而非局部平均滤波采用块之间的相似度计算,有效的提高了匹配的准确度,对噪声的抑制及边缘的保护程度更好。
非局部平均滤波是对双边滤波算法的进一步的推广,该算法是对传统局部降噪模型的一个革新。图像中往往含有许多冗余信息,充分利用这些冗余信息为降噪服务,这是非局部平均滤波的主要思想。它的主要特点是:该方法不是用图像中单个像素的灰度值进行比较,而是对该像素邻域的整个灰度的分布状况进行比较,根据灰度分布的相似性来贡献权值。
虽然非局部平均滤波是对双边滤波的推广,但它不同于双边滤波,它并没有利用象素点之间的几何距离,而是完全依赖于像素点之间的相似程度,在滤波时用整幅图像的像素对当前像素进行滤波。
两个像素的邻域的相似度越大,权系数就越大,对结果的影响越大;
两个像素的邻域的相似度越小,权系数就越小,对结果的影响也就越小。
由于充分利用了图像的自相似冗余信息,非局部平均滤波的降噪效果比以上介绍的空域滤波的降噪效果都有较大幅度的提高。但是非局部平均滤波的计算量非常大,限制了它的实际应用。例如,对于一个有M个像素的图像,需要M2的计划才能全局滤波。
基于此,已经有一些关于非局部平均滤波的快速算法的——后续如果有时间,我会重点展开此算法的FPGA/ASIC实现架构,从架构探讨出来来讲讲如何进行FPGA加速运算。
总结:
1)均值滤波:直接的加权平均,边缘模糊;
2)高斯滤波:考虑像素权重的正态分布,相比均值滤波对细节有一定提升;
3)双边滤波:同时考虑距离和相似度,对边缘的保持效果较好;
4)引导滤波:根据梯度变化求解线性滤波系数,公式的推导比较麻烦,算法对边缘保持效果比双边要好;
5)非局部平均滤波(NL-Means):基于块相似度匹配来确认权重,计算量比较大,但能获得比较好的效果,对边缘的保护程度也还可以。
高斯滤波和NLMeans的权重都符合高斯分布,区别是前者根据像素点之间的距离计算权重,后者根据块之间的相似度计算权重,如下图所示(左边是高斯滤波空间距离d,右边是非NLMeans相似度MSE)。要衡量两个邻域块的相似度,有多种指标,均方误差(MSE)是最常用的相似度衡量指标之一。非局部均值滤波算法就是使用MSE来计算两个邻域块的相似度。
2.2.5 降噪效果评判标准PSNR
2.3 时域降噪介绍
时域降噪处理不仅局限于当前帧,而是根据前后帧,甚至递归的模式来进行图像的降噪。时域降噪方法认为视频信号相邻帧之间是平稳的,信号沿着时间轴进行,因此采用时域降噪可以避免空间边界上的过平滑。
由于时域上的非平稳特征,可能在运动场景下产生拖尾现象。但可以通过运动补偿——根据视频前后帧进行运动估计,来增强视频图像在时域上的平稳性。
在视频图像降噪中,时域滤波比空域滤波在保护视频图像边缘和细节方面更具优势,但需要借助运动估计来更好地利用时域上的相关性。目前基于运动估计视频降噪时域滤波算法受运算量的限制较大,容易产生由于匹配块搜索不准确引起的块效应。
另外,3D降噪在时域最后只进行了简单的加权平均来滤波,更多的降噪算法研究,很大程度上依然依靠空域滤波进行。
综上,视频图像的时域滤波就建立在多帧图像平均处理的基础上,对静态的视频图像,利用各帧信号的相关性和噪声的不相关性,采用对视频图像多帧直接平均技术,可以大大提高图像的信噪比,改善图像质量。这种方法只适合于静态图像序列,而对于运动图像序列,由于帧间的相对运动不能忽略,采用帧间平均技术会使运动目标边缘模糊,有时处理后的视觉效果让人难以接受。
运动部分的平均处理容易产生便于模糊,运动拖尾等不良影响。也可以对运动部分不做滤波或低强度滤波,但降噪强度和效果不够。为了充分利用时域相关性,运动估计的思想越来越多的应用在视频图像降噪中。
2.4 运动强度估计
运动估计和运动补偿技术是视频编码和视频处理中非常重要的技术,它们对降低视频序列时间冗余度、提高编码效率起着非常关键的作用。它们能极大地消除帧间的相关性,明显降低了对存储空间和传输比特率的要求。
在视频图像序列中,相邻帧间的主要变化是由于构成景物的各物体的运动引起的,检测物体的运动参数,并通过这些运动参数由前一帧预测当前帧,这就是运动补偿(motion compensation,MC),运动补偿中主要的任务是检测物体的运动参数,称为运动估计(motion estimation,ME)。运动估计过程的目的在于获得序列图像的运动矢量,它的实质是对序列图像的位移场进行估计。而运动补偿过程则根据所得到的运动矢量来对当前帧进行预测。
在时域滤波中,如果仅仅进行简单的前后帧加权平均,对于运动剧烈的图像,则会产生很严重的拖影及快效应。通过运动估计得到图像内物体的运动矢量,从而根据运动强度、前后帧的匹配块,一定程度能解决时域滤波的弊端。
典型的运动估计方法有光流法、块搜索法。
2.4.1 光流法
光流的概念是Gibson在1950年首先提出来的。它是空间运动物体在观察成像平面上的像素运动的瞬时速度,是利用图像序列中像素在时间域上的变化以及相邻帧之间的相关性来找到上一帧跟当前帧之间存在的对应关系,从而计算出相邻帧之间物体的运动信息的一种方法。
一般而言,光流是由于场景中前景目标本身的移动、相机的运动,或者两者的共同运动所产生的。其计算方法可以分为三类:
(1)基于区域或者基于特征的匹配方法;
(2)基于频域的方法;
(3)基于梯度的方法;
简单来说,光流是空间运动物体在观测成像平面上的像素运动的“瞬时速度”。光流的研究是利用图像序列中的像素强度数据的时域变化和相关性来确定各自像素位置的“运动”。研究光流场的目的就是为了从图片序列中近似得到不能直接得到的运动场。
光流法的前提假设:
(1)相邻帧之间的亮度恒定;
(2)相邻视频帧的取帧时间连续,或者,相邻帧之间物体的运动比较“微小”;
(3)保持空间一致性;即,同一子图像的像素点具有相同的运动
这里有两个概念需要解释:
运动场,其实就是物体在三维真实世界中的运动;
光流场,是运动场在二维图像平面上的投影。
如上图所示,H中的像素点(x,y)在I中的移动到了(x+u,y+v)的位置,偏移量为(u,v)。
光流法用于目标检测的原理:给图像中的每个像素点赋予一个速度矢量,这样就形成了一个运动矢量场。在某一特定时刻,图像上的点与三维物体上的点一一对应,这种对应关系可以通过投影来计算得到。根据各个像素点的速度矢量特征,可以对图像进行动态分析。如果图像中没有运动目标,则光流矢量在整个图像区域是连续变化的。当图像中有运动物体时,目标和背景存在着相对运动。运动物体所形成的速度矢量必然和背景的速度矢量有所不同,如此便可以计算出运动物体的位置。需要提醒的是,利用光流法进行运动物体检测时,计算量较大,无法保证实时性和实用性。
光流法用于目标跟踪的原理:
(1)对一个连续的视频帧序列进行处理;
(2)针对每一个视频序列,利用一定的目标检测方法,检测可能出现的前景目标;
(3)如果某一帧出现了前景目标,找到其具有代表性的关键特征点(可以随机产生,也可以利用角点来做特征点);
(4)对之后的任意两个相邻视频帧而言,寻找上一帧中出现的关键特征点在当前帧中的最佳位置,从而得到前景目标在当前帧中的位置坐标;
(5)如此迭代进行,便可实现目标的跟踪;
2.4.2 块搜索法(后续重点)
运动强度的估计对于时域滤波而言非常的重要,首先通过一定方式实现运动强度的估计,得到运动矢量/位移,其次根据运动强度的大小确定时域滤波或空域滤波的阀值、系数等。前文已经经过了一定的阐述,在实时视频监控系统中,光流法由于运算量大及复杂的缺点,不易实现实时处理,因此运动强的估计基本都采用了基于SAD判断标准快搜索法。
块匹配法(Block Matching Algorithm BMA)以宏块为单位进行运动估计,将图像划分为互不重叠的子块,并认为子块内所有像素的位移量是相同的,这意味着将每个子块视为一个“运动物体”。每一帧图像所划分的子块称为宏块,宏块的大小和形状并没有特别规定,一般为MxN(可取8像素×8像素,8像素x16像素或16像素x16像素)。然后根据一定的匹配准则,对于当前帧中的每一宏块在参考帧中的某一给定搜索范围内找出与当前宏块块最相似的块即匹配块,由匹配块与当前块的相对位置计算出运动位移,所得运动位移即为当前块的运动矢量。参考帧为当前帧的相邻帧。如下图所示:
块运动估计示意图
fk为当前帧,fk-1和fk+1分别为当前帧的前一帧和后一帧。Bk-1和Bk+1分别为当前帧中的当前块反以前一帧和后一帧为参考帧,在参考帧中搜索出的匹配块。
块匹配准则是判断块相似程度的依据,因此匹配准则的好坏直接影响了运动估计的精度;另一方面,匹配运算复杂度、数据读取复杂度在很大程度上取决于所采用的块匹配准则。目前,运动估计算法中常用的块匹配准则有三种,即平均绝对差(MAD)准则、最小均方误差(MSE)准则和归一化互相关函数(NCCF)准则。
由于MAD准则不需要乘法运算,实现简单、方便,利于实现的实时性,所以使用最多。实际中通常使用绝对误差之和(Sum ofAbsolute Difference,SAD)准则代替MAD准则,其定义如下:
根据SAD判断准则实现的块搜索法,在实际实现中,也有多种不同的搜索方案,这在后文实现方案中,将详细进行描述。
块搜索法也有很多种不同的实现方案,主要有如下全局搜索法,三步搜索法,改进后的三步搜索法,四步搜索法,菱形搜索法等。其中三步搜索法为最常用的快搜索法。这几种块搜索法的详细介绍如下所示:
2.4.2.1 全局搜搜法(FS)
全搜索法(Full Search Method,FS),也称为穷尽搜索法,是一种搜索策略最简单的搜索算法。它对整个搜索窗范围内所有可能的候选位置计算该位置的匹配值,从中找出具有最小匹配准则值的块即为最佳匹配块,其对应的偏移量即为运动矢量。步骤如下:
第一步:从搜索窗中心开始,按螺旋方式逐个像素点位置计算匹配准则,直到遍历搜索窗范围内的每一个像素点。
第二步:找出最小块误差(Minimum Block Distortion,MBD)点,该点所对应的块即为最佳匹配块,其相对位移即是所求的运动矢量。
FS算法是最简单、最原始的块匹配算法,由于遍历全局,因此找到的匹配点必是全局最佳的,可靠度高,通常是其他算法性能比较的标准,但是它的计算量非常大,搜索时间很长,因此限制了它在需要实时压缩场合的应用,所以有必要进一步研究其他快速搜索算法。
2.4.2.2 三步搜索法(TTS)
三步搜索法(Three Steps Search,TSS)是一种简单有效的运动估计搜索算法,被广泛使用在低比特率视频压缩场合中。若最大搜索长度为8,搜索精度取1个像素,则步长为4,2,1,共需要三步即可结束搜索,因此而得名为三步法。具体步骤如下:
1) STEP1:从原点开始,选取最大搜索长度的一半为步长(4),在周围的8个点(包括本身)处进行块匹配计算并比较。找出MBD点。
2) STEP2:将步长减半(2),中心点移到上一步的MBD点,重新在周围距离步长的8个点(包括本身)处进行块匹配计算并比较。找出MBD点。
3) STEP3:再将步长减半(1),在中心及周围8个点(包括本身)处找出MBD点,若步长为1,该点所在位置即对应最佳运动矢量,算法结束;否则重复第二步(比如搜索长度=32,则需要5步16-8-4-2-1)。
上图给出了三步搜索法的示意图,每个点上的数字表明了每一步搜索中计算的候选块的位置,黑色点是每一步的MBD点。图中点((+4,-4)、(+6,-4)是第一、第二步的最小块误差点,第三步得到最终运动矢量(+7,-5)。
总结:TSS是较早的搜索速度和搜索精度两者取得比较适当折中的快速算法,因其搜索步骤简单固定而易于硬件实现,已经在很多视频压缩系统中得到了应用。但其在整个运动搜索过程采用统一的搜索模板,容易造成由于第一步的步长过大而引起误导,从而对小运动效率较低
2.4.2.3 新三步搜索法(NTTS)
新三步搜索法(NTSS)是在三步法的基础上改进的。它利用运动矢量的中心偏移分布特性,采用具有中心倾向的搜索点模式,同时应用中止判别技术,减少搜索次数。具体步骤如下所示:
1) STEP1:除了对原三步法第一步的9个点进行匹配搜索之外,还对搜索窗中心的周围8个点进行搜索。如果MBD点在中心位置,则结束搜索:若是在中心位置周围的8个点上,则转STEP2:如果在最外的8个点上,则转STEP3。
2) STEP2:上一步得到的MBD点为中心继续搜索其周围8个点(包括本身),若搜索得到的MBD点在当前搜索窗中心,则结束搜索,否则重复STEP2。
3) STEP3:将步长减半,中心点移到上一步的MBD点,重新在周围距离步长的8个点(包括本身)处进行块匹配计算并比较,找出MBD点。
4) STEP4:再将步长减半,在中心及周围8个点(包括本身)处找出MBD点,若步长为1,该点所在位置即对应最佳运动矢量,算法结束;否则重复第二步(比如搜索长度=32,则需要5步16-8-4-2-1)。
运动矢量通常总是高度集中分布在搜索窗的中心位置附近,NTSS采用中心倾向的搜索点模式不仅提高了匹配速度,而且减少了陷入局部极小的可能性:而采用中止判别技术则大人降低搜索复杂度,提高了搜索效率。
如上图所示,每个点上的数字表明了每一步搜索计算的候选块的位置,黑色点是每一步的MBD点。图中点(1,-1)是第一个搜索阶段的MRD点,也是第二搜索阶段的MBD点,且位于搜索窗口中心,故最终运动矢量为(1,-1)。
2.4.2.4 四步搜索法(FTS)
四步搜索法(Four Steps Scarch,FSS)类似于三步搜索算法,但它基于现实中序列图像的一个特征,即运动矢量通常是中心偏移分布的。TSS算法第一步用了9x9(半径为8时)的搜索窗,这很容易造成搜索方向的偏离,FSS算法首先用5x5的搜索窗口,每一步将搜索窗的中心点处移向MBD点处,且后两步搜索窗的大小依赖于MBD点的位置。
1) STEP1:以搜索区域原点为中心选定5x5的搜索窗(如图(a)所示),然后在9个检测点处进行匹配计算,若MBD点位于中心,则跳到STEP3:否则进行STEP2。
2) STEP2:窗口保持为5x5,但搜索模式取决于STEP1的MBD点。如果最小点在四角处,增加5个点(如图 (c)所示):如果最小点在四个边的中点,则增加3个点(如图(d)所示)。若这一次MBD点在窗口中心,,则进行STEP3;否则重复STEP2。
3) STEP3:将窗口缩小3x3,计算步长为1的8个点(如图 (b)所示),找到最小误差点的位簧即为最佳运动矢量。
上图中,黑色点是每一步的MBD点。图中(0,2)是第一步的MBD点,按照图 (d)的搜索模式得到第二步的MBD点(2,4),再按照图(c)的搜索模式得到第三步的MBD点(2,4),最后按照图 (b)的搜索模式得到第四步的MBD点(3,5),即(3,5)是运动矢量。
2.4.2.5 菱形搜索法(DS)
菱形搜索法(Diaraond Search,DS)是目前快速块匹配算法中性能较优异的算法之一。
搜索模型的形状和大小不但会影响整个算法的运行速度,而且也会影响它的性能。由于这个误差表面通常不是单调的,所以搜索窗口太小,就容易陷入局部最优;而若搜索窗口太大,又容易产生错误的搜索路径。
统计数据表明,最佳匹配点通常在以搜索窗口中心为圆心,两像素为半径的圆内(所以哦不适合快速运动的场景)。
DS算法采用了两种搜索模板.分别是有9个检测点的大搜索模板LDSP(Large Diamond Search PaUcm)和有5个检测点的小搜索模板SDSP(SmallDiamond SearchPaUcm),搜索时先用LDSP匹配计算,当最小块误差MBD点出现在模板的中心点时,换用SDSP进行匹配计算,这时5个点中的MBD点即为最优匹配点。
1) STEP1:以待处理的块为中心,在搜索窗内按大菱形模板分别比较9个搜索点,如果MBD点为菱形的中心点则转到STEP3,否则转到STEP2。
2) STEP2:以上一步得到的MBD点为中心组成一个新的大菱形,搜索其范围内未匹配计算过的块。如果MBD点在中心点则转到STEP3,否则重复该步骤。
3) STEP3:将搜索方式改为小菱形模板,搜索其范围内未匹配计算过的块,得到的MBD点即为所求的最佳匹配点。
上图显示了一个用DS算法搜索运动矢量(2,-3)的例子,每个点上的数字表明了各搜索阶段计算的候选块的位置,黑色点是每一步的MBD点。搜索共有4步,每一步的MBD点分别为(0,2),(1,-3),(1,-3),(2,-3),使用了三次LDSP和一次SDSP,总共搜索了21个点。
总结:DS算法分析了视频图像中运动矢量的基本规律,选用大小两种形状的搜索模板,先用大模板搜索,由于搜索步长大,搜索范围广,可以进行粗定位,使搜索过程不会陷于局部最优;当租定位结束后,可以认为最优点就在大模板周围8个点所围的菱形区域中,这时再用小模板来准确定位,使搜索不至于有大的起伏。此外,DS搜索时各步骤之间有很强的相关性,模板移动时只需在几个新的检测点处进行匹配计算,所以也提高了搜索速度。
3 时空联合实现方案
如上图所示,当年也是研究了一些方案,根据3D降噪算法理论实现的相关知识,及多篇论文实现途径分析的结果,最终综合输出的3D降噪的实现方案。
该算法结合了时域滤波和空域滤波,在时域上,基于下采样运动估计搜索算法在当前帧的前一帧和后一帧中同时搜索匹配块。对搜索到的匹配块进行运动强度检测,如果运动强度较小,就进行时域滤波,如果运动强度过大,就为对当前块进行空域滤波。另外,该算法中设计了噪声标准差估计单元,能够根据噪声标准差自动调整运动强度检测阈值,准确判断块的运动强度,同时,估计出的噪声标准差也用作空域滤波器的参数。
相关的模块介绍如下所示:
3.1 下采样处理
图像的采样可以看作是用采样网格对图像进行采样,当采样网格对信号采样从低分辨率转换为高分辨率时,称为上采样,即图像的放大;当采样网格对信号采样从高分辨率转换为低分辨率时,称为下采样或亚采样,即图像的缩小。
对于给定的视频信号,如果假设在高分辨率采样时满足奈奎斯特定理,那么下采样时,
若只是简单地丢弃某些行和列来增大采样间隔,这时采样频率就可能不再满足奈奎斯特抽样定理,导致频谱域中发生混叠现象,产生混叠失真。
解决办法就是先对视频信号进行滤波,压缩器频带,使得预滤波之后的信号频谱被限制在有限范围之内,以便在下采样后傅立叶变化的频域中不会出现先后信号频谱的混叠。
双线性插值效果比最近邻域效果要好,方式如下:
好处1:计算减少为原来的1/4;
好处2:下采样已经做了一次低通滤波,一定程度克服了噪声影响
3.2 噪声方差估计单元
噪声方差估计模块是采用基于求块方差的加权平均方法。准则是避免受到有用信息的影响,寻找空白或者平坦的地方。
先将8´8大小的宏块分割为四个 4´ 4大小的子块,分别计算出这四个 4´ 4 大小子块的方差,然后对这四个 4´ 4 大小子块的方差进行加权平均,以加权平均后的方差值作为8´8宏块的方差估计值,最后从所有宏块中选出方差最小的一个值作为图像最终的方差估计值。
根据噪声方差估计值自动调整运动强度检测的阈值T,准确判断当前块的运动强度,同时也用于自动调节时域滤波器的滤波系数。
实际调试中,通过噪声的方差表示噪声大小的等级,比如讲噪声等级根据ISP调试分为几段,每段对应固定的阀值T,以及相应的滤波系数等。这样,通过噪声方差的实时检测,即实现了自适应阀值及滤波系统的调整。。
3.3 运动强度估计方法
前文已经详细的分析了流程,通过下采样后,采用块三步搜索法最终得到运动矢量,确定运动强度。该运动强度不仅用于和通过方差得到的阀值T进行对比,决定用时域滤波还是空域滤波,而且决定了时域滤波的像素映射关系。
运动强度作为3D降噪的是时域降噪最重要的部分。基于块匹配的运动估计由于计算简单便于实现,是目前运动估计的主流。但是它在以下情况会出现较大的误差:物理运动不是简单的平移运动;块内包含多个不同的运动物体;块内包含遮挡、背景变化或者照明环境变化。另外基于块匹配的运动估计也不适用于块缩放、旋转运动和局部变形等情况。所以基于块匹配的运动估计的时域滤波不是对所有视频图像都能进行恰当的滤波,特别是在以上情况出现时。这时为了取得好的降噪效果,需要对视频图像进行空域滤波。
因此时空联合的3D降噪算法,对图像噪声的抑制以及质量的提升,有着非常显著的作用和意义。
3.4 时空联合降噪
前文我们已经得到了运动强度、阀值T,此时我们可以进行相关的滤波计算实现了。主要是时域滤波,可以通过前后帧运算得到,也可以根据当前帧域前一帧的运算得到结果,这两者的区别在于,前者对内存及计算量都有double的要求,对噪声可以更好的消除与抑制,但拖影问题可能会加重;后者的好处在于带宽及计算量相对需求1/2,拖影相对还好,但噪声的抑制可能没有三帧计算的好。
3.4.1 三帧时域滤波
前后帧域当前帧的运算,如下:
BK-1,Bk,Bk+1分别为前一帧、当前帧、后一帧,c1图像运算的权重。当运动强度小于T时进行时域滤波,反之则进行空域滤波。假设c1=0.5,在运动较小时,针对匹配块的像素进行运算,则取上一阵的0.25权重,当前帧的0.5权重,下一帧的0.25权重。
当运动强度大时不进行空域滤波。
3.4.2 双帧时域滤波
当前帧与上一帧的运算,如下:
Bt-1、Bt分别为前一帧、当前帧、后一帧,w图像运算的权重。当运动强度小于T时进行时域滤波,反之则进行空域滤波。假设w=0.5,在运动较小时,针对匹配块的像素进行运算,分别取前后帧0.5的权重。
当运动强度大时不进行空域滤波。
3.4.3 空域滤波的选择
空域滤波采用平滑性滤波、统计排序滤波计算量非常小,且实现简单,但对图像的细节与边缘损失比较大;
非局部平均滤波为双边滤波的扩展,能更好的保留图像细节与边缘的同时,抑制噪声。但非局部平均运算量比较大,硬件实现的代价比较大。BM3D为非局部平均算法的扩展,效果有提升,计算量也不小。
首先保证图像的质量的前提,不应选择平滑滤波、统计排序滤波等损失大的算法;其实为了更好地效果,监控系统中以损失面积而换取更好的质量,也能接受。研究+统计多款不同监控产品,采用非局部平均滤波,或者BM3D算法的,虽然硬件代价大,但是效果显著。
非局部平均算法效果如下:
Lokiii1: 设计一个并行6输入32比特加法器代码里的usedw信号是什么呢
不要温和的走入那个良夜: 你好,博主,你说valid最好不要以来ready信号,但是第二种情况不就是等ready信号为高时,才发出valid信号,请问如何理解第二种情况呢?
qq_43241888: 博主能否提供一份TB文件,链接里的TB文件运行起来感觉有些异常
你们不卷了吗: 你好,可以看一下你的工程文件吗?我按照博主的代码烧录进去串口助手发送的时候没有反应
2401_82789629: 为什么我把代码写进去点阵屏都不亮?