论文部分内容阅读
"3D (three dimension)"这个词随着时代发展也在被赋予新的意义,现在谈的最多的“3D”则是基于双目立体视觉原理的立体3D。随着这种3D技术的逐渐流行,人们对“看”的要求已不再仅仅停留在2D (two dimension)图像上,而是向能够看出深度感的3D图像发展。然而一个很现实的问题是“3D”资源目前依然非常的稀少远远满足不了人们的需求,所以将原本2D的资源转换成3D这种2D转3D技术将是应对现今这一2D到3D过渡时期的一个很好的解决方案。现在已有的2D转3D技术大都运用在3D电视机中,而且仅在ASIC芯片中得以实现,算法上也不是很成熟,其转换效果依然无法与用3D设备拍摄的图像相比,被业界称之为“伪3D”。而在计算机上运行的有此功能的成熟软件就只有POWERDVD和Tridef 3D Experience这两款视频播放器,由于只是使用了简单的转换算法,它们的转换效果差强人意几乎看不出3D效果。之所以软件实现如此之少和较差的实现效果究其原因还是出在本身转换算法过于复杂不完善和现今CPU的机能依然无法满足对视频流的实时处理。本文将致力于通过C++编程方式实现对平面3D游戏的立体333D转换。为了实现更高效的处理将使用并行运算性能强大却一直被人们忽视的GPU (Graphic Processing Unit)和由NVIDIA公司提供的相应的开发平台CUDA。本文首先对双目立体视觉原理做一个详细的介绍。接下来先实现平面3D游戏到立体3D的转换。3D游戏由于其本身具有的3D特性,对于3D游戏的转换并不需要运用图像处理算法,只需将场景运算中的深度信息提取出再利用Depth Image-Based Rendering (DIBR)基于深度信息重新着色技术完成红青3D转换。其中需要利用DLL注入和API拦截技术以更改程序的运行方式来实现转换。转换对象选择使用微软提供的API函数库DirectX 9做出的3D游戏或3D应用程序。然后对GPU通用运算以及对应的开发平台CUDA作一个简单介绍。最后介绍2D视频转3D中需要用到的关键技术——边界检测、对象提取,其中的算法全部交由GPU完成。测试对象全部来源于网上的影视资源。边界检测部分使用的是改进的Canny算子完成,并配合边界连接算法最终生成一张边界线连续闭合的边界图。完整准确的边界图会对后期的对象提取和深度估计起到关键的作用。面对象提取则是提出了一种基于并行运算的新型的四步法完成,最后生成深度图后再用DIBR实现红青3D转换。