摄像头模组的PDAF对焦
参考链接:摄像头模组 PDAF对焦(Phase Detection Auto Focus)
如有侵权请联系。
PDAF功能的实现用到shield pixel
的概念,包括right-half-shield
与left-half-shield
,最近各大厂家设计的芯片中也有top-half-shield
与bottom-half-shield
。起到模仿左右眼的功能,shield pixel都是成对出现,如下:
shield piexls
主要分布在芯片居中的范围内,不同厂家的组织方式不同,比如有的芯片以32*32的pixel array为一个block,shield pixel在这一个block的占比为1/64,也就是一个block中有16个shield pixel,亦即有8对shield pixel。
终端使用PDAF前需要模组厂进行校正,通常包括SPC(Shield Pixel Calibration)
和DCC(Defocus Conversion Coefficient)
。
- SPC是为了校正shield pixel,为了实现PDAF功能,shield pixel像素被遮挡了一半,这导致像素接收到的光信号比正常的像素要弱一些,为了达到正常的像素的水平,需要对此类型的像素增加额外的增益,称为SPC。
如下左图两条虚线分别表示
left shield pixel
和right shield pixel
,通过调整pixel的增益,使shield pixel像素值与其它正常的像素值一致。SPC校正时在均匀光源下,抓取图像后通过插值获得各个对应位置的增益,并把此增益写入OTP中,这部分OTP数据也成为SPC map,通常有两份map,
right-spc
和left-spc
。
如下是某个PDAF中SPC map的组织方式,将成像区域分为9 * 7个block,其中每个block包含512 * 512pixel。最左上角的第一个block中心点为(280,212)。这63个blocks的中心点被称为knots,生成63个插值后的数据,数据大概计算方式为 G P i x e l / P D p i x e l G_{Pixel}/PD_{pixel} GPixel/PDpixel
- DCC功能是生成DAC与Focus的系数关系,进而实现PDAF功能。实际是通过左右shield pixel之间的差异将被摄物映射到镜头移动距离中的某个位置,系统进行对焦时,需要将检测到的相位差(phase difference)转换为离焦率(Defocus value),这个转换过程应用到的表单数据称为DCC(Defocus conversion coefficient)。
DCC的测试计算方式包括:
- 在每个DAC位置记录当前的相位差;
- 完成对焦星辰过后取对焦DAC与获得的PD数据计算( P D / D A C PD/DAC PD/DAC);=;
- 生成的相近的比值记为k,DAC与PD组成的二维数据进行描线可以通过算法你和出逼近斜率为k的直线;
由于模组之间的差异,DCC需要每一颗模组都测量,由于shading等的问题,同一颗模组的四周与中心同样存在差异,不能用同一个系数进行转换,四周的系数会比中心的系数高一些;一般会把图片分为M * N个blocks,每个block通过上面的计算方式获得单独的K。后面计算离焦率和离焦系数与相位差之间按照如下换算: D e f o c u s v a l u e = P h a s e d i f f e r e n c e ∗ c o e f f i c i e n t Defocus value = Phase difference * coefficient Defocusvalue=Phasedifference∗coefficient。
PDAF检测过程:
- 获得被摄物体对焦位置的某一行或若干行的数据信息;
- 读取
right-half-shield
与left-half-shield
数列信息; - 使用
right-half-shield
与left-half-shield
生成的数列和1中获取的行信息进行卷积分计算(卷积分计算使原来行信息只携带对应卷积序列的信息); - 将卷积后的两个新数列做平滑微分插值等预处理,获得两个平滑且相对应唯一的数据;
- 将这俩数据的相位差传入系统中,应用PDAF库及DCC数据进行计算获得离焦率;
- 通过离焦率向马达下达对应DAC动作的指令并完成对焦;