摘 要: 在进行非真实感渲染(NPR)处理时需要大量的计算,这对高帧率、高分辨率的视频做实时的NPR渲染是一个难题。根据FPGA以并行运算为主的特点,对传统的NPR算法做了改进和简化,最终设计了一种基于FPGA的实时NPR系统。实验结果表明,该系统对高帧率、高分辨率的视频做实时NPR处理具有运算速度快、系统稳定等特点,同时还具有体积小、便于携带等优点。
0 引言
非真实感渲染(NON-photorealisTIc rendering,NPR)是计算机图形学的一类技术,主要模拟艺术形式的画面风格,也用于发展新的绘制风格。与传统的追求真实感的计算机图形学不同,NPR受到油画、素描、技术图纸和动画卡通的影响。它已经以卡通造影的形式出现在电影和电子游戏中。非真实感绘制技术从20世纪80年代开始兴起,当时的研究进展缓慢。直到90年代中期,尤其是EUROGRAPHICS和SIGGRAPH上关于这方面的几篇论文才确立了这一领域的雏形[1]。近年来,NPR越来越多地被应用到各个领域,例如视频通信、视频游戏、精密程度较高的医学和科学插图[2],由此可见高分辨率、实时的NPR系统越来越凸显出重要的地位。
目前实现NPR处理主要有两种途径:一种是在PC机上进行处理[3-7];另一种是在嵌入式系统中进行处理[8]。参考文献[3]和参考文献[4]主要在PC上针对单幅图片做了NPR处理,参考文献[5]利用OpenCV API在计算机上对图片和视频实现了抽象处理,参考文献[6]和[7]则在PC上用特征流法和光流法等特定算法对视频做了抽象处理。在NPR系统中,图像滤波、边缘检测、色彩变化等都需要大量复杂的运算。因此在PC上很难对分辨率稍大或者帧率稍高的视频做到实时处理。又由于PC机体积较大,不方便系统的移动,所以在嵌入式系统上做NPR是必然的趋势。参考文献[8]则是在一个以Xilinx Virtex-2 FPGA为核心的平台上对单一图片做了油画处理,但是由于其平台的限制,并未实现对视频的实时处理。
本文在以Xilinx Virtex-5 FPGA为核心的自行设计的高速图像处理平台上,实现了对Camera Link接口相机采集到的视频做实时的NPR渲染,并输出到显示器上进行显示。本文首先对NPR算法进行讲解,然后对系统和NPR算法的硬件结构做出具体分析,最后给出实验结果及结论。
1 算法描述虽然NPR渲染的具体实现方法多种多样,但是它们的处理流程大致相同。经过大量的文献查阅,主流的NPR渲染流程都要经过边缘增强、扩散滤波、量化光照信息三个步骤。本文也采用这种流程进行处理,每个步骤所采用的具体方法将在下面进行介绍。
1.1 边缘增强
当检测到边缘点之后,把边缘点的RGB分量全部置为0,即可达到边缘增强的效果。目前主流的边缘检测方法有差分边缘检测、Roborts算子、Prewitt算子、Kirsh算子、Laplace算子、LOG算子和Canny算子,考虑到在FPGA上实现的复杂性及资源利用率,本文采用的是Prewitt算子。
通常情况下,边缘检测每次只对图像中3×3的图像块进行处理,如图1(a)所示。图像块的第一行和第三行的差近似x方向的导数,第三列与第一列之差近似于y方向的导数[9]。如下所示:
Gx=(z7+z8+z9)-(z1+z2+z3)(1)
Gy=(z3+z6+z9)-(z1+z4+z7)(2)
上面就是Prewitt算子,Prewitt算子只有简单的加减法,非常适合于FPGA实现。Prewitt算子模板如图1(b)和(c)所示。
1.2 扩散滤波
NPR的另一个重要步骤是扩散滤波,它能模糊较小的不连续和突出的边缘,并且达到图像色彩扩散的效果。处理速度较快的经典图像滤波算法有邻域平均法和中值滤波法等。由于要实现扩散滤波的效果且要兼顾FPGA的运算特点,本文决定采用邻域平均法。邻域平均法是把相邻像素的相应分量值的平均值作为中心点像素相应分量值。若输入图像中某点的各分量值为f(j,k),以其为中心,取N×N的窗口像素组成的点集用A表示(其中N=3,5,7…)。经邻域平均法滤波后,像素f(j,k)对应的输出为[10]:
此算法的优点在于算法简单,适于在FPGA上实现,而且能达到色彩扩散的目的。
1.3量化光照信息
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)