《1 引言》
1 引言
随着高清晰度电视 (HDTV) 、可视电话、因特网等数字视频的出现和发展, 扫描格式转换已成为相关领域的核心技术之一。而帧频提升技术则是扫描格式转换中上行转换的关键。该技术的计算复杂度大, 用硬件实现固定频率的帧频提升已很不容易, 实现任意频率的帧频提升就更加困难。另外, 由于帧频提升常产生非自然信号及噪声, 传统的运动补偿插补方法已不太适合, 需要寻找一种更高效的运动补偿插补方法。本文根据近年来在扫描格式转换方面的探索, 提出了一种新的帧频提升自适应插补算法。该算法通过引入可调内部参数, 较好解决了帧频任意提升问题;而加权块匹配误差的引入, 可消除噪声, 提高运动补偿的有效性。在算法研究的基础上, 通过设计查找表, 采用FPGA进行了快速实现, 并在自主开发的可接收现行模拟制式节目的数字化逐行电视接收样机中得到实际应用。
《2 算法的提出、原理及关键问题》
2 算法的提出、原理及关键问题
为使信号的传输频带降低, 现行的模拟广播电视系统采用的是隔行扫描方式。隔行显示也使得技术实现变得容易。然而, 随着电视机显示屏幕的增大, 亮度的提高, 隔行信号所产生的行间闪烁和屏幕大面积闪烁现象变得十分明显, 导致了电视图像的质量下降, 并会引起人的视觉疲倦。将隔行电视信号进行插补处理, 形成逐行扫描的电视信号, 可以有效的抑制和消除传统电视的行间闪烁、场闪烁和爬行现象。此外, 人类视觉系统对大面积闪烁比对闪烁的细节更敏感
《2.1 算法的提出及原理》
2.1 算法的提出及原理
帧频提升原理如图1所示, 其中T为原始图像序列中两连续帧之间的时间间隔或称之为帧周期。引入一个内部参数α (0≤α≤1) , 该参数决定了插补帧在时域中相对原始帧的位置, 原始帧是指经过隔行到逐行变换后得到的逐行帧, 这里作为帧频提升算法的输入帧。参数α的引入是基于以下考虑:Roberto Castagno 等提出了一种帧频提升方法
在已知参数α的情况下, 设前一原始帧 ( 图1中的前一帧 ) 中的一点A, 经过时间T后, 移动了一个运动矢量vo, 到达了后一原始帧 ( 图1中的后一帧 ) 中的位置B点, P点即为A, B两点在插补帧中的插补点。以下的讨论基于这样一个假设
《图2》
因此, 又可以把A点和B点用P点的矢量xP分别表示为:XA (xP- (1-α) vo, n-1) , XB (xP+αvo, n+1) 。这样, 通过参数α, 很容易确定与插补点P相对应的A, B两点的位置。可以认为A, P, B三点是运动物体上的同一点, 这样P点的像素值就可以通过A, B两点得到。
A, B两点是否正确选取完全决定了插补帧中P点像素值的正确性, 而运动矢量vo又可决定A, B两点的选取, 这就要求获得可信度高的运动矢量场。
《2.2 一些关键问题》
2.2 一些关键问题
如文献
《2.2.1 问题1:参数α的确定》
2.2.1 问题1:参数α的确定
由上一节可知, 参数α决定了插补帧相对原始帧在时域中的位置, 它在很大程度上, 由不同的输入帧频提升因子k确定。而由于插补帧在时域中插补的非线性, 即使在相同k值的情况下, 对于不同的插补帧, 参数α需要选取不同的值。因此, 在k值可变的情况下, 求解出参数α的值对硬件实现有很大难度。一般情况下, 可设k为有理数, 即k=m/l, 则插补方法是以l帧插补出m帧的方式周期性进行, 因此α也呈周期性变化, 且最小正周期为m。在输入帧频提升因子k已知的情况下, 一个周期内的第i帧对应的α值为
《图3》
整个插补过程中的第n个插补帧的位置参数α可以表示为输入变量k和n的函数, 如式 (3) 所示:
《图4》
《图5》
其中, 函数∃ (x) 表示对变量x取整, 即≤x的最大整数, 如∃ (0.3) =0, ∃ (1.8) =1。从上式可知, α是周期函数, 且有0 ≤α<1。例如, 当k=1.5 时, 有α={0, 1/3, 2/3, 0, 1/3, 2/3, …, | n∈[0, 1, 2, 3, …, N ] }。一方面, α具有周期函数的性质, 看到了实现可变参数帧频提升的可能性, 但仍能看出采用公式求解硬件实现的难度;另一方面, 即使求解出参数α, 当参数值等于0.5时, 参与硬件的后续运算是很容易实现的, 但对于不等于1/2n的参数值, 参与硬件的后续运算, 它的实现仍然较困难。
《2.2.2 问题2:运动补偿块及基于块匹配的运动估计》
2.2.2 问题2:运动补偿块及基于块匹配的运动估计
运动补偿帧频提升的效果依赖于运动矢量的可靠性。成功的运动估计算法的关键是高效地利用视频图像序列中存在的时域冗余量。在现存的各种运动估计算法中, 块匹配算法 (BMA) 由于其软件计算和硬件实现的简单性而被广泛地应用在许多视频压缩标准和视频处理系统中。块匹配算法的基本思想是把每一帧图像分割为一系列的矩形块, 通过不同的搜索方法在参考帧的搜索窗内为当前帧寻找一个匹配块。不同的搜索方法形成了不同的运动估计方法。
一个问题是补偿块与匹配块的大小。初期的实验表明, 块匹配运动估计中, 大小为4×4的较小匹配块要比较大的如10×10或16×16像素点的较大匹配块产生较多的不正确的运动矢量 (MV) 。然而, 16×16像素点的运动补偿块对于运动补偿帧频提升的插补算法显得太大, 较小的“5×5”的或“3×3”的, 更适合精确的帧频提升插补。因此, 运动补偿的设计要求:用于补偿的块要小, 而用于运动估计的匹配块又不能太小。
另一个问题是运动估计的计算复杂度。一方面要保证运动估计算法能够获得可信度高的运动矢量场;另一方面, 由于硬件资源的有限度, 又要求算法尽可能简单易于硬件实现。
《2.2.3 问题3:合适的插补方法的选取 》
2.2.3 问题3:合适的插补方法的选取
在获得视频序列的运动矢量场后, 在两原始帧之间进行的插补就可通过在两原始帧上进行移位计算来实现。即可使得插补点XP=XA。但是, 这是假设运动矢量场总能给出运动视频精确的或可信度高的描述, 而以上的这种假设在实际应用中并不有效, 这是由于下面几个原因:光照条件的改变, 物体的重叠, 噪声造成的矢量误差。因此, 运动补偿的设计就要求对于误差有很好的鲁棒性。
《3 算法的实现》
3 算法的实现
实现所提出的新的自适应帧频提升算法的结构框图见图2, 根据这里提出的算法的基本原理以及算法所存在问题的关键点, 主要采用了基于块匹配的空间递归运动估计, 用于快速高效确定内部参数α的k因子查找表, 以及对误差有很好鲁棒性的加权中值滤波等方法。
《3.1 空间递归块匹配运动估计》
3.1 空间递归块匹配运动估计
空间递归块匹配运动估计方法的提出主要是针对前述的问题2。为了适合硬件的实现, 引入文献
假设1 运动矢量场是连续的, 保证通过修改空间相邻补偿块的运动矢量可以得到当前补偿块的运动矢量。
假设2 物体都有惯性, 保证任何两连续帧间的运动都是一致的, 而且由于两帧的时间间隔很短, 两帧间的运动矢量长度较小, 可以设定一个可检测到的水平和垂直最大运动范围来减少运动矢量的搜索范围, 提高算法效率。
针对补偿块与匹配块的大小问题, 采用了图3所示的补偿块与匹配块。补偿块大小为3×3像素点, 但是, 运动矢量 (MV) 并不仅仅由3×3像素点决定, 块匹配误差 (BME) 为大小5×3个补偿块的匹配误差和。参考图1, 设A块、B块和P块是分别以图1中A, B和P三点为中心的3×3补偿块, 具体步骤如下:
步1 确定要插补的补偿块P块的待测运动矢量 根据假设1, 设当前要插补的补偿块P块为 (x, y, n) , 用前一补偿块 (x-1, y, n) 的运动矢量v作为参考, 仅仅搜索它的9个相邻矢量U (i) , i =1, 2, 3, …, 9, 并作为待测运动矢量, 如式 (4) 和表1所示:
《图8》
步2 确定最大搜索窗口 根据假设2, 本算法设定的所能检测到的最大运动范围是:水平方向上是4补偿块/帧, 垂直方向上是2补偿块/帧。这个速度限制就决定了搜索窗最大为9×5个补偿块。
步3 根据待测矢量确定A块和B块 对于每一个待检测运动矢量U (i) , 参见图1, 就可以根据参数α和要插补的P块 (x, y, n) 得到A块和B块在前后两原始帧中的位置。设ΔX
《图10》
其中, 函数∃ (x) 与式 (3) 中的意义相同。这样, A块和B块在两原始帧中的位置为
《图11》
步4 块匹配误差 由步3, 可用块匹配误差 (BME) 来衡量一对匹配块的匹配程度, BME越小, 匹配程度越高。但是, 当对统一的大面积背景区域进行检测时, 由于背景区域的一致性, 使BME对噪声非常敏感。所以, 噪声将使得利用BME标准检测到的运动矢量可能偏离其真实方向, 产生错误的运动矢量。由于采用的是空间递归方法, 该方法具有误差传递性, 对误差的校正需要较长的周期, 无法快速地对运动物体做出正确反应。为了避免上述情况, 对BME进行了改进, 提出一种称之为WBME的检测标准
《图12》
其中:l为水平块位置;m为垂直块位置 (见图3) ;E
《图13》
W (x, y) 是权值函数。
在WBME中引入权值函数W (x, y) , 其目的就是降低噪声的影响, 使得在大面积背景的情况下所检测到的运动矢量尽量保持在 (0, 0) 运动矢量的附近。确定权值函数
《图14》
其中, ux , uy为被检测运动矢量的水平和垂直分量, wx, wy分别为对应于两个分量的权值。经过实验得到两个权值的选取范围为0.1~0.5, 且有wx >wy。加权块匹配误差加大了靠近 (0, 0) 的运动矢量的权值, 使得在上述情况下, 算法能够快速反映运动变化;在正常情况下, 由于对应于最相关方向的BME总是远小于其它方向的BME, 这种加权并不影响运动矢量的正确选取。在图4中, 给出了BME标准与加入权值函数W (x, y) 后改进的WBME标准的实验结果比较。可以看出, WBEM比BEM对噪声有更好的抑制性。
步5 确定运动矢量 当前要插补的补偿块P块的运动矢量可根据式 (11) 获得。式 (11) 中, P块的运动矢量表示为vbest, E (g) WBME 表示待测矢量集中的最小块匹配误差, 则可以确定E (f) WBME所对应的待测矢量U (g) 即为P块的运动矢量。
《图16》
使得下一待测的插补块 (x+1, y, n) 以当前 (x, y, n) 的运动矢量vbest为参考矢量, 重复上面的步骤, 即可获得下一待测插补块的运动矢量。对插补帧中的每一待测插补块进行上述的处理, 就可获得插补帧的运动矢量场。
《3.2 非线性加权中值滤波》
3.2 非线性加权中值滤波
在获得视频序列的运动矢量场后, 针对前述问题3 , 对算法进行后处理是很有必要的。对相邻两帧进行平均而得到插补帧的方法
《图17》
一种中值方法
《图18》
这里, Xaverage是对应插补点空间位置的相邻原始帧上两点的平均。即
《图19》
由于用于插补的相邻两原始帧的贡献不一样, 所以采用加权平均, 即将式 (14) 进行如下改进:
《图20》
其中, 加权参数α的意义如前所述。这种非线性的方法产生很好的运动补偿插补效果。在图5中给出了实验结果的比较。
《3.3 k因子查找表》
3.3 k因子查找表
如图6所示, k因子查找表采用了一个8位的地址输入的查找表, 分别是6位的量化后的k因子, 2位的帧计数器输入, 输出是8位数据宽度表示的1/α和1/ (1- α) 。输出的8位数据也不是通常意义上的对1/α 和1/ (1-α ) 的表示, 而是高4位数据和低4位数据分别包含着1 /α和1 / (1-α) 的分子和分母信息。主要依据FPGA中内嵌的RAM块, 实现这种容量为512字节的查找表。这样, 一方面实现了内部参数α的快速运算, 另一方面, 对于参数值不等于1/2n的那些值, 很容易实现近似运算, 以便参与硬件的后续运算。显而易见, k 因子查找表有很好的实用性。
《4 算法的硬件实现》
4 算法的硬件实现
算法在硬件系统中的实现如图7硬件实现系统所示。图7 b为数字化电视接收机的整机系统后视图。图7 a为整机系统中的一个核心处理模块, 实现扫描格式转换功能。本算法是在该模块中的现场可编程逻辑器件 (FPGA) 中实现。在FPGA中, 还包含了自适应隔行到逐行变换和图像处理算法等本文未讨论的算法。一片容量约为5万门的FPGA, 本算法用了总资源的32 %, 用了FPGA内部50 %的RAM资源。在帧频提升因子k从1到1.5的变化范围内, 该算法得到了很好的应用效果。
《5 结论》
5 结论
本文讨论了在视频处理领域扫描格式转换中比例可变的帧频提升的插补方法, 提出了一种自适应帧频提升算法, 该算法采用空间递归块匹配进行运动估计和加权中值滤波进行运动补偿, 通过k因子查找表实现实时处理。还基于FPGA对算法进行了硬件实现, 成功地应用到实际系统中。算法快速有效, 有实用价值。这种算法进一步完善, 对实现FPGA芯片到专用集成电路 (ASIC) 转化具有重要的工程意义。