手机中的多摄融合

前几天,荣耀发布了Magic 3系列手机,通过多主摄融合的计算摄影技术,带来全焦段的高清体验。

根据荣耀官方的数据,在彩色黑白融合时,进光量最大提升13%, 清晰度最大提升18%。在主摄和广角镜头融合时,中心清晰度最大提升80%, 在主摄和长焦镜头融合时,中心清晰度最大提升180%!

67e53d77b7004f46b622d00d0e32e81f.png

我想,这些惊人的数据一定让你感到好奇——这背后是什么样的计算摄影技术在支撑呢?今天我这篇文章,就来谈一谈“多摄融合”技术,这是除双摄虚化、光学变焦之外,另外一个我很感兴趣的领域。

在真正讲技术前,请允许我回顾一下历史。

如果我调研的没错,最早在手机上提出异种摄像头融合提升图像质量的,是以色列公司Core Photonics,这家公司在2014年时在业界第一次展示了3种不同的通过手机双摄融合提升最终图像质量的系统,这包括了能提供2倍变焦能力的HummingBird系统,能进行RGB+MONO融合的Night Owl系统,以及能进行3倍变焦的"Falcon"系统和能进行4倍变焦的"HawkEye"系统。

ad111da3704203eb92e0a083846ba991.png

我对上面的系统印象深刻,是因为我当时所在的公司协助Core Photonics在几乎没有高通公司支持的情况下在工程手机上点亮了这些模组,并成功运行了Core Photonics的融合算法。

在Core Photonics的官网上,他们展示了很多和竞品的对比照片,我们来欣赏一下。由于都是2014年左右发布的系统,因此官网上展示的也是和早几年的手机的对比,但并不影响我们的直观感受:双摄融合后的图像清晰度确实远高于普通摄像头的结果!

e31107b8b8f929f96af86500886fc4b5.png cde57cd1509cf904fe190a5819534a29.png

虽然早期的双摄手机非常简陋,但中国手机企业确实在那时候就已经不仅仅是在山寨国外的产品了,对新技术非常敏感,非常热衷。

下面是一个2014年的工程样机,你可以清晰的看见它的双摄像头模组,其中包括一个长焦镜头和广角镜头

a98149f3bbca11a018a8ef16437081d4.png

从2014年到现在,整个手机工业界都经历了天翻地覆的发展,不管是摄像头模组,还是手机芯片的算力,还是计算摄影的算法,都跟当年完全不一样了,最终效果也提高了很多。

在荣耀新发布的Magic 3系列手机之前,已经有不少手机厂商发布了在特定摄像头之间进行融合提升图像质量的产品,比如:

26de9171ce8087197c927ef73d9a369a.png

现在让我们进入到技术环节

来看看一个广角镜头和一个长焦镜头融合时,会发生什么。先来看看原图。你可以明显看到,两个摄像头拍摄的画面在尺度上有明显的区别。

473f6bfdbe78f0a7a61a4ea26fa0d6a0.png

而且,因为镜头、传感器等各方面的因素,长焦相机的图像质量确实高于广角相机的图像质量,我们看看细节图对比一眼可知(左:长焦相机, 右:广角相机)

76b165cf4394e3916d0dbf0aff396e25.png 6e25d690d5708612ffea492ac6aa9893.png

你还可以观察到,它们不仅仅在尺度上有区别,由于两个摄像头的空间位置不同,所以实际上两个图像之间还有平移和旋转,这一点在我上一篇文章中已有描述:

7fc5225e54126913245b58bdaf62a6d1.png

事实上,现在的手机模组组装形态多种多样,这就使得不同摄像头拍摄的图像之间空间和尺度差异也是多种多样的

065f7e64795d436e1bf2d735ab93dcf1.png

fe734e1693b92c503f89fd952d0aa434.png

因此,要把不同摄像头拍摄的图像进行融合,就需要分成如下的步骤了:

5cc2f9d7d7750b2f28d6772edff6dfe8.png

1. 尺度对齐

如果我们提前获取到两个摄像头的关键参数,包括焦距、像素尺寸、FOV等信息,那么是能够直接计算出图像的尺度差异的。

即便是不知道上述参数,要对齐图像的尺度,也是很容易的一件事情:只需要先对图像做稀疏特征点的对齐,然后对其中一个图像做单应变换即可。如下图所示,两个图像的许多特征点被找到并匹配上,从而可以求取出它们之间的变换矩阵。右图中,红框部分的图像经过裁剪和放大,即可和左图保持尺度对齐了,当然也可以将左图缩小到右图红框的尺寸,具体是怎么做,实际上在产品执行中不同场景下会有不同的考量。

61a5e6a575c646a69412f2bb6ca442f0.png

总之,经过这些操作,我们就得到了一对图,你如果仔细观察的话,会发现虽然这对图片里面物体的尺寸是一致的,但很明显有旋转和平移的关系,所以接下来还需要对它们进行像素对齐。

f465d10268e2318ba7ed0fc08a9635f5.png

80cd0958a2eb0cae1ad516e4eb77cd41.gif

2. 像素对齐

要想把这两个在空间上有旋转和平移的图像进行像素级别的对齐,至少有两个流派的方法。

流派1遵循严谨的多视角几何的方法,认为拍摄同一个目标时,图像和空间物体之间满足对极几何约束的关系,我在文章双摄虚化中也提到了这一点。这样,如果将图像转换为只有视差关系,没有旋转关系,接下来就可以通过求取每个像素点的视差,并在视差方向进行图像的扭曲变换来达到对齐图像的目的了。

99713217fc84d5601833ebdfa7c23795.png

然而,这个方案的缺点是必须对两个相机进行标定,并以此对两个图像进行极线校正,然后是视差计算。相对来说,流程比较复杂和冗长,而且标定势必会影响生产效率。在前面讲的Core Photonics公司的官网上有其方案的总体流程图,可以看出他们就是采用了这个方法。

8488e272e1245608dcbb1d01839db965.png
Core Photonics官网展示融合流程图

这里面,最重要的一环还是立体匹配,关于立体匹配求取视差图,我在文章双摄虚化中已经做过阐述。我所在团队现在已经可以在极端复杂的场景下产生高精度的视差图了,但因为上面的缺点,我们还是未采用此类方法。

流派2则是观察到手机上两个摄像头之间的空间位置差异不会太大,因此图像之间的运动也不会很大。那么就比较适合计算它们之间的光流,并用光流信息来对齐每个像素。光流算法回答一个问题:左图中每个像素点Pl在右图的对应点Pr的坐标是什么?或者说Pl经过什么方向和大小的运动,才能和右图中的对应像素Pr对齐。

57697a4e06f9a010bcc67014b58a24c6.png

立体匹配是在一维上搜素匹配点,已经很困难了。而光流则是在二维上搜索匹配点,就更加困难了。它本质上是在最小化下面这个代价,其中等式左边是两个图像对应像素的亮度、颜色差异的统计值。

e96abbaff301a9553ab9cd4efd09d7c4.png

这实际上是一个欠定问题,传统上求取光流场会用到局部的平滑性,或者通过加入某种正则项后进行全局求解,还有些方法是通过马尔科夫随机场将某些区域的光流信息逐渐的传播到其他区域。总之,困扰立体匹配精度的很多问题,一样会困扰光流算法。而由于光流算法在二维上进行搜索,还需要考虑更多的问题,例如计算量,以及因为某些像素的运动过大导致的匹配困难的问题。

008eaf5b09579662b1b8286e89ebdb75.png

当然,正如我在上一篇文章中所讲,我们已经采用了深度学习来完成光流场的计算,效果也很不错。这里展示一个和OpenCV自带的DISFlow算法的效果对比,先看输入,你能明显看到两张图的不同(注意观察红发的姑娘)

3a96f90bda9a3b06c8469063e41831e8.png

再看看输出结果对比,这里展示的是伪彩色的光流幅值,你能明显看出我们算法的优势:

37bba2c0a99390af8ecebe2fa35fc2a7.png

总之,当计算了光流后,就可以很容易的对图像做变换,从而对齐像素。下面动图展示了对齐后的结果局部图。

00fc82932df45e2abb53b38602e7aec9.gif

3. 融合策略和图像图像融合

当对齐了图像后,就可以对图像进行融合了。在文章11. 图像合成与图像融合中,我介绍了各种各样图像融合的算法。传统上表现的比较好的是金字塔融合:

f52f2ee08b94d26d5fd6ea2cbeb2249b.png

但实际上,有如下一些原因,导致简单的融合算法并不能完全解决真实问题:

  • 经过光流变换后的图像,可能会产生局部的扭曲,尤其是在视差边缘:

6a227ebbb8ea69e06ddad10d1ca6c67e.png ccd46b77e3f692d1a752eb09e42f3088.png
  • 某些时候,长焦距的图像质量并非在每一个局部区域都优于短焦距图像

  • 简单的融合,会导致融合区域和非融合区域产生明显的突变。

所以这里面有很多复杂的技术问题需要解决。目前我们用一个融合策略模块比较好的处理了这些问题,能得到比较自然的基本没有明显错误的融合结果。下面是这个模块给出的融合权重示意图,可以看到图像的不同区域权重是明显不同的

ca05b21a3f82088463575b54e19a7e9d.png

最后展示几个场景的融合结果和融合前的对比:

全图对比:

dd183a10547fde6148967da6f847e000.png

局部细节:

82daad2b331f4d30fcb8dc4303564e09.png d9aee22ad06ba0deb2dd73df8c9fa73c.png 10308929b68af395a7e43a662abb4f39.png

全图对比:

3bf40fc49f8e0ce2baa77f6f611233c7.png

局部细节:

5a2996ecffe3fa63b20c664537fe7902.png

617544510905ee81e703c4f4e29c8565.png

目前这么一套多摄融合算法,已经能够在各种复杂的摄像头模组组合情况下产生优异的结果了。这既包括了前面说的不同焦距摄像头之间的组合,也包括了黑白、彩色摄像头的组合。相比彩色摄像头之间的组合,黑白+彩色会要求更高一些。因为人眼对颜色是非常敏感的,些许的问题也会被人眼捕捉到,所以真实发布的产品凝聚了许多工程师的心血。这里再展示一组在实验室拍摄的图像,来说明黑白彩色相机的融合。

输入图:

ec7cf08041980832f4913f72a63cdf74.png

对比下细节,可以看出黑白图像清晰很多,彩色图像在细节处已经产生了混叠

701c46410fce043007c52d6661466d33.png

把黑白图的细节叠加到彩色图上,得到输出图(左:输入彩色图,右:输出彩色图)

9a38256a6b449ff67b818d3ab339d528.png

细节部分(左:输入彩色图,右:输出彩色图):

16328b99dfece8935da160521a458897.png d5e4846b09595c79d7ded3000aae857a.png

总结一下上面所说的流程:

ff71b53cfb2a80fe6acaf99b86b00a4a.png

其中,像素级别的对齐,以及图像的融合,是整个算法成功的关键。在这个过程中会遇到各种各样的问题,例如:

  1. 如何尽可能在有限的算力需求内进行尽可能准确的融合

  2. 如何处理融合区域和非融合区域的突变

  3. 如何判断哪些像素需要融合

  4. 在融合图像时两个输入图像的权重各自为多少

  5. 如何利用底层系统硬件支持,做到高效运算

  6. 如何和相机系统的其他功能紧密配合

等等,这些问题的解决需要工程师付出大量的时间和精力。

此时此刻,我的同事刚从某客户的研发中心返回不久,我们在此之前一直为了处理好多摄图像的融合问题而废寝忘食,每天加班到很晚。我不得不再次重复相同的话:大家在手机发布会上看到的惊艳一刻,或者拿着心爱的手机拍出满意的照片,这背后都有无数工程师的辛苦付出。而当计算摄影技术加持的多摄融合能够得到大家的认可时,工程师们也是最开心的!

这篇写作过程中,获得了好些同事的帮助,在此表示感谢。再次感谢美女模特素颜出镜! 文章同步发表在我的微信公众号和知乎专栏“计算摄影学”,欢迎扫码关注。

本文参考资料

  • 正文第一幅图来自荣耀官方发布会介绍

  • Core Photonics相关信息来自Core Photonics官网

  • 文章11. 图像合成与图像融合中,我介绍了各种各样图像融合的算法

d02875498fc700a840baef83d8a40706.png

推荐阅读:

ISP图像处理流程介绍

Camera CMOS工作原理

高通Camera数字成像系统简介

高通CamX架构

高通CamX关键流程

高通CamX术语全称

一篇文章带你了解Android 最新Camera框架

深圳上班,

生活简简单单,

14年开始从事Android Camera相关软件开发工作,

做过车载、手机、执法记录仪......

公众号记录生活和工作的点滴,

点击关注“小驰笔记”,期待和你相遇~

7d43e359248355804c5fb9d597e4a449.png

 觉得不错,点个赞呗~b81ece975e5bc26b742e1a76a713bbc0.png 

posted @ 2021-10-29 08:00  小驰行动派  阅读(27)  评论(0编辑  收藏  举报  来源