Google Pixel4 相机解密(1)夜景

大话成像 52RD 今天

  文章有点标题党,但是Google 无疑是当今公布了手机相机算法技术最多的厂家,从Google 的Paper 中我们也能大致了解当前计算摄影学最热门的技术细节。以下是2019年 Google Marc Levoy 团队的三篇个人认为比较重要的文章:
  
  1.Handheld Mobile Photography in Very Low Light
  
  2.Learning Single Camera Depth Estimation using Dual-Pixels
  
  3.Handheld Multi-Frame Super-Resolution
  
  还有两篇比较实用的文章:
  
  4.Distortion-Free Wide-Angle Portraits on Camera Phones
  
  5.STEADIFACE: REAL-TIME FACE-CENTRIC STABILIZATION ON MOBILE PHONES
  
  本片先介绍文章1,剩余的会继续介绍。文章1主要解释了“超级夜景”的原理,也就是以前Google HDR+(图1)的升级版,其中HDR+在公众号往期文章“Google Pixel3 拍照为什么那么牛?”中介绍过

                    图1
  
  先上效果,图2 左边是Google 2016年HDR+ 的效果,右图是最新的效果。

               图2
  
  如果假设我们就是Google 的工程师,让我们来改进2016的文章我们应该怎么来改进呢?首先看下现在的问题缺陷:
  
  问题1:需要进一步提高信噪比,才能提高图像亮度等等,不然就会增强噪声,如图3。
  
  问题2:进一步提升夜间白平衡的准确度,且白平衡和对比度是需要尽量和人眼的感知一致,保证真实性,比如图4。

  
  方案1.1:如何尽可能提升曝光时间?
  
  其中问题1 的改善,从原理上来讲无所谓就是提高sensor的整体曝光量或者改善算法效果,但是想在手机上提高曝光时间而不导致人像模糊只有一种办法:
  
  多帧合成时尽可能提高静态帧(不运动帧)的曝光时间
  
  但是此时问题又来了,该如何判断当前帧是不怎么运动的呢,Google 给了如下方法?

  
  简单概括为:
  
  l  使用MPI-Sintel 光流求得相对运行情况 ,图6
  
  l  然后使用GMM 模型来预测下一帧的运动情况
  
  l  读取陀螺仪信息数据

              图6
  
  方案1.2:如何提升算法效果?
  
  该类提升是根据之前的问题进行算法的修改,核心还是判断那块运动了哪块没动,没动的尽量提升temper denoising;动了的地方提升spatially denoising,但是也稍微平衡一下temper的力度:
  
  n  提高匹配的准确度:如低照度下,增加block matching 时的block size等(肯定还用了更多方法)
  
  n  修改多帧融合的权重计算方法等
  
  方案2:
 

                     图7
  
  因为人眼有如图7中的各种非线性毛病,从亮度和色彩上去改善为:
  
  Ø  1. 使用人眼感觉舒服的图像数据去训练AWB (FFCC)算法(修改了AWB 的 Error metrics)。
  
  Ø  2. 根据亮度分布的tone mapping 算法
  
  原则为:
  
  ü  在保证噪声不提升的情况下,尽可能提升gain
  
  ü  保证全局对比度,即暗区不要增亮太多比如图8 的(b)就不好
  
  ü  抑制高亮区域不要过曝
  
  ü  根据亮度调整饱和度
  
  ü  有luma shading也挺好看

  
  1小时通篇文章看下来:思维导图为下: