VR | #2 认识鱼眼镜头,球面的投影方式和鱼眼校正

 文 | HW君 

本文为B站【V2】期的视频讲稿。

部分动态演示,请参考视频画面:

重新认识鱼眼镜头,VR球面图像的投影方式和鱼眼校正【双目VR摄影#V2】

https://www.bilibili.com/video/BV1TL41117ti


0. 重新认识鱼眼镜头

鱼眼镜头是一类非常小众的镜头,它的视角比普通的超广角镜头还要更广,常常可以超过180°。

但由于画面边缘也有非常强烈的压缩,因此在传统的「平面摄影」中并不受待见。

但是在与VR影像相关的「球面摄影」中,鱼眼镜头却是不可替代的。

所以在开始「双目VR摄影」之前,我们需要重新认识鱼眼镜头。

 

消失的模因,大家好,我是HW君。

欢迎来到【V2】期,也就是我们频道的「双目VR摄影」系列的第2期。

【V系列】狭义上讨论的话题是,如何拍摄与制作「VR影像」。

广义上探讨的则是「摄影」「光学」「VR」这三个学科的交叉地带。

 

那在开始进入正题之前,我想说说做这一期「鱼眼镜头快速入门」的动机。

事实上我认为当下最好的摄影方式是「手机摄影」。

任何人只要拿起手机打开APP,就能记录下想要的瞬间。

普通人不需要去理解背后的原理,而只需要专注于内容本身,手机工程师们已经帮我们处理好摄影背后的科技难题。

 

但这是建立在「平面摄影」已经发展了很多年的基础之上的。

而「球面摄影」特别是「3D球面摄影」,也就我们标题里所说的「双目VR摄影」,是一个很新的东西。

这一领域目前没有什么约定俗成的行业经验,并且行业之间的沟通并不顺畅,大多数摄影师并不懂背后工程上的原理,而工程师不懂也前期摄影上的需求。

 

起初我只是想要拍出一张正常的VR照片,后来发现自己不得不去学习很多背后的技术细节。

因此我做这个系列的视频来讨论这些内容,希望能让那些也想尝试VR摄影的朋友,可以少走一些弯路。

 

事实上在讨论底层原理的时候,我已经做了非常多的简化,甚至简化到我觉得很不严谨的地步,但可能对于大部分人来说还是过于冗长和枯燥。

因此如果你觉得这部分讨论底层原理的内容过于无聊,那么可以先留个印象然后跳过,等到需要用到的时候再来查阅就行,不必消磨自己的热情。

 

也许再过几年,「双目VR摄影」能够像今天的「手机摄影」一样普及化,普通人只需要按下快门,专注于内容。

但是在当下,这些东西还需要用户自己学习和解决,有一些门槛。

那前言就先到这里,我们开始这一期的「鱼眼镜头快速入门」。

 

 

 

1. 针孔相机模型与直线投影

这一期里我们会出现很多公式,但不用被吓到,这只是一个简单的入门。

市面上关于「鱼眼镜头」的概念非常混乱,国内国外都是如此,因此这个视频主要还是以清理概念为主,不会涉及过多的计算。

 

传统的「平面摄影」基本上都以「针孔相机模型」为标准,其原理也就是我们所熟悉的「小孔成像」。

很容易画出这一模型,我们先在空间里切下一个平面,平面上的光透过小孔,在相机传感器上成一个倒立的像。

这里我们先确定一些用语。

在针孔模型中,「物平面」上的光通过小孔在「像平面」上成倒立的像

光线穿过的这个小孔叫「光学中心」,简称「光心」,

位于几何正中央的这条轴叫「光轴」。

「物平面」边缘光线与「光心」所张开的夹角叫「视场角」。

我们取「视场角」的一半叫「半视场角」。

「半视场角」也就是「物平面」边缘光线与「光轴」的夹角。

 

这里我们把模型顺时针旋转90°,以方便展示。

物平面上有一点,称为「物点」,其过光心在像平面上的成像为「像点」。

「物平面」圆心到「物点」的距离称为「物高」。

「像平面」圆心到「像点」的距离称为「像高」。

 

整个「物平面」到「光心」的距离称为「物距」

整个「像平面」到「光心」的距离则称为「像距」。

在大部分情况下,因为物距远大于像距,所以一般会用透镜的「焦距」来近似替代「像距」。

 

于是我们可以把「针孔相机模型」简化为如下的2个相似三角形的形式。

在这个模型中,「物点」的光沿直线过「光心」投影到「像点」上,因此这种投影方式称为「直线投影」。

当然它也有其他的名字,例如「透视投影」,这里我们采用最常见且不容易混淆的说法「直线投影」。

 

「直线投影」是平面图像的标准投影方式。

我们用手机拍的照片,都要按照「直线投影」来进行校正。

校正后符合「直线投影」的图像就是「无畸变」的。

简单来说,如果物体的线条原本是直的,那么按照「直线投影」在拍出来的照片里,它的线条也是直的,不会变弯。

那这种作为「平面摄影」标准的「直线投影」,它的优点是什么呢?

因为我们的电视、手机等传统屏幕,本身就都是横平竖直的平面屏幕,因此在直接展示符合「直线投影」的平面图像时,人眼看起来就是没有畸变的,它是符合人眼的自然观感的。

 

那么这种「直线投影」的缺点是什么呢?

那就是「视场角」受限。

在现实里,符合「直线投影」的无畸变的全画幅超广角镜头,焦距差不多只能做到10mm,视场角最广大概为130°,再往上会变得非常困难。

 

我们可以从公式的角度来理解这一点。

假设像高为r,焦距为f,物点的半视场角为θ。

那么根据相似三角形的原理,可以得到这么一个公式:

r = f tan θ

 

我们把这个函数画出来就可以得到这么一个图形。

因为tan90°是无穷大,也就是说「半视场角」越接近90°,像高会越来越大,直到变成无穷。

因此在「直线投影」下,如果要做180°的广角镜头,那么你的物平面和像平面都需要无穷大,这是无法实现的。

而在现实里情况会更加复杂,制作符合「直线投影」的广角镜头是很难的。

「无畸变」的全画幅超广角镜头大概只能做到10mm,半视场角65°,全视场角130°。

如果我们还想要再广的视野,那就要摆脱「直线投影」的约束,对视场角进行压缩。

这就来到了鱼眼镜头的领域。

 

 

2. 鱼眼相机模型

在大众摄影里,鱼眼镜头因为夸张的变形而不怎么受待见,但是它在工业、科研、安防、军事等领域却有着非常广泛的运用。

因为机器对于「符合人眼观感」没有需求,它只是需要更大的视角。

 

前面说了,在「针孔相机模型」里,成像是从「物平面」到「像平面」。

也就是「直线投影」是一种从「平面」到「平面」的投影。

 

而在「鱼眼相机模型」里,通过引入桶形畸变,其成像是从「物球面」到「像平面」。

也就是「鱼眼投影」是从「球面」到「平面」的投影。

而VR眼镜其实是一种「球面」显示器,它用光学组件虚拟出左右两个虚拟球幕。

关于这一点我们在【R6】期的【2-2】小节里有详细讲解过。

【HW君随便聊】【R6】从Pico到A-SOUL,聊聊VR以及偶像

https://www.bilibili.com/video/BV1fg411r7An

讲稿 | 从Pico到A-SOUL,聊聊VR以及偶像

 

B站UP主「先看评测」曾经用5台曲面屏拼成一个环形显示器,即便如此也只得到了水平360°,垂直20°的环形视野,还是单眼的。

而像quest 2这样的VR眼镜,则虚拟出了2个半径为1. 3米的完整球面显示器,并且是左右眼不同的2个。

每个球面的显示面积展开换算成16:9的屏幕,大概有280英寸,这是一种非常省钱的虚拟方式,在现实里实现这样的球幕非常困难,更何况要做成双目3D的。

所以我们在VR里看到的画面,其实就是把一些「平面」的图像,给重投影到「球面」上。

这个过程是和鱼眼镜头从「球面」到「平面」的投影刚好是相反过来的。

 

所以在「球面摄影」中,「物球面」的光线被鱼眼相机捕获压缩为「像平面」,成为一段平面视频。

然后这个平面视频里的「像平面」,再通过VR眼镜进行还原,模拟重投影为「像球面」,于是得到了符合人眼自然观感的影像。

因此采用鱼眼镜头的「球面摄影」,天生就能匹配「VR影像」的显示。

而传统符合直线投影的「平面摄影」,则是为手机、电视等「平面屏幕」所准备的。

人们过去在「平面摄影」上积累了非常多的经验,但这些经验未必符合VR这个虚拟的「球面屏幕」的特性。

我们需要重新学习这些东西。

 

 

2.1 经典的鱼眼投影

鱼眼镜头通过引入桶形畸变,从而实现从「物球面」到「像平面」的成像。

那这些桶形畸变其实并不应该被称为「畸变」,它实际上是一种符合规律的压缩,前期需要满足一定的规则,后期才能无损地解压。

 

从公式的角度来看,其实就很好理解这一点。

直线投影的公式是:

r = f tan θ

这个公式的问题就是,当半视场角θ接近90°时,像高会变成无穷大。

那么我们只要换成θ可以超过90°的公式就行。

这类公式可以有很多种,这里介绍4种比较经典的公式,对应着4种经典的鱼眼投影。

分别是体视投影等距投影等积投影正交投影

 

它们有其各自的数学特性,在工业和科研上也都有各自不同的应用。

那这里我们不打算展开讲这些细节,而只看最直观的图像特征。

这里我把「物球面」的180°视角平均分成8份,每份22.5°,然后用不同的公式投影到「像平面」上。

注意看不同的投影之间的区别。

从体视到正交,边缘视角会有越来越大的压缩。

特别是正交投影,其成像简直就像是直接把一个球面拍扁到平面上,最边缘的视角压缩得非常厉害,画面位置都让给了中央区域的视角。

 

而等距投影则是最强迫症的,像等高线一样,给相等的视角分配距离相等的像高。

也就是如果我们把等距投影的22.5°圆的半径定为1,那么45°圆的半径就是2,

67.5°圆的半径就是3,90°圆的半径就是4,非常优雅。

因此「等距投影」也被称为鱼眼镜头的「线性投影」或者「理想投影」。

 

而体视投影的思路则是反过来的,中央的视角被压缩了,而把更多的成像位置留给边缘的视角。

我们可以看一组互相转换的实拍图像,注意留意不同投影对视角的压缩情况。

 

 

2.2 球面摄影中的取舍

这4种经典的鱼眼投影都有各自的数学特性,在工业或者科研里常常会根据性质灵活运用。

这里我们说说在「球面摄影」里需要怎么考虑。

那思路也很简单,就是看你更关注哪个区域,你想要获得更好的中央画质还是边缘画质。

 

首先说一种比较特殊的情况,如果你制作的是用计算机3D引擎建模和渲染出来的全景视频,那么直接用「等距投影」就行,也就是为每一份视场角分配相同的像素,这样就能得到一个画质均匀的完美球面。

 

而在现实世界的实拍的球面摄影中,情况就比较复杂。

如果是2D的360°球面摄影,也就是我们手机上所常见的那种全景VR看房,全景VR展厅之类的,其实摄影师们会更喜欢使用「体视投影」的鱼眼镜头。

因为在现实里,一颗镜头常常是中央画质最好,而越往边缘画质越差。

而使用「体视投影」可以为边缘视角分配更多的传感器像素,从而弥补镜头光学素质在边缘下降的问题,最终获得一个画质均匀的球面。

这样我们在转动手机更换全景视角后,就不会察觉到某个角度的画质出现突兀的下降。

 

但是在3D的180°球面摄影中,也就是我们常说的VR180图像中,情况又有所不同。

在拍摄VR180的图像时,我会建议选用投影函数接近「正交投影」的镜头,这是当前的硬件条件下,性价比比较高的方案。

 

不要小看投影方式的差异。

我们假设两个镜头其他参数相同,只是投影方式不同,一个是标准的「体视投影」,另一个是标准的「正交投影」

将这两个镜头所拍出来的图像各自展开到最大化的VR180格式,那么在中央的45°圆的视场角内,「正交投影」的分辨率会是「体视投影」的2倍。

当然反过来说,「体视投影」的边缘画质会比「正交投影」好。

但在VR180图像中,这些边缘画质是很鸡肋的。

 

像PICO 4的视场角只有105°,要看边缘就需要转头,而一转头相机的基线会缩短,人眼解读的深度信息就会出错,

因此VR180的正确观看方式就是头部保持看向正前方不要转动,最多就眼睛进行转动。

当然这部分我们留到后面讲「瞳距」时,再展开分析。

总之在VR180图像中,如果要按照视场角对画面进行取舍,那么应该优先考虑提高中央画质。

 

而相机和镜头厂商似乎并没有考虑这一点,例如佳能的RF5.2双鱼眼镜头,就用了非常标准的等距投影。

当然这样做没有问题,它的画质仍然是非常优秀的,只是说性价比并不高,这颗镜头并没有榨干相机CMOS的全部潜力。

 

换句话说,就是在现有的硬件水平下,普通人为了追求性价比更高的VR180画质,我会建议使用接近「正交投影」的鱼眼镜头,以达到最好的中央画质。

不仅在「双目VR摄影」中需要有这样的考虑,其实「VST双目彩色透视」的思路也是如此。

 

 

3. 快速鱼眼校正

那我们这一期只是讲解底层原理,不涉及具体的器材和设备,因为器材的坑太多了,需要单独做一期来讲。

像上面提到的那4种经典的鱼眼投影,其实都是理想情况,现实中鱼眼镜头使用的投影函数可能是千奇百怪的。

鱼眼镜头博主Thoby就统计过一些常见的鱼眼镜头的投影函数,眼花缭乱。

因为采用了不同的投影函数,所以这些鱼眼镜头的焦距数字就没有什么参考意义,各家的计算标准不同。

因此对于一个鱼眼镜头,我们关心的是它的成像圈直径,视场角,和投影函数。

在知道了这些之后,就可以后期在任意投影之间转换。

所以鱼眼镜头本身的投影函数非常重要,可能在手机这样的「平面屏幕」上看来,反正鱼眼镜头拍出来的东西都是弯曲的,多弯一点少弯一点也没有什么区别。

但是当我们在VR的虚拟「球面屏幕」里进行观看时,特别是双目3D的情况下,这些区别就非常明显。

 

因此鱼眼镜头也需要校正,通常会校正到理想的「等距投影」。

传统的镜头校正,是用一个3阶的泰勒级数去拟合投影函数的曲线,这个过程非常麻烦,需要先拍样片,然后拟合曲线,最后反求参数。

并且不同的软件可能会选用不同的阶数进行优化,总之一片混乱。

 

实际上这种传统的校正方式是通用的,所有镜头都可以使用,并不是针对鱼眼镜头进行优化的。

而鱼眼镜头的视角其实并不是无规律的畸变,而是有规则的压缩,因此全景软件PTGui从第11版开始有了一种针对鱼眼镜头的快速校正。

它的公式是这样的一个分段函数:

我们只需要调整1个参数,也就是k值,就可以大致上逼近不同的鱼眼投影函数。

这个公式非常优雅,注意看我在改变k值时,投影函数的变化。

【此段建议在B站上看视频的动态演示】

重新认识鱼眼镜头,VR球面图像的投影方式和鱼眼校正【双目VR摄影#V2】

https://www.bilibili.com/video/BV1TL41117ti

 

这个k的取值范围是[-1,1]

k值为1时,它是标准的「直线投影」,没有鱼眼压缩。

k值为0.5时,它是标准的「体视投影」

k值为0时,它是标准的「等距投影」。

k值为-0.5时,它是标准的「等积投影」

k值为-1时,它是标准的「正交投影」

 

因此任意一颗鱼眼镜头,只要厂商在设计和生产时没有乱来,那基本上都可以使用这个公式校正到「等距投影」,然后转成标准的VR180格式。

而最关键的是,这种校正方式只需要改变1个参数,因此它是可以盲调的,非常方便。

反正k值的区间就是[-1,1],大不了按照0.1的步进幅度一点一点去盲调,调到一个自己认为合理的画面就行。

 

而传统的校正方式3个参数是联动的,根本没有办法盲调。

因此就方便程度而言,我建议使用PTGui 11的这套公式。

但是如果要追求绝对完美,那就还是得用传统的校正方式。

 

 

 

4. VR180等距柱状投影

那么到这里我们顺便说一下VR180格式用的「等距柱状投影」

也叫「等距圆柱形投影」,英语里一般是 Equirectangular 或 LatLong。

 

直观来说,如果我们把地球仪按照「等距柱状投影」展开,就可以得到一张长方形的世界地图。

当然这里说的是360°的图像,而VR180则是对180°的半球做这样的操作。

如图,把左边一个标准的180°「等距投影」的鱼眼图片,转换成「等距柱状投影」,可以明显看出它们之间的区别。

那说说我的观点。

「等距柱状投影」其实是设计给360°图像的一种投影方式。

谷歌在2017年的时候把这个格式拿过来改一改,给3D的180°视频用,就成了今天的这个VR180格式。

那在当时来说,它确实有助于规范VR图像的创作。

 

但其实「等距柱状投影」并不适合3D的180°球面图像,会造成不必要的多余解算和像素浪费。

特别是当你想要榨干PICO 4的显示画质时,会明显发现到这一点,会碰到天花板。

 

我之前在【R7】期里就有提到过,PICO有自己的硬件,抖音有自己的社交平台。

从长远来看,如果PICO想要成为引领者,那么就不能受限于谷歌在2017年定下来的这套规则,需要制定自己的VR影像标准。

【HW君随便聊】【R7】PICO的UGC之路,是时候为VR摄影制定标准了

https://www.bilibili.com/video/BV1m14y1E7r5

讲稿 | PICO的UGC之路,是时候为VR摄影制定标准了

 

这让我想起一件很有既视感的事情,2016年小米发布了MIX。

在当时为了实现MIX超前的17:9的全面屏设计,小米特意找谷歌沟通了大半年,说服谷歌取消安卓对于屏幕比例为16:9和4:3的限制。

而在打破了这一限制之后,手机行业在屏幕显示上也迎来了新的一轮创新性爆发。

 

那么现在整个VR180视频的行业,包括VR180直播,其实面临着非常相似的处境。

不知PICO有没有勇气,去成为一个规则制定者。

 

 

5. 结语

那这一期我们讲了很多理论上的东西,虽然我做了非常多的简化,但对于大部分人来说可能还是太枯燥了。

但没办法,因为厂商这些事情没做好,所以只能用户自己考虑。

 

并且因为现在暂时没有一个合适的VR180视频的分享平台,很多东西还不能进行直观的展示,所以我反而想趁这个时间,先把一些枯燥的东西给讲完。

但不久之后PICO应该会有一些动作,到时候我们就可以分享一些更有趣的内容,大家可以期待一下。

 

那这一期【V2】期,「鱼眼镜头快速入门」就到这里。

我是HW君,我们下期再见。

 

(本章节完)

By HW君 @ 2023-03-04

guest
9 评论
最新
最旧 最多投票
内联反馈
查看所有评论
llforce
llforce
2023-11-07 11:49

我尝试对普通的24mm镜头,进行LatLong变换。结果发现没有变化。这是不是说明普通无畸变镜头的投影,是符合LatLong的。

阜阳市33
阜阳市33
2023-09-07 05:59

UP主你好,我希望能求问您一个问题!我了解到一般相机的成像平面与人眼视网膜的圆弧状不同,那么被摄物的角度越偏离光轴,光线会经历更长的距离到达成像平面。这些差异是否能在VR里矫正到与人眼一样,或者我理解错了!?谢谢!

阜阳市33
阜阳市33
2023-09-07 11:36
回复给  HW君

谢谢UP解答,在你的针孔相机模型里,我可以理解为焦距等价光心垂直于成像平面的距离吗?而光心到成像平面的极限边缘焦距不同?

假如有两个相同大小的被摄物,一个放在0度光轴,另一个放在右50度+的位置,它们与光心的距离都相同。那么,最后记录的图的像大小不一样了。所以我疑惑这点,在VR里把平面图像变换成半球图像时,是否随带也就校准了!

最后,还祝UP主创作的硬核科普视频的努力能得到更多的人认可!!

阜阳市33
阜阳市33
2023-09-12 21:45
回复给  HW君

UP,你好。我也糊涂表达不清楚了,请问VR虚拟出的半球面只是为了抵消鱼眼镜头的畸变而已吗?而相机平面(二维投影)成像单元相对于眼球球状视网膜(三维投影?可能是我表达错误,我不是相关专业)不同的投影没有被矫正?

也或者说,虚拟的半球面 本身也在矫正线性畸变(不知道还是叫切向畸变,术语我不清楚难以表达)呢?

最后由阜阳市33编辑于7 月 前
阜阳市33
阜阳市33
2023-09-07 11:57
回复给  HW君

UP主,我这样理解和画的简陋模型是否错误?

简陋模型图.jpg
阜阳市33
阜阳市33
2023-09-12 22:40
回复给  HW君

也许我下面问的有些多余了,您这里已经给了答案了!

(我也只是好奇这里面的底层关系才那么啰嗦一通)

最后希望UP还能陆续更新一些硬核的作品,我个人认为硬核干货(能通俗一些讲人话的,费曼也推崇要把复杂的原理能给小孩子讲明白)的博主非常高水平和有辨识度!

最后由阜阳市33编辑于7 月 前