基于单幅图像的2D转3D算法研究

最近,3D影片盛行,3D电视技术也层出不穷,3D技术在带给大家非凡的视觉冲击同时,也在告诉大家这背后隐藏了太多的商机。

目前的3D技术大体分为两种:软件技术和硬件技术。所谓硬件技术就是在拍摄影片时采用多摄像头及各种3D相关设备来拍摄片源;所谓软件技术就是将2D片源通过一定的软件转换为3D格式。

如何使用软件技术将2D转为3D呢?今天我们来研究一种基于单幅图像的3D转换算法。

首先,我们要了解一种最简单的红蓝3D技术,所谓的2D图像转3D图像,它需要两幅有视差的图像来合成一张具有3D信息的效果图,实际上就是用一幅图像包含两张图像的信息。如何实现这一点呢?我们知道在RGB颜色空间中,图像中的每个像素都可以都包含R,G,B三个颜色分量,比如:纯红色(255,0,0),纯绿色(0,255,0),纯蓝色(0,0,255)等。

纯红色(255,0,0)的补色为青色(0,255,255),这两种颜色互不包含,是互补的关系,也就是说,基于这种补色关系,我们有如下结果:

假设图像A的像素M(x,y)的RBG为(R1,G1,B1),图像B的像素N(x,y)的RGB为(R2,G2,B2),我们所需要的3D图像S对应像素O(x,y)的RGB值可计算如下(红蓝模式):

O(R,G,B) = (R1,G2,B2) 或

O(R,G,B) = (R2,G1,B1)

以上两个公式中,任何一个,都包含了其中一张图像的R信息,和另一张图像的G,B信息,由于红色的补色是青色,这两个是互不包含的关系,因此,以上公式得到的结果中就包含了两张图像的信息了。

对于红蓝眼镜,其中两个镜片的颜色正是红色和青色,这样,图像经过镜片进入我们眼睛时,实际上就包含了两幅图像信息(一幅图像的R信息,另一幅图像的G,B信息),从而产生了立体感觉。

基于以上原理,我们可以用PS,方便的将如下两张有视差的图像转换为一张红蓝3D图像:

注:以上原始图1,2像来自于网络

    有了上面的理解,我们明白,我们需要2张2D的有视差的图像,才能转换为1张3D图像,但是,我们如何将1张原始图像直接转换为3D图像呢?
    一个基本思想,我们通过原始图像,获取图像的深度,视差等3D信息,来构建3D效果图。
    这个思想的实现,是个关键问题,经过本人研究,这里,介绍一个思路:
    假设有原始图像A,我们要得到的红蓝3D图像为S,算法过程如下:
    1,滤波算法
          使用一定的滤波算法去除A中的噪声,比如:高斯滤波算法,均值滤波算法,中值滤波算法等等。
    2,锐化算法
          使用一定的锐化算法恢复并增强A中的细节,比如:Sobel,Laplace,Robert等等。
    3,添加深度信息
          经过1-2之后,我们得到图像B,这个图像与A已经有了一定的差异,但是,我们如果将B和A作为两张有视差的原始图像来得到S,那么效果并不好,我们还要添加一定的深度信息,构成图像C,这个深度信息获取的算法,可以参考论文(Rapid 2D to 3D Conversion),这样我们就可以得到图像C了。

4,按照前文所述红蓝3D原理,将图像A,C转为S,S就是一副3D图像了。

这里附上我自己的效果图:

 最后,分享一个专业的图像处理网站(微像素),里面有很多源代码下载:
(0)

相关推荐