最近几年,3D电影越来越受欢迎,几乎可以说是“无3D不电影”,3D电影远比2D电影更具吸引力。我们喜欢看3D电影,因为它比2D电影更让我们感到“真实”,换句话说3D电影具有“立体感”。那么我们是如何感受到这样的立体感的呢?这就是我们要讲的立体视觉。我们通常所说的“立体感”靠一只眼睛是完成不了的,至少需要两只眼睛。
当我们注视到某个物体时,我们两只眼睛的视线会自然而然的交叉于一点(斗鸡眼除外),这一个点有个很通俗的名字——“注视点”,从注视点反射回到视网膜上的光点是对应的。想象一下,两只眼睛上有这样许许多多的对应的光点会形成什么?当然是两幅对应的图像,当然这两幅图像仅仅停留在视网膜上是没什么意义的,视网膜会将这两幅相互对应的图像传送到大脑中的视觉中枢,然后我们的大脑会很自觉的将这两幅图像合成一个立体的像。
这里我们要讲的立体视觉并不是生物的立体视觉,而是机器的立体视觉。日常生活中我们拍摄的图像通常是二维的,也就是我们通常的照片。这样的2维的像只能还原给我们拍摄者拍摄时从镜头里看到的景物是什么样子的,如果我想换个换个角度看原来的景物怎么办,想换个距离看又怎么办呢?肯定不可以在每个位置每个角度都拍一张照片。这时我们就需要想办法让机器像人的大脑一样得到一个立体的像,也就是我们要讲的立体视觉。
那么这样的机器的立体视觉是怎么实现的呢?回想一下我们讲到的人的立体视觉是怎么实现的?首先至少得有两个眼睛,而且这些眼睛所能看到的区域必须得重合,不然就不能有对应的视点了,当然也就不能产生立体视觉了。那么这里我们就需要至少两个摄像头,这两只摄像头所拍摄的图像还必须有重合;其次人通过眼睛获得的图像是在大脑里产生立体的像的,在机器中就需要处理器和图像处理算法来完成这样的功能。
我们以双目立体视觉为例子,首先计算机通过两个不同位置的摄像头,获得两幅有视差的图像,然后利用一系列的图像特征提取算法,获取特征点,然后对两幅图像上的这些特征点进行匹配。得到了这样的一对一对的匹配点又有什么用呢?
因为计算机获得的两幅图像是有视差的,所以同一个物体在两幅图片的角度、位置甚至大小都是不一样的,正是利用了这样的差异,我们可以通过映射关系得到他们的映射矩阵,然后利用映射矩阵把二维图像中的点还原到三维空间中去,从而得到了三维的像。
目前除了双目立体视觉之外还有很多的立体视觉的方法,但是大致原理基本相同。目前这项技术现在已经逐步走向成熟,在很多领域都有很好的应用,比如盛产黑科技的谷歌公司正在将这项技术移植到手机上,想象一下,也许就在下一个月,你的手机就可以拍摄出三维立体的图像,这是多么的让人兴奋!