首页 > 代码库 > 华为平行双镜头解析

华为平行双镜头解析

手机不会评价,我打算说说最抓眼球的这个Binocular Stereo Vision的摄像头。先说一点作为一个Imaging sensor从业者对两个摄像头可以玩出多大的花样的简单理解。我最直观的感受就是这个相机的夜景拍摄质量会高出其他相机几个层次。要拍出一个好的夜景,其实就是要实现HDR,也就是大的Dynamic Range,在我们的真实的世界里,可见光的Dynamic Range大概是100dB,我们人眼可以探测到的Dynamic Range大概是最大90dB,但是我们cmos APS单次曝光能做到的大概是40-70dB。所为了能达到媲美人眼或者说真实的反映自然界,这里有很大的空间可以play。几乎所有的Imaging sensor的结构都和下图一样:
技术分享

我再举几个不同HDR的例子:

技术分享
我们明显的可以看到,120dB的照片成像质量是最好的,细节几何没有丢失。
在工程实践上,主要有这样几个办法实现HDR来提高夜景的拍摄质量:
1.单纯的提高单次曝光的ISO

Sensor的感光信号输出并不是直接用source follower直接读出的,信号会先被preamp放大,这里的放大倍数就是ISO了。ISO的作用只是使用OPAM的简单放大,这样的信号处理当然可以提高夜间低光照的输出信号幅度,但是这里面noise一样被放大,这样处理之后就会有很多我们所说的噪点。而且ISO的值是有上限的,比如说放大后的最大值如果超过了100dB的ISO就完全没有作用,反而会引入更多的噪点,降低拍摄质量。所以,使用ISO来提高夜景的拍摄质量是非常偷懒的一个办法,对于HDR几乎没有任何帮助,处理不好反而会降低画质。为了避免突兀的噪点,就不得不用涂抹算法来进行修正,这会再次丢失细节。
所以这个解决方案,最大的作用就是写出来忽悠消费者,典型的就是我们的情怀手机里面的夜景模式,就是通过提高ISO和增大快门来实现的。

2.改变Charge Well的大小。
这种solution是在硬件层面的解决方案,在我看来是最根本的解决方法,但是工程成本也是最大的。手机里面的imaging sensor全部都是4T的结构:


技术分享



我们的HDR几乎很大程度上取决于我们这里的charge well的大小,那么夜景模式下,我们可以人为的增大charge well:
技术分享

比如说上图的方案,就是人为的开启一个additional well。
用一个比喻的说法就是为了在夜间能够捕捉到更多的光子(雨水),我们就要用一个大的水桶(charge well)来收集,这个解决方案就是换个大水桶的方案,所以是硬件层面实现的解决方案,是最根本的解决方案,这也是单反和手机最大的区别,单反提供了更大面积的pixel。
但是这样的解决方案的成本是很大的:
1. 增大面积意味着芯片的面积会增大,那么价格必然上升。
2.因为FD的面积增大,那么PD的面积必然下降,fill factor(感光度)必然下降。
3.这个方案最主要的缺点是:会引入额外的KT/C的noise

这是一个实测的结果图:

技术分享

我们会看到,当我们开启另一个charge well的时候,会有很大的KT/C引入,SNR有巨大的下降。所以因为这几个原因,手机厂商没有一个会选择这个解决方案,这个方法最常见的用处是在航天领域的imaging sensor,比如说遥感卫星。

3.改变曝光时间进行多次曝光来进行后期合成。
这个方案是现在手机厂商的最主流解决方案。
工作原理如下图:

技术分享

技术分享







也就是说,我们用多次不同的曝光时间来多次拍摄一个物体,这样曝光时间短的可以捕捉高光部分,曝光时间长的可以捕捉暗光部分,然后用多张照片合成一个照片。
效果如下:
技术分享

iphone, sony,samsung, 华为,小米都采用了这样的解决方案,所以当你开启HDR模式,他们的拍照时间都会增长很多。这个方案的缺点就是:最重要的缺点就是对于快速移动的物体会出现会出现incorrectly interpolated的错误,也就是会画面模糊,这个原理很简单,那就是你要多次曝光拍摄,那么拍摄的必须是一个物体,但是如果物体移动太快,那么前后两次拍摄的是两个不同的画面,那么后期合成一定会出错。其次就是需要等待比较长的时间。其他的方案还有:change CG和CG no linear,这两个方案都很少用到,就不介绍了。
那么回到这个双摄像头的结构,我第一直觉就是,这是一个混合了2和3的解决方案。
首先,对于一个物体,他可以一次拍摄两张照片,那么多次曝光的解方案就是天生的属性了,而且不会因为物体快速移动受影响,这是一个革命性的变化,这属于光场相机的简化版。

而且,两个摄像头,那么意味着等效charge well增大了1-1.5倍,而且不存在开启时存在的KT/C noise。这里我猜测的受限点是imaging sensor的ADC和IO处的LVDS的限制,因为两个摄像头,那么输出的数据就是两倍,如何设计一个快速的的on chip的ADC或者bus级别的ADC就非常的重要,我认为这个工程难度非常的大,即便是现在ADI,Sony也做不出来。所以我很肯定,这个相机的夜景效果会拉开其他相机一个层次,如果没有,那说明华为的工程师对这个sensor的调教就很差(如果这样,能不能给他们投简历?)夜景好,这是我第一直觉。其二,Binocular Stereo Vision可以实现3D成像。Binocular Stereo Vision其实就模拟我们人类的眼睛,这也是我们人类和马眼睛成像的最大区别,我们追求了3D而马选择了广视角。



技术分享
这就是我们人眼的3D成像原理,两个摄像头配合适合的镜头是可以实现这样的功能的。
技术分享


那么这里面就有很多的play空间了,首先就是一个附属功能:实现快速对焦。这在之前HTC的M8上就出现了,M8的这个方案其实就是噱头,依然是被动对焦,还要用两个摄像头,在我看来,简直是蠢极了。。。真正smart的方案是用主动对焦+SPAD的方案实现TOF的3D,全球现在哪家在用这个方案呢?答:NASA的火星计划,不要问我为什么知道。Sony特有的相位对焦是一个sensor内嵌了focus pixel实现的,这个是很大的创新,但是华为的这个利用Binocular Stereo Vision的附属功能依然实现了快速对焦,不得不说比Sony来说有点小聪明的感觉。其次,两个摄像头增加了系统的reliability,比如说你摔坏了一个,还有一个可以工作啊!
华为这个是移植航天工业的结果到手机上,工程努力是很大的,首先,就是算法的实现,其次这两个摄像头要求是很高的,必须高度水平,最后,如何平衡工程造价也是很大的难度。
而华为说的3IE算法实现虚化等功能,我自己猜测还是使用了基于特征的匹配算法来实现的,而这样的算法对计算能力的要求是很大的,说明海思的麒麟925还是很厉害的。立体视觉是计算机视觉领域的一个重要课题,它的目的在于重构场景的三维几何信息,属于ISP的领域,我不太懂。
但是,我还是打算前瞻一下这个相机:
1.如果下一步可以进化为阵列相机,那么实现全信息的光场拍照不是不可能的,如果做出来,那就是天一样的革命了。
2.夜景模式完全可以开发出新算法,使得计算的复杂度大大降低,夜景拍摄体验上一个台阶。
3.多镜头,多镜组的结构为拍摄体验提供给了超越单反的花样玩法,成像水平也许不如单反,但是可玩性大大提高,拍出一个抽象派的莫奈风也不是不可以啊。
最后,我真心是觉得华为慢慢变成了我尊敬的企业。我毕业那年,总感觉华为是我们IT界的血汗工厂。但是,现在华为做出这样的成绩,在欧洲看到越来越多的朋友用华为,给我说华为不错,改变了made in china= low quality的image。我是佩服的,中国需要的就是这样踏实肯干的企业。

华为平行双镜头解析