vr技术
最近也接触了解了VR技术快一个月了,作为一只瞬时记忆>>长时记忆的程序猿,还是照惯例把一些收获和心得写下来趁着它们还在我的缓存里。
这次blog就采取自问自答的形式吧,交代一下VR的几个key points,这里的VR主要指通过设备拍摄,后期合成制作的VR。
- What is VR
wikipedia是这样定义VR的
virtual reality (VR) is an interactive computer-generated experience taking place within a simulated environment, that incorporates mainly auditory and visual, but also other types of sensory feedback like haptic.
首先,VR需要是可以与人交互的,我们转动头,会看到不同的景象,说明VR了解到了我们姿态的改变,并且产生了相应的反应;其次,VR是仿真的环境,而非我们现实中当时所处周边的环境。
- VR的总体实现流程
这部分盗一张图吧,爽歪歪
- VR投影的几种形式
正确地展开全物理视域的真实场景到一张2D图片上,并且能够还原到VR眼镜中实现沉浸式观看的数学过程,就叫做投影
根据拍摄设备的相机选择的不同,拍出的素材的图像形式不同,需要选择相对应的投影方式
例如insta 360 one全景相机,由前后2个鱼眼镜头组成,素材如下图,这种投影方式称为fisheye projection,通过它的两个鱼眼摄像头输出的画面,各自涵盖了180度的水平和垂直视场角,然后将两个输出结果“扣”在一起就是全视域的沉浸式包围体
~~~~~~~insta 360 pro全景相机,由球面横向的6个镜头组成,将6个镜头的输出融合在一起,输出全景视频,这种投影方式称为equirectangular projection
可以明显看出不同投影方式的区别吧,假如把两个鱼眼镜头的图像按照equirectangular的方式投影,那得到的图像就是
不知道是什么东西。。
除了这两种投影方式,还有几种常用的例如平面投影,墨卡托投影等等,在这就不一一赘述。
- 全景图是怎么拼成的
和前文说的投影方式类似,表示想要把素材图片粘贴到怎样的立体图形上,常用的包括:球面、柱面、平面,其中球面映射应用最为广泛,选择不同的映射模型会对全景图的拼接效果造成影响
Step2. 根据输入图像,提取特征点,对特征进行匹配,得到输入图像之间的映射关系H
自动拼图离不开特征匹配,特征匹配离不开surf,sift和ORB,和视觉slam里面用到的拼点云是极其类似的,匹配到了之后再RANSAC找到最优的映射关系H
Step3. 根据映射关系T进行图像的Warp变换,对齐图像;
映射关系H其实就是个投射矩阵,把参考图像上某点转成齐次坐标,左乘投射矩阵,就得到了目标图像,转成单应矩阵就如右图所示,看懂看不懂就随缘吧。
Step4. 包括利用颜色调整来消除图像间的色差,和采用图像融合来消除拼缝。
由于拍摄角度和拍摄光线,输入图像之间可能存在色差,~~~~所以需要tune adjustment或者tune alignment我翻译的,或者color matching有道翻译的。那目前比较常用的就是Reinhard法,利用lαβ颜色空间中各通道互相不关联的特点,提出了一组适用于各颜色分量的色彩迁移公式,较好的实现了彩色图像之间的色彩迁移。基本思想就是根据着色图像的统计分析确定一个线性变换,使得目标图像和源图像在lαβ空间中具有同样的均值和方差。
最后一步,拼接融合,融合目的在于拼缝消除,常用的方法为Laplacian pyramid。可以理解为通过对相邻两层的高斯金字塔进行差分,将原图分解(Reduce)成不同尺度(频率)的子图,对每一个之图(对应不同频带)进行加权平均,得到每一层的融合结果,最后进行金字塔的反向重建(Expand),得到最终融合效果。再说具体一点我也说不清楚,留个图在下面看各人领悟吧。
- 2D和3D VR的区别
就像2D电影和3D电影的区别一样,VR全景图也分为2D和3D,当观看2D VR时,左右两只眼睛看到的景象是一样的,而3D VR左右两只眼睛看到的图像是不一样的,两个图像的物体会有位置上的偏差,叫做视差,大脑会下意识的根据视差计算物体离身体的距离,于是产生了景深感。如下图,物体P在两只眼睛的成像平面XL和XR上有视差,大脑就是根据这个计算物体P的距离的。
obviously 物体距离越近,视差越大,距离越远,视差越小。当场景里的物体有了景深感,我们就会感觉空间是立体的。
- 3D VR是怎么制作生成的
拍摄的时候使用双目相机固然是效果最好的方法,不过工作量不止翻倍。目前电影业制作3D电影都采取拍摄2D电影通过技术加工生成3D电影这种方式来压缩成本,为什么我们VR不呢? 先来一张2D和3D全景照片的对比
仔细看可以发现下面的3D全景,左右两个分屏是有细微差别的,也就是场景物体的视差。目前2D转3D的大概流程我再贴个图
主要的技术步骤就是图像分割和深度推测,图像分割可以用传统的图像处理方法,例如阈值分割,边缘分割,区域增长等等,深度推测目前对于单帧图片没有太靠谱的办法,一般是用连续帧的运动信息结合单帧图像的pictorial cues来进行推测。精度如果要达到像素级需要占用很大的计算资源,目前来说远达不到实时的要求,所以退而求其次,以块Block或者物体object为单位进行推测。当我们得到了场景内物体的深度信息后,根据原有的2D全景凭空捏造出带有视差的3D全景就迎刃而解了。
嗯,具体我就不解释了,1+1=2需要解释吗
- 为什么体验VR会有头晕
头晕的原因有很多,低血糖就会头晕啊,那体验VR时头晕最主要的原因源于延迟,VR的“延迟”(delay)是指从人的头部移动开始一直到头显设备(HMD)的光学信号映射到人眼上面全部的等待时间(~~~latency time)。延迟较大的时候就可能会引起头晕,其原理是视觉接受的自身的身体状态,与负责感知身体状态的中耳前庭器官不一致,中枢神经对这一状态的反馈就是恶心,来提醒身体状态的异常。简单来说,戴上VR头显移动头部的时候,由于延迟,视觉观察到的变化比身体感觉到的慢慢,产生冲突继而造成晕眩。研究表明,当延迟被控制在20ms以下时,人体才不会有排斥反应,所以,如何把延迟控制在20ms之内是一个VR厂商需要解决的基本问题。
- VR眼镜的透镜和屏幕
人能看清的最低距离是25cm,也就是说假如没有透镜,你的VR眼镜的屏幕需要距离你25cm,这是不现实的。目前的VR眼镜都需要通过结构的设计确保佩带者的左右眼都只能看到实际屏幕的一半,也就是分别看到分隔后的左右眼画面内容,从而模拟了人眼的真实运作机制。
一般是先选好屏幕的尺寸大小,然后设计透镜(特别是设计其参数FOV,焦距等),使其既能让视距大于25cm,又能让屏幕的边界刚好进入视场。
一般来将,5.0-5.7寸手机可选择90°视场角的VR设备;5.0寸以下手机选择80°左右视场角的设备;5.7英寸以上,手机分辨率为2K的可以选择视场角90°以上的设备。
相关阅读
WDM和OTN技术简介 波分复用( Wavelength- Division Multiplexing,WDM)是一种应用在城域网及广域网中的技术,是 将两种或多
pathinfo 伪静态 详细解析PATH_INFO 和 ORIG_PATH_INF
http://www.ape-men.com/bbs/43_1_1.html 服务器环境 linux/apache/mysql 问题描述 服务器开启了伪静态,并且
A5创业网(公众号:iadmin5)2月26日讯,雷军在内部会议上指出,要继续强化技术立业,技术事关小米生死存亡,是小米持续发展最重要的动力和
这几年,创业环境非常好,不但国家鼓励,市场环境也比较好,都是各种鼓励创新创业。国家支持创业,但是现在的企业业务不再像以前那样外出人
大疆RoboMaster技术总监:我是如何成为一名机器人工程师
作者 | 大疆创新