AMD是如何把“拍全景”这件事,简化到傻瓜也能做
ChinaJoy期间举行的CGDC(中国游戏开发者大会)大会上,AMD资深软件工程师解庆春受邀发表了名为“基于VR全景直播需求的实时全景拼接技术与方案”的演讲,向与会者介绍了AMD的实时全景拼接方案RadeonLoom及其背后的技术。会后,87870独家采访了解庆春,后者详细阐述了AMD解决了全景拼接技术的哪些痛点,Loom又将为VR拍摄行业带来怎样的变革。
丨把全景拼接做到“黑匣子”中
全景的英文名称叫“Panorama”,在2013年中国摄影出版社出版的《360°全景摄影--从入门到精通》一书中,将“全景”定义为把相机环拍360°拍摄的一组或多组照片拼接成一个全景图像。
21世纪初,谷歌街景为代表的全景内容应用的出现,以及Ladybug这种一次成像设备的问世,极大的推动了全景技术的发展。而随着近几年以Oculus Rift、Cardboard为代表的消费级虚拟现实终端进入市场,更加娱乐化的全景视频、VR影视也迎来爆发,仅仅在2016年就有近百万的360°视频被上传至Facebook、YouTube等平台。
在这里我们不由得产生了一个疑问:全景拍摄不应该是相机厂商或者视频平台的事情,和AMD这样研发CPU、GPU的半导体公司又有什么关系?
解庆春解释道,目前全景视频/照片的制作主要有两种手段,一种是像GoPro、Jaunt这样,设置一组相机阵列拍摄图片/视频传到电脑上,通过后期软件拼接处理生成全景图片/视频;另一种机内拼接,原理基本一样,只是在相机阵列(Rig)内加入了一个计算模块(CPU、GPU等),处理图像视频的拼接。
而不论是在机内还是在PC上,都是在AMD提供的CPU、GPU中,完成全景拼接的各个工序。在过去,相机厂商和拼接软件开发商,需要自己去研究拼接的算法,研究如何基于GPU实现全景拼接的加速。而现在,基于AMD的Radeon Loom,他们只需要设置好镜头拍摄,然后调用相关的接口即可完成全景图像视频的拼接,软件的处理都会在AMD处理器中自动完成。
“AMD通过Radeon Loom把多个镜头拍摄的单独图像,合成全景图像的整个过程,全都装进了一个黑匣子里,简化了相机厂商的工作。我认识一家传统相机厂商,他们很擅长拍摄参数调优、镜头矫正这些工作, Radeon loom帮他们解决了图像处理这些他们不擅长的工作,这样他们就可以简单快速的开发出性能强大的全景相机。”
而基于GPU异构加速的计算视觉加速框架OpenVX,Radon Loom大大提升了全景拼接尤其是实时拼接的处理能力。解庆春介绍,Loom方案最多可以支持31个镜头的相机阵列的离线拼接,生成8K*4K的画面;实时拼接上,则可以支持24个镜头组成的相机阵列,生成4K*2K@30fps的全景视频流,用于VR或者全景直播。
丨从拍摄到成像,Loom解决了全景拍摄的哪些问题
如图所示,全景拍摄想要实时在机内完成拼接处理。需要经历图像拍摄(cameras)、传输到缓存(Input buffers)、RGB色度空间转换(CSC to RGB & scale)、镜头矫正(Lens correction)、扭曲投影球面(Warp to equirectangular)、曝光补偿(Exposure compensation)、寻找接缝(Seam find)、融合(Blend & Merge),最终直接或者经过压缩/解压输出到显示终端(电脑屏幕、VR头显等等)。
“上图的方案,简单来说,就是把多个镜头拍摄的图像,通过连接线,以SDI连接线且采集卡支持DirectGMA传输特性为例,图像数据流直接传输到GPU缓存,然后在缓存中经过一系列的处理,最终合成一张全景的图像。”解庆春进一步解释道。“而Loom的核心,就是把拼接过程中每一步的核心算法,比如RGB色度空间转换、镜头畸变矫正等等,基于OpenVX kernal函数实现,并进行封装,用户只需要调用CSC、Warp、Blend等接口,就可以完成视频的拼接。”
而在这些算法中,解庆春着重介绍了Loom在图像融合上使用的多频段融合算法。融合(Blend)指的是融合不同图像之间的重叠部分,一般使用的是线性加权的算法进行融合。该方法的效果并不理想,而Multi-Band融合算法可以兼顾拼缝附近的细节特征和大尺度上两张图片的宏观特征,图像的宏观特征在它的低频分量图里,而局域特征在高频分量图里。所以,把图像分解为不同频带的分量,对这些分量加和,效果如下图所示,使用这种算法融合得到的全景图像,相邻镜头获取的画面之间过渡的更加柔和自然,看起来更像是一张完整的图片。
该算法融合效果虽好,但对于计算量要求较大,它需要创建多座金字塔并对金字塔进行各种运算,图像像素较高时,很难在目前主流CPU上要达到实时。Radeon Loom实现了Multi-Band融合算法的GPU异构加速,效果很好。
丨3D?光流?
“深圳视觉科技此前发布的Z CAM S1 就采用了AMD Radeon LOOM的参考代码,并在此基础上将其产品化,融入本身软件。目前,已有数家国内的相机开发商在和AMD合作。”而AMD在全景实时拼接领域接下来的目标,解庆春表示,是要攻克3D这一难题。
目前市面上,已有不少的3D VR相机,但在解庆春看来,这其中绝大多数都是伪3D。
“现在绝大多数的3D全景相机,通过拼接完成一张全景图,考虑人眼瞳距带来的视差,在投影中心往左偏移一个角度形成左眼视图,往右偏移一个角度形成右眼视图,为双眼输出不同的图像视图,从而产生空间感,制作3D效果。”
解庆春认为,真正的3D是像Facebook的Surround 360一样,周围的14个相机同时工作,拼接成左眼全景视图和右眼全景视图(左右全景图像均用到了14个相机的图像, 而非左边用7个, 右边用7个。)
此外,解庆春还谈到了最近大火的光流拼接算法。
“我知道Surround 360用到了光流拼接算法,这种算法是根据灰度值的变化,计算空间中每一个像素的移动,寻找这个像素在下一帧画面中的位置。”
“但是这种算法,目前存在两个很大的问题,”解庆春进一步解释。“第一,光源的变化、运动的速度以及噪声的影响等多种因素影响着光流算法的有效性,运动速度即光流法计算像素在空间中的运动,以目前的技术一旦像素点在两帧画面之间的距离过大,就会出现问题,也就是不能用于拍摄高速画面。第二,光流法需要对每一个像素进行实时计算,计算量过大,很难在异构平台上实现加速,也就是说,光流法的全景相机很难用于VR直播。”
虽然Surround 360得到了一些专业电影人士的好评,但是光流法目前依然存在很多难以攻克的问题,所以解庆春相信,在接下来很长的一段时间,RadeonLoom这样的特征拼接法(Feature based)依然会是全景拼接的主流算法。同时我们也期待AMD 3D方案和Surround 360 x24/x6 方案尽快落地。