谷歌全景拼接出错之我见

最近,一篇关于使用谷歌AI全景拼接技术对照片进行拼接出错的新闻引爆了社交网络。这和我前段时间所研究的Opencv全景拼接技术有关,因此这篇新闻也引起了我的兴趣。

事件的起因是Alex Harker和他的朋友在加拿大路易斯湖滑雪场滑雪时,拍了三张照片(如图1所示),一张有人物的,另两张为纯风景照,当用谷歌照片合成时,竟然出现了“山中巨人”般的效果(如图2所示)。

谷歌全景拼接出错之我见

图1 原始三张照片

谷歌全景拼接出错之我见

图2 谷歌拼接后的照片

图2的拼接照片确实很诡异,那么问题到底出在哪呢?

首先,我用Opencv对图1的三幅照片进行全景拼接看看效果如何。

谷歌全景拼接出错之我见

图3 Opencv全景拼接的结果

图2和图3相比较可以看出,两者本质上是一致的,也就是第1幅照片和第3幅照片进行了完整的全景拼接,对第2幅居于中心位置的头部进行了保留。因此我有理由相信,谷歌AI的全景拼接技术与Opencv全景拼接技术一样,都是基于Brown和D. Lowe所提出的全景拼接技术,其论文为Automatic PanoramicImage Stitching using Invariant Features。(这里要说明一点的是,我并没有得到原始尺寸大小的那三幅照片,所以拼接的效果可能会有些偏差,但不影响技术的分析。)

应用Brown和D. Lowe的全景拼接技术,必须满足一个条件:所有照片必须是由通过旋转相机的方式得到的,即相机的位置是不能变的,因为只有这样才能计算照片之间的单应矩阵。论文是这样叙述的:Assuming that the camera rotates about its optical centre, the groupof transformations the images may undergo is a special group of homographies。

我们来分析一下图1中的那三幅照片,很明显,第1幅和第3幅是由相机旋转而拍摄得到了,而第2幅则改变了相机的位置。所以拼接图像是以由第1幅和第3幅拼接得到的图像为主。而为什么又拼接了一个头部呢?头部正好位于图像的中心部分,算法认为相机没有旋转,而仅仅是焦距的变化,所以就把它也拼接了进去。如果没有第2幅照片的话,其实第1幅和第3幅拼接得是十分完美的。

另外需要说明的是,Brown和D.Lowe所提出的全景拼接技术不是像Alex Harker所应用的那些:先拍人物照片,再拍一些背景,这样就可以把背景拼接,然后再把人物添加进去。这也是导致拼接失败的原因。正确的做法应该是照片之间重叠部分的内容应该是完全一致的。

从这个实例可以看出,目前的全景拼接技术还存在一些缺陷,还不能让人们随心所欲的拼接任意图像。这也让我想起了前几年的一个笑话:谷歌在图像识别分类上,把黑人归为猩猩一类。其实从技术的角度来看,我不得不佩服谷歌的技术,能把黑人识别为猩猩已经是一件了不起的进步了。