MTK平台--PDAF 点亮介绍

PDAF点亮主要参考《MT6763_MT6757_PDAF_Driver_and_Buf_mgr_Porting_Guide.pdf》

1、什么是PDAF

    1.1 PDAF的原理

        在了解相位对焦PDAF,Phase Detection Auto Focus之前,在网上肯定会搜到其他对焦方式。比如对比度对焦(反差对焦)CDAF,Contrast Detection Auto Focus、激光对焦LDAF,Laser Detection Auto Focus、双核对焦等。

       下面整理三种对焦方式对比

    

对焦方式原理优点缺点
对比度对焦
CDAF
对焦的过程就是通过移动镜片来使对焦区域的图像达到最清晰的过程,所以对焦成功以后,直观的感受就是焦点的清晰度最高,而焦点以外的区域则表现为相对模糊状态成本低,精度高速度慢
相位对焦
PDAF
单反相机普遍采用相位对焦系统,相比于数码单反相机上的相位对焦,手机上的相位对焦则是直接将自动对焦传感器与像素传感器直接集成在一起,即从像素传感器上拿出左右相对的成对像素点,分别对场景中的物体进行进光量等信息的检测,通过比对左右两侧的相关值情况,便会迅速找出准确的对焦点,之后镜间马达便会一次性将镜片推动到相应位置完成对焦对焦速度极快,降低处理器计算负担弱光环境下容易对不上焦,成本较高
激光对焦

LDAF

后置摄像头旁边的红外激光传感器向被摄物体发射低功率激光,经过反射后被传感器接收,并计算出与被摄物体之间的距离成功率高弱光环境下,对焦一般,成本高。激光对焦在使用上还是一定限制

 

   下面左图展示了成像的现象,有前焦,对焦和后焦。推lens的方向和幅度,由当前的相位差和模组的PD calibration data来决定

    PDAF 通过对比L/R PD pixel构成的两幅图画,PD算法计算出相位差。

              根据相位差和模组 PD calibration data,估算出像距,从而移动lens快速对焦

 

    PD点分布长这样

     

  1.2 PDAD INI 文档 

          INI文档是sensor厂商给模组厂商提供做PD calibration时的配置文件,描述PD Sensor的输出信息和PD calibration 参数,其内容会被烧录到eeprom

         

           

  1.3  PD Type

     

   /alps/kernel-4.14/drivers/misc/mediatek/imgsensor/inc/kd_imgsensor_define.h

enum IMGSENSOR_PDAF_SUPPORT_TYPE_ENUM {
	PDAF_SUPPORT_NA = 0,
	PDAF_SUPPORT_RAW = 1,
	PDAF_SUPPORT_CAMSV = 2,
	PDAF_SUPPORT_CAMSV_LEGACY = 3,
	PDAF_SUPPORT_RAW_DUALPD = 4,
	PDAF_SUPPORT_CAMSV_DUALPD = 5,
	PDAF_SUPPORT_RAW_LEGACY = 6,
};

二、驱动相关

      具体配置还得看sensor spec 和MTK PDAF 点亮文档 

        vendor仓:

      

        kernel仓:

以下是一个简单的MATLAB示例代码,用于计算MTK PDAF相位差和像素偏移量: ```matlab % 读取10个不同lens position的raw图像 for i = 1:10 filename = sprintf('raw_%d', i); raw{i} = imread(filename); end % 设定PDAF区域位置和大小 pdaf_region = [100, 100, 50, 50]; % 计算每个raw图像的PDAF相位差和像素偏移量 for i = 1:9 % 提取PDAF区域的像素值 pdaf1 = raw{i}(pdaf_region(1):pdaf_region(1)+pdaf_region(3), pdaf_region(2):pdaf_region(2)+pdaf_region(4)); pdaf2 = raw{i+1}(pdaf_region(1):pdaf_region(1)+pdaf_region(3), pdaf_region(2):pdaf_region(2)+pdaf_region(4)); % 计算PDAF相位差 pdaf_phase_diff = angle(pdaf2) - angle(pdaf1); % 计算像素偏移量 [~, max_idx] = max(abs(pdaf_phase_diff(:))); [max_row, max_col] = ind2sub(size(pdaf_phase_diff), max_idx); pixel_offset = [max_row, max_col] - [pdaf_region(3)/2, pdaf_region(4)/2]; % 存储结果 pdaf_phase_diff_array(i) = pdaf_phase_diff(max_row, max_col); pixel_offset_array(i,:) = pixel_offset; end % 输出结果 disp(pdaf_phase_diff_array); disp(pixel_offset_array); ``` 在上述示例代码中,我们首先通过循环读取10个不同lens position的raw图像。然后,我们设定PDAF区域位置和大小,并使用这个区域提取两个相邻raw图像的PDAF像素值。我们通过计算这两个像素值的相位差来计算PDAF相位差,并找到相位差最大的像素位置来计算像素偏移量。最后,我们将所有结果存储到数组中,并输出结果。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值