5

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

 1 year ago
source link: https://www.igao7.com/news/202210/2jTylhfTFKUdmQGz.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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

手机摄影的硬件已经碰到天花板,等明年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)

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK