手机拍照全靠猜 手机拍照时

时间拉回到 2021 年 12 月,少数派团队在大理团建的那一周,几乎每天晚上都会有人跑上露台,尝试用各种各样的设备记录洱海上方那片澄澈的星空 。
在这当中,几台 Google Pixel 设备的表现最为亮眼 。以往我们总在感叹计算摄影的魅力,但只有用白天刷微博、刷抖音的那台手机捕捉到璀璨星河的那一刻,才真正明白算法的精妙与魅力 。

手机拍照全靠猜 手机拍照时

文章插图
惊叹之余,团队里一直主力使用 Google Pixel 的几位编辑也跟我聊到过一些有意思的细节:在计算摄影这件事情上,即便是一直以来被业界奉为圭臬的 Google Pixel,其实也有一些至今难以克服的短板 。这当中最具代表性问题就包括偏色,这是一个从 Google Pixel 4 开始就有提及、但一直到最近的 Google Pixel 6 都没能得到有效解决的问题 。
手机拍照全靠猜 手机拍照时

文章插图
夜视算法加持下(右)画面色彩相比肉眼观感(左)存在明显偏色 | 图:Clyde 使用 Google Pixel 4 拍摄
即便是开头提到的那些星空样张也一样——对 Google 这样的计算摄影老牌劲旅来说,色彩还原也是个难以完全靠算法来解决的难题 。为了让算出来的星空更加符合观感审美,在 Google 相册中的图片修饰功能中,Google 甚至还为夜视模式的照片准备了一套「天文滤镜」用于后期色彩修饰 。
那色彩还原这件事为什么这么难?
问题的根源在于「猜」如果往希腊语词根的方向去理解,照片的英文是 Photograph 按字面意思可以被理解为「用光所作的画」 。在摄影这件事情上,最初我们用来「作画」的载体是胶片,记录在底片上的光线信息需要经过化学冲洗才能显影;以光电二极管为核心的 CCD 与 CMOS 出现后,效率更高的光电信号转换则成为了主流 。
但无论是 CCD 还是智能手机中更常见的 CMOS,受光电二极管的工作原理所限,它们都只能根据光照强度记录不同的亮度信息 。换句话说,通过传感器所接收到的光电信号,仅仅只能还原出一张黑白照片 。
为了让传感器捕捉到有色彩的光照信息,色彩滤波阵列(CFA)出现了 。
手机拍照全靠猜 手机拍照时

文章插图
常见的色彩滤波阵列:拜尔阵列 | 图:维基百科
你可以将 CFA 理解为光线在到达传感器之前的一层「滤镜」,以应用最为广泛的拜尔阵列滤色镜为例,拜尔阵列以 2 个绿色像素、1 个红色像素和 1 个蓝色像素为单元,通过滤镜的光线除了能够在传感器上留下强度信息外,还能同时保留对应的色彩信息 。值得注意的是,因为每个像素只过滤并记录红、绿、蓝三种颜色中的一种,这些从单个像素获取的信息其实也不能完整反映画面中不同颜色的组成方式 。
手机拍照全靠猜 手机拍照时

文章插图
光线通过阵列后留下不同色彩信息 | 图:维基百科
换句话说,画面细节的丢失从我们按下手机快门键的那一刻就已经开始了 。为了得到一张色彩完整的图像,通过拜尔阵列获取到的色彩信息后续还会依靠去马赛克算法进行插值、重建 。如果像下图这样采用邻近像素平均值的算法,根据已采集像素对周边缺失的像素色彩信息进行推测,完成整个去马赛克过程后,重建得到的画面甚至会占据整个画面的 2/3 。
手机拍照全靠猜 手机拍照时

文章插图
将拜尔阵列得到的色彩信息还原的过程,也是细节丢失的过程 | 图:Google
因为「猜」的成分不可避免,最终得到的图像一般而言是无法准确还原原始拍摄场景的 。即便在邻近像素平均值算法的基础之上,后续也衍生出了许多更为复杂的去马赛克算法,但「通过 CFA 获取到的色彩信息有限」这个大前提始终摆在这里 。
另一方面,尽管近年很多厂商都在尝试其它的 CFA 排列方式,比如华为的 RYYB、OPPO 在 2014 年基于 QuadBayer 阵列的 RGBW,这些排列方式相比传统的拜尔阵列更多地也是在提高传感器进光量,符合前几年手机厂商在夜景拍摄这件事情上「血腥厮杀」的目标,但从实际的情况来看,纯粹靠算法猜,对解决色彩还原问题这件事并没有多大帮助 。
以 Google Pixel 为鉴明确「因为照片都是猜的所以色彩还原很难」这个基本事实后,我们再回到文章开头提到的手机计算摄影巨擘 Google Pixel 。如果要说 Google Pixel 诞生后这 6 年时间里,为手机行业计算摄影发展留下的、最为宝贵的经验是什么,个人认为有两点:利用好一切可用算法资源的变通性,以及垂直整合硬件的能力 。