滚动新闻:
首页 > 应用案例 > 超高分辨率显示

GPU上实现超分辨率的实时处理

   超分辨率是根据一幅图像产生比原图象分辨率更高的图象的过程。相比于通过重新采样(如最近邻插值,双线性插值,三次样条插值)而放大图像的方法,超分辨率的放大方法往往能获得更好的放大效果,减少了边界模糊,锯齿等等。因为它们都包含了对图像放大的先验知识,图像放大的过程能得到更多的指导。

GPU上实现了超分辨率的实时处理

  另一方面,显示设备的分辨率不断上升。随着HDTV的逐渐普及,我们需要把原来PAL或NTSC制式的DVD片源拿到HDTV分辨率的显示设备上播放,而传统的方法是通过线性插值达到放大的效果,而随之带来的模糊影像往往不能让人满意。又如纽约时代广场上世界最大的LED广告牌,面积达1600平方米,几乎覆盖了整栋大楼。一个画面的数据量相当于一幅分辨率为10000*4000,也就是4000万像素的一张图像,这个分辨率是我们通常HD标准的20倍。我们几乎没有这么大的视频资源,只能通过后期放大。

  如果我们能以超分辨率放大这些视频资料,就能获得较好的播放效果;如果能做到实时处理,就不会占用多余的存储,也减小了网络传输的压力。

  但是,以现在常用的处理器的计算能力,用超分辨率的方法放大是一个相当消耗时间的过程,不可能做到实时处理(如在电影中,意味着24fps的帧率)。

  GPU的发展使超分辨率的实时处理成为可能。GPU天生就为图形图像处理这种并行度极高,计算量极大的应用而设计。随着人们对GPU的发掘,人们发现GPU不止可以做图形图像处理,它可以应用在很多并行计算上。CUDA的出现,又使GPU编程变得高效而简单。在这种背景下,提出了实时超分辨率的构想。

  本文通过CUDA,实现了一种超分辨率的算法,经实验验证,达到了实时处理视频图像的要求。在我们的实验中,把标准数字化NTSC电视分辨率(720*480)的视频图像转化为(1440"960)的超分辨率,能达到26.6fps的速度,符合实时处理的要求。

  超分辨率算法相关研究

  通过重新采样而放大图像的方法,执行效率较高,但在放大质量上有明显缺陷:

  (1)图像细节(空域高频量)丢失,图1比较了原图和在原图缩小一半并通过双线性插值放大一倍后的图像的高频和低频量的差异,可见图像低频部分的信息基本保留,但高频部分信息丢失严重,造成图象缺少细节,边缘模糊。

1.jpg
2.jpg

  (2)加深了锯齿等走样。如图2所示,其中上为原图像,下为双线性插值放大一倍后的图象。

  由于这些缺陷,人们试图用先验知识来引导图像放大,也就是所谓的超分辨率。

  超分辨率实现所需的先验知识来源大体可分为两类,一类是使用根据人的经验定制的模型作用于原图像,另一类是使用机器学习的方法来建立原图像和放大后图像之间的关系。使用定制的模型往往只对特定的场景(如人脸)有较好的效果。机器学习的方法虽然在特定的场景下不如有针对性的模型得出的结果优秀,但它有更好的适应性,更适用于内容多变的视频图像放大。

  使用机器学习的方法有个共同的特点,都是利用邻域像素点来估计放大后的像素点。

  Freeman等提出了基于样本的超分辨率方法,把训练图像分成小块,通过大量的学习,建立起各种低分辨率块与高分辨率块之间的一对多的关系,在应用训练结果来生成高分辨率图像时,又根据马尔科夫网络,来从多个备选高分辨率块中选出最与周围像素匹配的块。但是,这种方法可能会引入新的噪声。

  Atkins等提出了分辨率合成(RS)的办法,根据像素与它的邻居像素,对每个像素点进行分类,每个类使用不同的线性插值参数,最后得到对应的高分辨率像素块。在训练分类参数和插值参数的时候,采用了期望最大化(EM)的方法。

  Staclin使用前馈神经网络方法(NNSE)建立起高低分辨率图像像素的关系。其基本方法和RS算法类似,但神经网络方法建立的是非线性的关系。

  Ouwerkerk对包括RS和NNSE在内的8种超分辨率算法进行了比较和评价,认为RS和NNSE的方法是目前效果最好的方法。

  本文使用RS方法,在GPU上实现了超分辨率的实时处理。