用鱼眼相机拍出全景视频腾讯云开发者社区

人的双眼视角能够达到188度,而一般的手机拍照视角大概只能能达到90度左右,鱼眼相机一般在200度以上所以生成全景视频的成本最低,也最接近全景画面。本文采用了一个视角为236度的鱼眼相机来生成全景画面。

鱼眼相机外形相对于一般相机来说也比较奇特,镜头比较突出,有点像鱼的眼睛(估计这就是鱼眼镜头的来历吧,当然,拍的效果也像鱼看到的世界)。如图2所示,就是一种常见的鱼眼相机,淘宝上500块左右即可入手——这也是笔者用来制作全景视频的相机。

图2 一种鱼眼相机外观

鱼眼相机的投影模型有等距投影模型、等立体角投影模型、正交投影模型和体式投影模型等,感兴趣的可自行查找资料。本文使用的相机是等距投影模型。

等距投影公式为r = fθ,成像点的位置r与入射角成正比,比例系数为f(可理解为焦距相关参数)。2D图像上θ对应的等高线为半径等比例变化的同心圆。简单地讲,就是成像上的点距离圆心为r,当r相等时,则表示此类点入射角θ相等,且r-n和r+n的两点与r点入射角θ差值相同。

如图4所示。

图4 等距投影模型的鱼眼成像示意图

图4是视角为236度的鱼眼镜头成像效果,相同入射角的点在成像上会形成一个同心圆,如图中绿色同心圆上点所示。且图中180度的同心圆距离90度同心圆,和距离270度的同心圆相等。这就是等距投影模型的实际含义。

我们知道,视频是由图像帧序列编码而成,全景视频也不例外——由全景图像序列帧编码生成。标准的全景视频帧宽高比为2:1,这是因为VR通用播放器使用的是等距圆柱投影模型。这种投影方式在日常生活中也有应用:地球仪。

笔者依稀记得小学的社会实践课有手工制作地球仪的课程:准备一张地球仪贴纸和对应的球即可。如图5所示。

有过经验的人都知道,图5贴纸能够完全包在一个半径为贴纸高的1/π的球面上,地理常识也告诉我们:该贴纸的高度代表地球仪上的纬度、宽度代表地球仪的经度。如果把这个贴纸外围用红线框起来,然后测量下就会发现:宽高比为2:1。其实观察下也知道:宽为该球圆周长,高为半个圆周长,二者比必然为2:1。这就是等距圆柱投影:垂直方向上采用等距投影,水平方向采用圆柱投影,即用一个圆柱形的圆筒把球面包围起来。

简言之:标准的全景视频帧之所以将宽高比设置为2:1,目的是能够将该视频“贴”在一个球面上。而这个球,就是大部分全景视频播放模型(下次有机会再仔细讨论这个问题吧)。

也就是说,如果要将图4中的鱼眼图像转成全景图像,就需要将其转为一副宽比2:1,且能贴合在一球面的图像。

为了使问题简单点,假设我们的鱼眼相机放在一个球内,图4即为该球内表面拍摄成的图像(假设球内表面就是一个全景屏幕)。那么该球内面和图4成像有对应关系(由于鱼眼视角只有236度,超过部分理解为内表面屏没有显示该画面),我们常喜欢用经纬度这个词来表示球表面位置,那么该关系可理解为:图4中绿线对应该球的纬度线,黄线为经度线,而成像边缘为南极点(像中已经成了一圈圆),成像中心点为北极点。

现在要做的事情就是根据点P(x,y)计算出该点在球中的经纬度。将图4简化成图6。已知P点坐标(m,n),m,n为相对于圆心O坐标(圆心O一般在成像图像中点),和360度点成像半径R(可以根据当前图像有效边缘求得,如当前图像宽高为720,视角为236,那么360度视角的R为:720/(236/360)=1098),求出对应的全景图像的点位置P'(m',n'),而点(m',n')的值即是点P'的经纬度值,即为图6中的(α,r)值。这就是大家常说的经纬拆分法。

图6 鱼眼成像点P示意图

现在问题就简单了:已知点P(m,n)和R,求α和r的值是多少?对的,初中数学题。

但这样算会带来一个问题:并不能保证全景图像和鱼眼图像是一一对应关系,且从图5可看出,全景图像的点会比鱼眼图像点要多(白色部位),这就会导致生成的全景图像存在很多"漏洞"。为了解决这个问题,我们可以将这个初中数学题反过来,已知全景图像点P'(x,y),宽高w、h,和鱼眼图像360度圆半径R以及鱼眼图像中心点O(cx,cy),求鱼眼图像中对应的点P(x',y')?

通过以上步骤即可算出全景图图像。如图7所示。

图7 由鱼眼图像转成的全景图

转换的全景图像在超过视角的部分是一片黑,美观度着实难看,这时候可以考虑在黑的区域加一个logo或者图片,比如我们鹅厂可爱的QBaby,如图8左图所示。贴到黑处的地方如图8右所示。

图8 底部贴图效果

实现很简单,鱼眼图像转换是以图像中心为北极点,那么要想添加的QBaby在超出视角范围内显示,那么就以QBaby图像中心为南极点,并且最大显示范围要高于236度。由于这是固定部分,故处理视频的时候只需要贴一次即可。用VR图片播放器播放,效果如图9所示。

图9 VR图片浏览器观看贴图效果

经过以上转的视频观看会发现有毛毛躁躁的感觉,这也是直接使用上文的公式转换带来的问题,使用一些常见的插值算法能够在一定程度上降低毛躁的效果。当然,如果原鱼眼视频本来分辨率就低,生成的全景视频,特别是使用播放器播放的视频都无法避免模糊的现象,毕竟播放器播放的只是全景视频的一部分。而这个播放器如何解析全景视频,已经如何控制播放范围,这个问题将在以后的文章讨论,当然,现在网上也有很多方法,有意者自行查询。

本文的鱼眼相机只能拍到视角为236度以内的场景,线上有许多360度全景视频,这种视频制作方式一般是多个相机,然后对点进行配准和对齐在进行投影或者仿射变换等操作,单转成全景视频的原理和本文几乎一致。

当然,这个只是一种方法,总有一些瑕疵之处,欢迎大家来指教并一起讨论。

文章后记:天天P图是由腾讯公司开发的业内领先的图像处理,相机美拍的APP。欢迎扫码或搜索关注我们的微信公众号:“天天P图攻城狮”,那上面将陆续公开分享我们的技术实践,期待一起交流学习!

THE END
0.VR眼镜厂数字孪生实训室项目案例秒图专业提供VR眼镜研发生产概念图、VR研发效果图及3D概念图的全流程解决方案。实现VR眼镜从设计、研发到生产制造的概念可视化,通过高精度的VR眼镜3D概念图与生产概念图,将创新设计理念转化为逼真的视觉效果,为产品研发提供清晰指引。无论是结构设计、外观评审还是市场预热,jvzquC41yy}/unhqpfsbr7hp1rxplnhvu19737mvon