PDAF(相位对焦)

一、概念

PDAF 技术,英文全称是相位对焦(Phase Detection Auto Focus)

手机模组里面感应图像的部分为感光芯片,每个像素点都在感应图像。如果把间隔一段距离的对称的两个像素点,分别遮盖像素点的左半边和右半边,相当于人的左右两只眼睛,根据两只眼睛看到物体的角度不同,可以计算出对焦是否准确,这就是PDAF 的基本原理。

二、PDAF的原理及算法实现

PDAF 的“左右眼睛”在看同一个物体的时候,会产生一定的视觉差异,即相位差(PD值),通过调用 PD 值作为对焦的计算,从而实现完整的 PDAF 过程。它的原理是在感光元件上预留出一些遮蔽像素点,专门用来进行相位检测,通过像素之间的距离及其变化等来决定对焦的偏移值从而实现准确对焦。

可以从图中看到 AF 模块的工作原理。AF模块中起码有两个或者多个小型的图像传感器(CCD1/2),并且都是由一列像素构成一维 CCD,每个传感器上有一个小的透镜 (Micro lens),这些传感器是成对出现 ,每两个就组成了一个小型的自动对焦点 ,假设右下侧黑色图片中央的白色方框是对焦点。在没有对焦状态下 ,红光物体反射光线照射经过 lens 组右侧 ,绿光照射在光圈左侧 ,在传感器上的感应到的相位就无法匹配 ,但为了将相位表示成只有一个峰值的曲线 ,也就是一个黑色背景的白点 ,当移动镜头组 lens 的时候 ,光线的相位会靠近一直到重合 ,当重合时就认为对焦已经成功。

image-20230822155157155

对于每个焦点,有两个位于两侧的相位差传感器,两个单独的光束经过反射到达两个单独的传感器。当光线到达这两个传感器时,如果物体处于对焦状态,则来自镜头最两侧的光线会聚在每个传感器的中心。两个传感器上都会有相同的图像,表明该物体确实处于完美对焦状态。如果物体没有聚焦,光线将不再会聚,并且会照射到传感器的不同侧面

Phase-Detection-Autofocus

图 1 至 4 表示镜头聚焦的情况分别为: (1) 太近,(2) 正确,(3) 太远,(4) 太远。从图中可以看出,两个曲线之间的相位差不仅可以用来确定在焦平面的哪个方向上,还可以用来确定改变焦点的程度,以实现最佳聚焦。但有一点需要注意,这只是检测传感器,实际上最终移动对焦的是镜头而不是传感器。

目前比较流行的是片上相差自动对焦(on chip phase detection autofocus),在生产sensor的时候,把某些用于相位检测像素遮住左边一半或者右边一半,如下图:

focus_pixel_array

遮蔽像素点由两个像素成对组成,两个像素通过微透镜各自成像。对焦系统根据判断信号波峰的位置可判断出镜头应该往前还是往后偏移,从而迅速准确合焦。

上图只是示意图,各个厂商的半掩模的工艺各有不同,但是基本的原理都是让图像形成左右两幅类似人眼的不同光学通路的图像。这样左右侧的相位检测像素就会产生这样的图像:

Phase diff in focus pixels

屏蔽像素的能量值是以列为单位计算。分别提取每列的 Left PD Pixel 的信号值,和Right PD Pixel 的信号值,并描成对应的曲线。提取 Left PD 曲线和 Right PD 曲线的峰值,两者之间的差异值为相位差,相位差与 L/R 位移量有一定的转换公式。

S = AT/(A+D) = A(I+L)/(A+D)

其中:

S:镜头需要移动的距离;

A:Effective Aperture;

D:PD 值;

L:当前镜头与远焦镜头位置的差异;

F:焦距; m:镜头移动范围。

PD 值有正有负,当 PD 值接近于 0 时,说明该图像对焦为清晰点。

三、分类

目前 PDAF 技术大致可以分为shield pixel 、2PD和1x2PD。

img

1.shield pixel

屏蔽掉像素一般的感光区域(黑色部分),只获得一半信号。需要另外的像素屏蔽掉另一半信号,得到完整的相位差信息。SP越多,对焦越快,但信号损失越严重,目前SP密度控制在1%~3%。

2.2X1 PD

2X1 PD是 PD 对焦中极为重要的一种,其推出时间虽然比 2PD 更晚,但是市场接受度却更高,得益于它在暗态环境下对焦能力的显著提升,而价格却更加亲民。

2X1 PD使用一个 MICRO LENS 罩住两个 PIXEL,PIXEL中间没有遮蔽,从这对 PIXEL 的左右两个PIXEL 获取 PD 信号,由于中间没有遮蔽,PD 感光能力更强,也更便于暗态对焦。二合一的PD越多,对焦越快,但信号损失越严重,目前密度也控制在1%~3%。

3.2PD

2PD 技术把传统芯片的每个 Pixel 一分为2,在同一个像素内即可完成相位信息捕获。可以理解为使每个像素点都包含左右眼睛。2PD 的特点是 PD PIXEL 在芯片上的占比为100%,而常规 PDAF 仅有 2-3%。但由于将光电二极管一分为二,井口变小,FWC急剧衰减,dynamic range衰减严重,拍照非常容易过曝。

2PD 助力下的对焦速度从 350ms 提升至 200ms,并且在黑暗环境中 (20Lux 以下 )依旧能进行相位对焦。2PD 价格相对更贵,其不仅对芯片厂的设计能力要求高,对半导体制程工艺的要求很高。

四、PDAF的标定 (Calibration)

如果这些被 PD 像素所取代的部分 G pixel 进行了半遮光结构设计 ,光能信号比正常的 G pixel 要弱一些 ,直接成像必然有异常 ,PD 位置点必须根据其周围像素点的 pixel 的采样值 ,来做算法补偿 ,各种 sensor 的补偿方式就由ISP 厂商决定。所以使用 PDAF 功能是需要进行模组校正 ,包括 SPC(shield pixel calibration) 与DCC(defocus conversion coefficient)。

SPC(shield pixel calibration):为了实现 PDAF 功能,芯片表面部分 Gpixel 进行了遮光结构设计,光能信号比正常的 G pixel 要弱一些。因此,为了达到正常 G pixel 的能效水平,需要对此类型的 G pixel 增加额外的系数增益,此动作称之为 SPC。

DCC(Defocus Conversion Coefficient): 通过左右shield pixel之间的差异来将被摄物映射到镜头移动距离中的某个位置。系统在进行对焦的时候,需要将检测到的相位差 (phase difference) 转换为离焦率(Defocus Value),即生成 DAC 与对焦 Focus 的系数对应关系 ,用来快速定位需要移动的位置 ,实现 PDAF 快速校准的功能

参考文献:

反差检测自动对焦(CDAF)与相位检测自动对焦(PDAF)原理pdaf相位对焦工作原理Mr.Idleman的博客-CSDN博客

《PDAF 对焦技术原理解析及生产应用》 蔡赞赞

《精度高速度快厂商爱——详解PDAF相位对焦》 沃尔顿

《手机摄像头自动对焦技术》 徐仁东

  • 25
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于相位差的对焦算法是另一种常用的自动对焦算法。该算法通过对比不同位置的两幅图像的相位差来确定对焦位置。以下是Python实现代码: ```python import cv2 import numpy as np def phase_correlation(image1, image2): fft1 = np.fft.fft2(image1) fft2 = np.fft.fft2(image2) cross_power_spectrum = fft1 * fft2.conj() cross_power_spectrum /= np.abs(cross_power_spectrum) cross_correlation = np.fft.ifft2(cross_power_spectrum) shift = np.unravel_index(np.argmax(np.abs(cross_correlation)), cross_correlation.shape) return shift cap = cv2.VideoCapture(0) cap.set(cv2.CAP_PROP_AUTOFOCUS, 0) # 关闭自动对焦 cap.set(cv2.CAP_PROP_FOCUS, 0) # 将对焦距离调整到最小值 while True: ret, frame = cap.read() if not ret: break gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) cv2.putText(frame, "Focusing...", (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2) cv2.imshow("frame", frame) key = cv2.waitKey(1) & 0xFF if key == ord("q"): break if cv2.waitKey(1) & 0xFF == ord(' '): reference = gray.copy() cv2.putText(frame, "Reference", (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2) elif 'reference' in globals(): shift = phase_correlation(reference, gray) shifted = np.roll(gray, shift[0], axis=0) shifted = np.roll(shifted, shift[1], axis=1) cv2.putText(frame, "Shift: ({}, {})".format(shift[1], shift[0]), (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2) cv2.imshow("shifted", shifted) else: cv2.putText(frame, "Press space to set reference image", (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2) cap.release() cv2.destroyAllWindows() ``` 该代码也会打开摄像头,并关闭自动对焦功能。然后将对焦距离调整到最小值,即最近对焦距离。在实时视频流中,用户按下空格键可以设置参考图像。设置参考图像后,程序会计算当前图像与参考图像之间的相位差,并将其在画面中显示。你可以通过微调对焦距离,使相位差最小,从而完成对焦
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值