之前的科普很多都在讲画质,讲分辨率,讲信噪比……当然,出于一个风光拍摄者的角度来说,画质是非常重要的一环,了解画质评判原理和影响画质因素的产生机制,也有助于我们更好的获取极限画质。那么自然的,配合本次的人像专题,我们也来聊聊跟对焦相关的事情。单反和无反都叫相位检测,它们本质上有什么区别?为什么单反的对焦点分f/2.8、f/5.6……,而无反就不分?为什么单反容易跑焦而无反相对较难?为什么同一代产品,A7R3的追焦性能远不如A9?……等等这些问题,都可以在这篇文章当中找到答案。坐好了,咱们起飞咯~
要谈对焦的本质,首先需要思考一个问题:对于一个没有像差的理想镜头来说,对上焦了和没对上焦,本质上有什么区别?
从直观上来说,就是对上焦了之后是清楚的,没对上焦的时候是模糊的。说得严谨一点就是,一个理想的点光源,在经过合焦的理想镜头之后,在焦平面上呈现的依然是一个点。而没合焦的情况下,一个理想点光源在通过镜头之后所成的像是一个发散的二维图样。
没错,这就是我们反复提过无数次的点扩散函数,任何东西,不管是发光的还是反光的,都可以等效成无限多个点光源所组成的集合。镜头失焦之后,这无限多个点就会扩散成无限多个点扩散函数,组成我们最终看到的焦外图像。
但这些点扩散函数并不是简单相加的——其实很好理解,这些点光源之间的距离是无穷小的,但是点扩散函数却不是,也就意味着点光源A扩散之后,其产生的亮度也会影响其它点光源所在位置的亮度。举个比较极端的例子就是两个扩散得很大,互相重合的光斑,重合部分的亮度比两个光斑中心的亮度还要高,产生了叠加效果:
所以由点扩散函数生成焦外图像的算法不是简单的相加,但是也并不复杂。虽然点光源虚化扩散开之后会影响周围其它点的亮度,但是很明显这种影响是跟距离相关的。
为了方便起见(写一堆二重积分可能很多人看着头都会大),我们把情况简化成一维情形,假设图像当中有一个定点X,受到来自同一条直线上A、B、C、D……的点扩散函数(灰圈)影响。很显然,离X越远的点,同样的虚化程度对X处成像效果的影响越小。
所以,影响X处虚化效果的变量是距离因子f(X-τ),乘以点扩散函数的值g(τ),然后有无穷多个这样的点,所以我们沿着一条直线求这些乘过距离因子之后的点扩散函数的和,由于有无穷多个点,所以说是求和,实际上是积分:
有信号学基础的同学应该对这个式子并不陌生,这就是传说中的卷积——当然这个式子,以及它背后的物理意义并不重要,在这里我想说明的问题是,由于对于一个特定的像点τ和特定的镜头来说f(X-τ)(在后面马上我们就可以证明它就是镜头合焦时的成像效果)是一个定值,所以对于同一支镜头、同光圈值拍摄同一个场景而言焦外成像唯一的取决于g(τ)——这也是我们可以从拍摄灯泡得到的光斑图像当中推测镜头实拍焦外表现的原理。而对于同一支镜头、同一个光圈值,确定的g(τ)对应一个确定的焦点距离。特别的,当合焦的时候g(τ)收缩为狄拉克函数(一个理想点,有兴趣的可以点进去了解一下这玩意究竟是个啥),而对于狄拉克函数δ(x),我们有:
所以,此时合焦图像某点的亮度Y(x)=f(X-τ),τ只是一个位置因子,决定你选的是图片距离X点多远的位置。也就是说合焦的时候,该处的亮度等于该点光源的亮度(假设理想镜头无光损)。而且很显然,此时点扩散函数本身也是极大值(δ(x)|x=∞)。
至于为什么理想镜头合焦时点扩散函数是δ函数,反之亦然,也是有原因的:
这是因为狄拉克函数有一个基于广义傅里叶变换(利用了δ函数的特征来做了一步广义积分,否则算不出来)的性质:
而空域亮度分布函数的傅里叶变换就是频域MTF,MTF=1就意味着频域还原度是100%,信号没有损失,分辨率是∞,所以叫理想镜头。其合焦时的点扩散函数必然是狄拉克函数,反之亦然。
so,说了这么多废话连篇的数学,看不懂也无所谓,只要记一个结论就可以了:
无论是手动对焦、反差检测还是相位检测,本质上都是驱动镜头使点扩散函数g(τ)发生变化,最终使得在焦平面上其亮度取极大值,位置离散度取极小值,理想状况下收敛成一个点(以下均简称点扩散函数取极值)的过程。
而且由于能量守恒,一个固定的点光源的点扩散函数中包含的总能量是固定的:
也就是说亮度取极大值时,位置离散度必然取极小值,反之亦然成立,所以只需要检测其中一个极值就可以实现对焦了。
放大手动对焦和反差对焦的原理是相同的,裂像屏手动对焦的原理和片上式相位检测是类似的,所以手动对焦就不再单独拿出来说了。
反差对焦的原理最简单,也最好理解,各种相机上使用得也最多,就先拿它出来讨论吧。
相信这个直观图解大家也看到过无数次了。不过为什么反差的最大值对应的就是点扩散函数的极值呢?
其实反差的定义,跟我们之前讲的锐度的定义是一样的,都是某个方向上亮度对距离的变化率或者说Y的导数Y'。或者说,在固定的距离范围内,使得亮度的变化量取最大值。
这么说就非常好理解了,就好像堆沙子,要使得堆起来的山坡斜率最大,就要把沙子尽量在一个点上堆高。同理要想亮度变化率最大,就要使得点扩散函数亮度尽量高,一直到g(τ)=δ(x-t)的理想情况,此时反差为无穷大,黑白边界无限清晰,也就是找到了合焦点。
一句话结论:反差对焦检测的是点扩散函数的亮度极值。亮度取极大值时分布面积必然取极小值,此时镜头合焦。
反差对焦不是本次要讲的重点,所以就一笔带过了。接下来我们来讲两种相位检测——单反的独立相位检测模块,和无反的片上式相位检测。
顺便提一句反差对焦的一种变体就是松下的DFD,在镜头的点扩散函数信息和距离信息能一一对应,并且机内有记录的情况下,可以直接通过检测点扩散函数的方式来测距,从而实现类似相位检测的追焦性能。缺点就是机身必须知道镜头每个对焦距离下的点扩散函数,也就是说随便转接插个头是不行的,用奥巴头也不行,只能实现普通的反差对焦。
对于单反相机来说,成像模块和对焦模块是两套光路,靠反光镜结构来进行切换,相当精巧的一套机械组件:
当然今天重点要讲的是对焦感应器,如果单独拆出对焦模块来的话,它长这个样子:
可以看到白色条状的、对称排列的检测线,实际上这些检测线都是一些独立的线性CCD,也是一个一个像素组成的。
只不过单有这个对焦模块,还没法实现相位检测。单反还有一套复杂的分光光学系统,来配合相位检测模块实现自动对焦:
如图所示,最左边是一个点光源。通过镜头成像之后也会变成一个点扩散函数。然后根据理想镜头的特点,点光源穿过镜头后也总有一个点的点扩散函数能取到极值(也就是先假定镜头可以聚焦)。我们把这个焦点也看作一个向后继续发光的点光源,称作虚拟点光源。下面要做的就是求这个虚拟点光源(点扩散函数极大值)的位置,接下来的事情就顺理成章了:
镜头后方的焦点(虚拟点光源)位置不同,经过两个二次成像透镜后在检测线上投下的光点位置也就不同。根据检测线(下面的粗黑线,注意实际上是一排像素,可以感受光线强度)上信号的强度分布,就可以倒推出点扩散函数的这个极大值究竟在空间中分布在哪个位置,然后把镜头马达推过去,OK,一次完整的相位检测对焦就此结束。当然实践设计当中这个过程是闭环的,在推动镜头的同时,这个CCD检测线依然会一直工作,以确保能把镜头推到正确的位置。决定对焦精度的就是像素的大小——像素分划得越细,测量这个虚拟光源的位置就可以越准确。但是像素太小也会带来其它问题,我们接下来再说。
所以再看这张图就顺理成章了——一对检测线对应的是它们中间的一个对焦点。不过这一对检测线只能检测与该检测线方向有垂直分量的反差线条,如果线条与检测线平行,就相当于点扩散函数在检测线上恒为0,相位检测无法工作。所以为了对焦系统能更好的工作,很多时候都是把两对互相垂直的检测线组合起来,做成一个十字对焦点。或者把四对互相成45°角的检测线组合起来,做成一个双十字对焦点。
一字、十字、双十字对焦点就是这么回事,那么对应“f/2.8”、“f/5.6”这些“光束”的对焦点又是怎么回事?
可以看这张图,很明显光圈越大对应的口径也就越大,来自镜头边缘的光线范围也就越宽广,需要检测线更长,或者一对检测线(图中的A、B)之间的间距更远(淡黄色与深黄色相比)才能对更大的光圈收束的全部光线做相位检测。所以佳能的官网介绍也有点耍滑头,5D4的中心对焦点介绍是“对应f/2.8和f/5.6光束的双十字自动对焦”,很容易被理解成f/2.8和f/5.6都可以用到米字形的四对检测线。但是实际上,看对焦模块上的检测线我们就很容易看出来这个中心对焦点的设计是f/2.8光束利用X形的两对长距检测线,f/5.6光束利用“+”形的两对短距检测线,也就是无论如何都只能用到一组十字对焦。不仔细看介绍的话,还真容易忽略这个问题。
打开详细介绍就可以看到了,蓝色的f/2.8十字形自动对焦点和黄色的f/5.6十字形自动对焦点。佳能在宣传上可以模棱两可一下,但是详细介绍也是绝对不敢造假,只是一般消费者很少去在意这些东西罢了。再来比较一下这两张图,f/5.6、f/8的检测线就可以排得很密集,但是f/2.8的检测线就必须拉开很远。什么,你想让佳能给你一对f/1.4的检测线?歇着吧您,塞不下。塞得下您也买不起,就委屈委屈用f/2.8的检测线来给f/1.2的镜头对焦吧啊。
至于中低端单反就更寒酸了,80D/6D2的检测模块,给的是45点全十字,中心双十字,是不是听起来还不错?然而看看检测线:
只有两对拉开距离比较远的检测线,其它的基本都是成对靠在一起,一看就有种不祥的预感。
实际也是如此:
只有中心点宽大仁慈的给你个X形的f/2.8检测线,别的都是f/5.6的十字,想用大光圈对准?开LV吧您呐。
说完了可用于对焦的最大光圈,再来说说单反可用于对焦的最小光圈。跟大光圈正好相反,小光圈下需要检测线靠得更近,同时精度和灵敏度也要足够高才行。
这个图就是上面这个对焦模块的f/8可用点,只剩下一个中心点,对比上面的对焦模块示意图不难猜测,那根加粗的检测线就是为这个f/8对焦准备的,增加进光量的同时缩小像素的径向长度。(对焦检测线的像素一般都不是方形,比如下面这张尼康Multi-Cam 20K对焦模块显微照片,明显扁的像素更适合用来做相位检测模块,检测线径向方向的像素密度高从而精度高,同时可以通过加宽法向宽度的办法来增加进光量提升灵敏度)
当然为了避免被说是黑佳能,还是要特别提示一下,下面这个组合(三代增距镜)可以在80D/6D2上用到27点的f/8光束自动对焦,具体实现方式不明。
一句话结论:独立相位检测检测的是点扩散函数取极大值,收敛成一个点光源时的空间位置。很显然,如果镜头本身就有不小的球差(如下图),使得这个虚拟点光源并不完美,独立相位检测几乎是一定会产生随机跑焦的情况的。
虽然都叫相位检测,但是具体实现方式区别还是挺大的。首先有一条就决定了无反没法使用类似单反的独立相位检测:这套玩意由于引入了虚拟点光源,实际检测线的光学位置在焦平面后面很远的地方,放进无反里就意味着要塞进CMOS后面,这显然是不可能的:
所以无反的片上相位检测用的基本是自己专属的一套办法(佳能的双核像素也是类似的原理),相当于直接检测点扩散函数的形状,而不是用二次成像透镜来检测虚拟点光源的位置。
玩过用剪纸挡镜头前面拍心形光斑这种游戏的人应该都能理解,点扩散函数的形状只有在理想状况下才是个圆,如果光阑形状发生变化,点扩散函数也会发生相应的变化。
但是用这种东西拍合焦的照片,却不会发现有什么异常,道理很简单:合焦的时候点扩散函数就是一个点,点和点之间是全同的,没有区别。
片上式相位检测基于的是这么一套简单的东西:半个像素看到的点扩散函数也是半月形,左半边看到的往左偏,右半边看到的往右偏,只有合焦的时候(点扩散函数都收敛成一个点)才能重合。通过偏移量就可以测距,通过测距就可以快速对焦。
当然要完美的成这么一套像,需要把每个像素都弄成半遮罩,才能看到类似半月形镜头光斑的效果。不过只是为了对焦的话这种事不需要搞那么复杂,找一个小区域,搞一排像素来看这半个点扩散函数就可以了,这就是无反的检测线。
一排往左,一排往右,就这么个简单的玩意儿就可以做相位对焦的检测线,也是蛮神奇的。
当然也有一种传感器是全部像素都分左右的——就是佳能的全像素双核对焦,正好5D4还有Dual Pixel RAW,可以输出A和A+B(相当于左半像素和全像素)的输出信号,我们可以一眼就看出来,对于不同形状(半月牙和圆形)的点扩散函数,只有合焦的焦点处才能重合,只要离焦就会产生错像,离焦越远错像幅度越大:
所以实际上只要是个左右不一样的形状就可以利用合焦时候点扩散函数收敛,离焦时候点扩散函数发散的特性来实现测距,只不过半像素这种手段制造和实现都比较容易,所以成了默认的规矩。
这个跟裂像屏本质原理上是一样的(裂像屏也是两片透镜各挡一半),所以可以用片上式PDAF做出数码裂像这种好玩的功能——不过目前好像只有富士的机器才有。
结论:本质上,片上相位检测检测的是点扩散函数在位置参数上扩散区间的最小值。由于能量守恒,扩散区间越小亮度极值自然也就越高,所以此时点扩散函数取极大值,镜头合焦。
那么片上式对焦相对独立相位检测的优缺点都有什么呢?
优点:
1、精度高
前面讲过,单反的独立对焦模块和成像模块实际光程是不等长的,装配过程中容易产生误差。而且单反由于进行对焦的光线只是一小部分,对焦像素需要做得比较大才能获得可观的灵敏度。片上式相位检测就没这问题,成像像素多大,检测像素就是多大。而我们前面讲过相位检测的精度取决于检测像素的大小,要灵敏度就要不了精度,所以1DX2/5D4用四对检测线做一个对焦点也是有点无奈之举的意思。在这两点上,即使都是纯相位检测,没有反差介入,无反的对焦精度也是先天性的优势。更不用说无反对焦完了还可以用绝对准确的反差对焦来做最终确认,单反……原则上来说也可以抬反光板用反差确认一下,但是这真的会给人一种脱那啥放那啥的感觉……
2、成本低
单反的对焦模块什么的都是独立的,无反的……反正本来你也要做像素那套东西,加对焦点的额外成本几乎等于零
3、不吃检测线长度,可以对全部光圈的光线进行对焦
单反之所以需要不同的检测线来应对不同的光圈,主要还是因为二次成像透镜的分光机制,检测线并不能吃到镜头进入的全部光线。而无反的片上相位就没有这个问题,镜头入射的全部光线都可以照到片上相位点上来做对焦使用。当然因为实际镜头都有口径蚀,真实情况没有那么理想,不过相比单反要靠不同的检测线来区分相应的光圈,无反从f/1.2到f/11只要灵敏度跟上都可以做相位检测的特点在实用性上可以说是莫大的方便。同时可以利用大光圈的全部光束对焦,又进一步提高了(1)中所提到的精度。
4、因为2和3,对焦点密度可以做得很高
2不用解释了,3的话,想想前一节讲到的,单反的检测线为了实现大光圈、高精度,要占多少地方,就明白了……
5、无机械结构,故障率低
集成度越高、机械部件越少则故障率越低这个也算是铁律了。听说过坏硬盘的,坏显卡的,坏主板的,你听说过几个人CPU正常用用坏了的?
缺点:
1、不能同时成像和对焦
这个事情其实从现阶段来看,尤其是对于A7R3这种机器而言是有点致命的,有人可能会说,单反成像的时候也是要抬板子的,对焦系统一样哑火啊?然而实际上不是。
曝光,或者说成像这件事,是分两步的:
①:快门打开,像素阱积累电荷
②:快门关闭,进行A/D转换、数据读取等后续操作
在②的过程当中,快门帘是不能开启的,一旦快门帘开启就会继续积累电荷导致曝光出错。有些快门坏掉的相机,拍摄的照片一边会有亮条,就是这个原理。
然后区别就在这里了:单反在快门关闭、读CMOS的过程中,可以放下反光板继续对焦,一边读CMOS一边对焦毫无压力。无反就不行,CMOS被快门挡死的时候整个对焦模块都是GG的。偏偏对于传统结构的CMOS,读取时间一点都不短——即使是A7R3上的灰烬版IMX251,从上到下读完CMOS也需要1/13s。假设开10fps连拍,每一帧0.1s,读CMOS都要1/13s,也就是说每帧只有0.023s(23%)的时间可以给相位检测模块来对焦。而单反,尤其是旗舰单反的反光板回弹时间都在1/40s左右,以D850的7fps连拍为例,每帧当中独立相位检测模块可以有0.117s(81.93%)的时间处于工作状态,追焦性能要做好也是相对容易。之所以旗舰单反的反光板都打得啪啪响,不是为了给你听着爽的,都是为了能快速回弹,在连拍过程中尽量多争取对焦模块可用的工作时间,毕竟能给对焦模块多续1ms,追焦性能就能提高一分,这都是体育摄影的生命线啊。
当然索尼A9解决这个问题的方式有点暴力——高并发ADC+片上缓存,读不完不要紧,直接扔进缓存里放着,慢慢往外读,对焦系统继续工作就是了。这样的话一个刷新周期只有1/160s左右,即使是20fps连拍,对焦模块也能有87.5%的占空比进行工作,强大暴力的追焦性能从此就有了硬件保证。
所以之前我也在微博上说过,堆栈式CMOS的缓存就是用来挑战旗舰单反的最后领地——追焦性能的,至于20fps连拍和无黑视这种,只是附带的花活,看起来爽,实际意义真的没有大幅提升的追焦性能那么大。
2、应对大脱焦检测无力
单反由于有二次成像透镜把像重新聚焦到检测线上,即使镜头大幅度脱焦,检测线上依然能有相对清晰的信号。无反就不行了,只能靠反差试对或者干脆罢工,这就是所谓的拉风箱,在使用大光圈镜头的时候尤其明显。这也属于一个原理性的问题,虽然问题不大,但有时候也会比较影响体验。最明显的问题可能就是应对突然闯入对焦范围的物体时容易抓瞎,光圈越大这个问题越明显,算是个小硬伤吧。
3、略微影响画质
怎么说也是亏了几百上千个像素啊是吧。不过这个问题也是有解的,就是全像素双核的方案,在此就不多说了。
诸位可能想不到的是,片上式相位检测其实出现的时间很短,第一部采用片上式相位检测的相机是富士F300EXR,2011年7月才发布的,比内置ADC的Exmor CMOS历史还短。第一台片上式相位检测的可换镜头相机是尼康J1/V1(2011年9月),第一台APS-C画幅的片上式相位检测相机是发布于2012年6月的佳能650D,随后索尼也发布了带片上PDAF的NEX-5R,跟61点独立对焦模块的5D3几乎是一个时代的产品。
结果现在片上式对焦都随着CMOS性能进化到量变引起质变的阶段了,那套61点的独立对焦模块(1DX/5D3上那块的改进版)还在佳能旗舰机里用着……
其实单反的这套对焦系统,虽然前面我也用了“设计精巧”之类的评语来给予评价,但是大家应该清醒的认识到一个问题就是蒸汽朋克没有未来,机械组件的速度再提升也就那样了,更不用说磨损、精度、跑焦、成本……之类的问题。
然而半导体却是规模经济,卖得越多成本就越低,成本越低就可以卖得越便宜,卖得越便宜就可以卖得越多……
所以毫无疑问,A9获得各种年度相机奖项也是实至名归——如果说D850/D5是对焦的现在,那么A9就是对焦的未来。D850上这块Multi-Cam 20K基本把独立对焦模块能做的事情都发挥到几乎极致了,并且实际表现也相当不错。不过A9这种第一代全幅高速片上式追焦产品出来就拥有能跟它几乎战平(实际上除了3D/物体识别追焦之外,打D5都压力不大。至于物体识别跟踪这个,更多的应该是算法问题,索尼的软件还是嫩了点)的实力。虽然半导体工艺也在逐渐逼近物理极限,但是能优化提升的空间明显还是比机械要大——佳能从10fps做到14fps用了差不多10年,如果再给片上式对焦系统和相应的高速CMOS十年时间,又会是怎么样的一副光景呢?
拭目以待吧。
联系客服