首页 科普 文章详情
简单科普:计算摄影“算”的是什么?
方查理 2022-10-08 20:20

按下快门之后,手机在干什么?

手机摄影的硬件已经碰到天花板,等明年1英寸传感器满街跑之后,以后厂商的宣传重点可能会越来越偏向于“算法”和“计算摄影”。这里先立个flag,帮大家预习/温习一下“计算摄影”相关内容。

“计算摄影”,对于用户是个不明所以的黑箱,也是个很模糊的概念。从耳熟能详的HDR、夜景模式、美颜与特效,到“摇摇乐”像素位移、超分、多摄融合,就连以前的人像虚化、超广角边缘校正也是“计算摄影”的一部分。

简单科普:计算摄影“算”的是什么?

Google Pixel 7 ↑

Google有在Google AI Blog做技术分享的优良传统,所以本文以Google的视角,简单整理大家最关心的HDR和夜景模式等计算摄影算法的演变与特征,最后提几句苹果。

像打怪一样,克服问题、改进和利用各种技术的过程,时常会让人忍不住大喊“妙啊”,我们这就开波回顾历史。

HDR与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万张天空夜景图像“训练过”的神经网络,区分天地相交的天际线,然后对天空、陆地风景做针对性降噪或对比度处理,并完成热噪点去除(因传感器的长时间曝光而产生)。

 

Super Res Zoom超分辨率变焦

同样是在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)

当然,也关注我们的哔哩哔哩账号:爱搞机

分享到朋友圈 分享到微博
微信扫一扫,将页面分享到朋友圈
推荐使用当前手机浏览器内置分享功能
-->
相关文章