文 | HW君
本文为B站【V2】期的视频讲稿。
部分动态演示,请参考视频画面:
重新认识鱼眼镜头,VR球面图像的投影方式和鱼眼校正【双目VR摄影#V2】
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以及偶像
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】
这个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摄影制定标准了
这让我想起一件很有既视感的事情,2016年小米发布了MIX。
在当时为了实现MIX超前的17:9的全面屏设计,小米特意找谷歌沟通了大半年,说服谷歌取消安卓对于屏幕比例为16:9和4:3的限制。
而在打破了这一限制之后,手机行业在屏幕显示上也迎来了新的一轮创新性爆发。
那么现在整个VR180视频的行业,包括VR180直播,其实面临着非常相似的处境。
不知PICO有没有勇气,去成为一个规则制定者。
5. 结语
那这一期我们讲了很多理论上的东西,虽然我做了非常多的简化,但对于大部分人来说可能还是太枯燥了。
但没办法,因为厂商这些事情没做好,所以只能用户自己考虑。
并且因为现在暂时没有一个合适的VR180视频的分享平台,很多东西还不能进行直观的展示,所以我反而想趁这个时间,先把一些枯燥的东西给讲完。
但不久之后PICO应该会有一些动作,到时候我们就可以分享一些更有趣的内容,大家可以期待一下。
那这一期【V2】期,「鱼眼镜头快速入门」就到这里。
我是HW君,我们下期再见。
(本章节完)
By HW君 @ 2023-03-04
我尝试对普通的24mm镜头,进行LatLong变换。结果发现没有变化。这是不是说明普通无畸变镜头的投影,是符合LatLong的。
普通无畸变镜头是Rectilinear直线投影,不是Latlong,两者是不同的
UP主你好,我希望能求问您一个问题!我了解到一般相机的成像平面与人眼视网膜的圆弧状不同,那么被摄物的角度越偏离光轴,光线会经历更长的距离到达成像平面。这些差异是否能在VR里矫正到与人眼一样,或者我理解错了!?谢谢!
我认为这个差异目前还没看到有什么特别的影响
谢谢UP解答,在你的针孔相机模型里,我可以理解为焦距等价光心垂直于成像平面的距离吗?而光心到成像平面的极限边缘焦距不同?
假如有两个相同大小的被摄物,一个放在0度光轴,另一个放在右50度+的位置,它们与光心的距离都相同。那么,最后记录的图的像大小不一样了。所以我疑惑这点,在VR里把平面图像变换成半球图像时,是否随带也就校准了!
最后,还祝UP主创作的硬核科普视频的努力能得到更多的人认可!!
我不是很清楚你表达的意思。
VR在显示的时候,会虚拟出一个等距的虚拟半球面,半球面上的每一份角度都有相等的距离,而人眼在球心中间。
然后再把图像以角度为标准,贴在虚拟半球面上。
UP,你好。我也糊涂表达不清楚了,请问VR虚拟出的半球面只是为了抵消鱼眼镜头的畸变而已吗?而相机平面(二维投影)成像单元相对于眼球球状视网膜(三维投影?可能是我表达错误,我不是相关专业)不同的投影没有被矫正?
也或者说,虚拟的半球面 本身也在矫正线性畸变(不知道还是叫切向畸变,术语我不清楚难以表达)呢?
UP主,我这样理解和画的简陋模型是否错误?
也许我下面问的有些多余了,您这里已经给了答案了!
(我也只是好奇这里面的底层关系才那么啰嗦一通)
最后希望UP还能陆续更新一些硬核的作品,我个人认为硬核干货(能通俗一些讲人话的,费曼也推崇要把复杂的原理能给小孩子讲明白)的博主非常高水平和有辨识度!