按下快门之后,手机在干什么?
手机摄影的硬件已经碰到天花板,等明年1英寸传感器满街跑之后,以后厂商的宣传重点可能会越来越偏向于“算法”和“计算摄影”。这里先立个flag,帮大家预习/温习一下“计算摄影”相关内容。
“计算摄影”,对于用户是个不明所以的黑箱,也是个很模糊的概念。从耳熟能详的HDR、夜景模式、美颜与特效,到“摇摇乐”像素位移、超分、多摄融合,就连以前的人像虚化、超广角边缘校正也是“计算摄影”的一部分。
Google Pixel 7 ↑
Google有在Google AI Blog做技术分享的优良传统,所以本文以Google的视角,简单整理大家最关心的HDR和夜景模式等计算摄影算法的演变与特征,最后提几句苹果。
像打怪一样,克服问题、改进和利用各种技术的过程,时常会让人忍不住大喊“妙啊”,我们这就开波回顾历史。
数码摄影最早遇到的问题之一,就是小底CMOS的动态范围完全不够用。
数码多当年非常直观的原理说明↑
为了让相机传感器几千比一的记录范围,能记录明暗对比度动辄几万比一的真实世界,工程师搞出了多帧接力的“曝光包围”,用欠曝的短曝光照片去记录高光+过曝的长曝光照片记录暗部,然后合成明暗细节具备的高动态范围HDR(High-Dynamic Range)图像,现在回看也是个非常妙的方法。
2010年的9月,苹果在iOS 4.1上为iPhone 4(刚升级成500万像素,首次加入前置摄像头)引入HDR。但HDR的大规模宣传,还得等iPhone 4s (升级到800万像素,支持1080P录像)的发布会。
而类似的功能,当时的移动摄影霸主诺基亚,要等2013年的Lumia 1020才有(这锅微软要背一半),而且其包围曝光功能,要把照片导到电脑手动合成。
下一个里程碑是Google的HDR+。Google从斯坦福挖来Marc Levoy(马克·勒沃伊)教授,其研究成果,就是2013年Nexus 5搭载的HDR+,后者要等到2015年的Nexus 5X/6P才大放异彩。
Marc Levoy教授在2020年跳槽到Adobe做副总裁,跳槽时他说会搞个通用的相机app,大家以为无数算法一塌糊涂的手机会得到救赎,然而这app现在都没影。
而下面是HDR/HDR+遇到的一系列问题和很妙的解决方案。
HDR+的初衷,是要解决传统HDR容易糊片和运动鬼影(移动物体的“多重影分身”)的问题。
传统HDR起码由长短2帧合成,长快门帧容易因手抖或被摄物移动而糊片,所以HDR+改用多帧相同时长的短曝光(既然长快门不安全,那就全用短快门好了)。
HDR+会拍下2到15帧快门时长相同的欠曝照片,然后对齐、选出基础帧、预留抖动的废片去做多帧降噪,然后合并输出HDR+照片。
因为要等多帧拍摄完才能合成,所以当时做不到“零延时快门”,点完快门还要等进度条转完圈才能拍下一张(现在的夜景模式也是这样)。
Google用了“预载快门前的图片”的方法,来做到0延时快门(Zero Shutter Lag,ZSL)。只要打开相机,手机就会开始拍摄图像帧并储在缓冲区,按快门时,相机会将最近9帧或15帧送去做HDR+或Super Res Zoom(超分辨率)处理。
要对齐和合成多张照片,算力需求很大,真的是“计算摄影”。
当年Nexus 6P的骁龙810不降频时,拍HDR+照片需要2.5到4秒(具体取决于多帧合成的帧数)。光线好的场景总耗时2.5秒,当中拍摄耗时100毫秒,对齐要250毫秒,合并要580毫秒。暗光场景的拍摄总时长4秒,包括1秒的拍摄,500毫秒对齐,1200毫秒用于合并。拍照时转圈圈的等待,依然会让你感觉时间凝固了。
2016年后的Pixel系列,即便连高通骁龙的Hexagon DSP都拉进来帮忙处理,但算力还是完全不够用(其实现在也不够用)。
为此,在2017年的Pixel 2,Google和英特尔合作设计了专门的Pixel Visual Core芯片来硬件加速,帮忙处理HDR+照片并让第三方app也能调用HDR+。其宣称运行HDR+只需要1/5的时间和1/10的功耗。接近时代的,还有华为海思的NPU、增加“仿生后缀”的苹果A系列芯片,多年后的vivo V1+、OPPO马里亚纳X,初始核心用途也是搞计算摄影。
除传统的白平衡算法需求,在把12bit甚至14bit的HDR照片映射到8bit jpg图像时,也容易出现伪影、光晕、梯度反转或局部对比度损失等多种问题。部分用户可能还记得早期Google Nexus/Pixel机型,甚至用Google相机的部分第三方机型,HDR+会有白平衡漂移、高光处会出现特殊纹理等多种问题。
而后来,Pixel 4把Pixel 3上仅用于夜景的机器学习白平衡普及到所有模式,让HDR+的白平衡问题有了大的改观。
讲白话,HDR+就是用“多次短快门”来规避传统HDR长曝光帧易糊片和运动鬼影问题。但短快门的欠曝样张,注定会损失暗部细节。因为HDR+的每次短快门都会引入新的读取噪声,所以它注定也无法超越同样时长的长曝光。
所以Google在2021年,重新为HDR+加入长曝光帧(兜兜转转又回来了,而苹果2018年的Smart HDR就保留了长曝光)。这次“妙”的地方是,Google继续沿用“开相机就开始缓冲短曝光帧”的策略,新加入的长曝光帧,放在按下快门之后,这样就能兼顾零延时快门和暗部效果。
Google的Night Sight是在2018年底引入Pixel系列的新算法,翻译就是:要等上好几秒、但又可以手持成片“慢快门”的自动夜景模式,对应华为在2018年初P20系列的手持超级夜景模式。
Night Sight是快门速度更慢+正延迟快门(PSL)的HDR+强化版。HDR+是大部分帧都在按快门前拍下的,而Night Sight的所有帧,都是按快门后拍摄的(所以会有取景卡顿还长时间的进度条转圈圈)。
HDR和夜景模式都对手持情况敏感,Google自然也给Night Sight加了自适应的快门和帧数策略。
2018年的Pixel 3在默认拍照模式就用了光流法(optical flow)测量场景运动,然后自动选择曝光时间来降低糊片几率,同时会用短帧作为对齐参考帧,用类似Super Res Zoom的算法决定每个像素是否应该参与合成。
如没太大的运动,Night Sight的每帧曝光时间最多拉长到1/3秒并连拍15张(5秒总时长)。如果使用靠墙或三脚架等物理稳定方法,单帧时长会增加到1秒并连拍6张(6秒总时长)。
而2021年在HDR+里引入长曝光时,Night Sight也引入更多的长曝光帧,手持极限的15帧里,前6帧会梅花间竹地做了3次长曝光,而以前会被舍弃的照片帧,现在也能加以利用来进行降噪。
左侧是长时间曝光产生的热噪声,右侧是算法消除效果↑
天文摄影模式是极限版本的Night Sight,在长达4分钟的长曝光中,包括15张单帧短于16秒的照片。
此外,Google用经过10万张天空夜景图像“训练过”的神经网络,区分天地相交的天际线,然后对天空、陆地风景做针对性降噪或对比度处理,并完成热噪点去除(因传感器的长时间曝光而产生)。
同样是在2018年引入的Super Res Zoom(超分辨率变焦),也被称作“摇摇乐”算法。现在不少厂商在1.5到3倍的低倍率,用的是就是像素位移叠加AI超分辨率。
Pixel 2与Pixel 3的Super Res Zoom效果对比↑
当时行业主流都是加个长焦副摄,倔强的Google则用Pixel 3告诉大家什么叫“谷人希”,用单摄完成媲美长焦副摄的变焦效果。
CMOS传感器常用的Bayer拜耳阵列滤光片结构,为了能记录颜色,用了红绿蓝3原色的滤光片(对应常见的RGGB,但也有RYYB等其他方案),用感光效率和像素密度来换取记录颜色的能力。
翻译就是,100万像素的屏幕会有300万个子像素,而100万像素的CMOS只有100万个子像素。我们平时看到的照片,实际上2/3的信息都是去马赛克 (Demosaicing)算法插值、猜色重建的结果。
Super Res Zoom算法的思路,类似单反的“像素偏移多重拍摄”技术,通过精确控制像素偏移来补全缺损的像素信息。其在1.2倍以上放大就会自动触发,拍摄并对齐多帧画面并跳过去马赛克算法。
自然手抖效果↑
其“妙”在Google除了用OIS防抖强制位移(把手机固定,你可能会留意到取景框在做椭圆运动),还利用人类手部的自然抖动做像素位移。
相机上的“摇摇乐”一般建议8张起叠,叠完后会有4倍像素,而且还能再往上叠成16倍,简直就是数毛计算摄影的未来,只是现在的移动芯片性能不允许。
Google给过SuperRes Zoom的内存占用和速度数据,用Adreno 630 GPU(骁龙845)处理1200万像素像素照片会吃掉264MB内存,耗时280ms左右,还是挺吃性能和内存的。
图片深度信息↑
虚化上的操作,是Google“单摄能搞定的事情绝不用多摄”的最佳例证之一。最早的虚化是靠双摄视差(二年级学过的三角定位与视差)完成距离检测,而Google在Pixel系列上,用祖传IMX363的年代,其用的是全像素双核对焦的绿色子像素(红蓝像素都没用)做距离检测,又是一个妙手。
但子像素比起同行的双摄,物理间距实在是小太多了,深度信息精度不足(弱光时更惨),所以Google加了立体算法。
实际操作中,是先搞HDR+,用经过100万张照片训练出来的卷积神经网络去分辨人形区域,综合人物识别和深度信息,对每个像素的模糊程度进行计算。而前置镜头没有双核对焦,全靠人物识别。
为了提高效果,Google当年也玩了些小技巧。例如早期的人像虚化中,前置默认1.2倍放大,后置则是1.5倍放大,让用户自然地离远一点来减少透视畸变。
时至今日,所有厂商都能用最普通的单摄完成虚化,甚至给虚化的光斑自定义形状。但用神经网络虚化的弱点,依然是过于“依靠常识”,非常见物体会识别不出来,例如人和鳄鱼亲吻的照片中,鳄鱼可能会被当做背景模糊掉。遇到理工男格子衫、空白墙面/严重过曝样张等,重复纹理甚至无纹理区域也容易翻车。
而多摄融合,典型的用途就是主摄到3到5倍长焦之间的变焦区间:主摄数码变焦中间叠加长焦的画面(从画面边缘到中间的过程中,会发现画质突然出现跃变)。
又或者像荣耀Magic3系列主推的多摄融合那样,在超广角画面中间叠加主摄的画面。如果恰巧设备的算力雄厚,甚至还能在超广角中间套主摄,然后再套长焦画面。
经过这些年的发展,像是Google HDR+后来重新引入长曝光帧、Google和苹果都跟进了和华为类似的手持超级夜景模式,不同厂商的算法经常会殊途同归。这里简要说一下苹果最常用的是Smart HDR和Deep Fusion(深度融合)算法。
Smart HDR算法在2018年的iPhone Xs系列首发,顾名思义就是应对大光比场景用的。
它一直是传统的长短帧设定,算法目标主要是提高画面宽容度,画质增强的效果不明显。苹果默认是连拍9张合成,而Google则是2-8帧合成,后者会为了画面自然而降低合成数量,明亮场景最低只会用2帧合成。
Deep Fusion算法在iPhone 11那代引入,同样是9合1,但核心用途是提升画质,它是苹果从以前的“真实、还原、淡雅”变成“艳丽的锐化爱好者”的元凶之一。
Deep Fusion无开关,只能通过Metapho等第三方App查看那些样张触发了算法。主摄会在弱光场景触发Deep Fusion,而对于苹果素质孱弱的长焦和超广角,无论白天黑夜几乎都是默认触发的。不喜欢锐化的塑料感,可用NOMO等App规避,但代价是糊片几率提升。
最后提一嘴算法供应商。
移动摄影最早是虹软等传统算法供应商的天下,除了一直搞自研路线的苹果和曾经的计算摄影领头羊Google,其他厂商一直都在用虹软的算法。像旷视、商汤也是现在很重要的第三方算法供应商。
现在华为、小米、vivo、OPPO、荣耀都有自己的自研算法,但三星和vivo依然是虹软算法爱好者。此外,很多厂商会用同一家,甚至同一套算法(像荣耀Magic3系列的多摄融合,和小米11 Ultra的长焦用的都是旷视的同代算法),也有过同时搭载几家算法的机型。
关注我们的微博@爱搞机
关注我们的微信公众号:爱搞机(playphone)
当然,也关注我们的哔哩哔哩账号:爱搞机