图像算法---自动对焦AF

2024-06-07 02:52
文章标签 算法 图像 自动 af 对焦

本文主要是介绍图像算法---自动对焦AF,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一,CDAF反差对焦原理

CDAF,全称Contrast Detection Auto Focus,即反差式对焦或对比度检测自动对焦,是一种广泛应用于入门级数码相机和相机模块化智能手机上的自动对焦技术。以下是关于CDAF反差对焦的详细介绍:
工作原理

1,对比度检测:CDAF通过计算成像中相邻像素之间的对比度来确定焦点位置。具体来说,AF算法从图像信号处理器(ISP)获取统计信息FV(Focus Value),并计算出镜头下一次要移动的距离和方向。

2, 迭代过程:CDAF是一个反复迭代逐渐收敛的过程,类似于手动调焦的过程,即模糊-清晰-模糊,然后逐渐平衡到一个最清晰的位置。这一过程中,系统首先计算反差度,然后根据计算结果移动镜头、比较反差度,直到找到反差度最大的位置。

特点

1,广泛适用性:CDAF对各种类型的镜头和成像情况都有较好的适应性,是目前普及率最高、使用最广泛的自动对焦技术之一。
2,成本相对较低:由于其原理相对简单且易于实现,CDAF在成本上具有优势,使得它在入门级数码相机和智能手机等设备上得到了广泛应用。
3,光线和对比度敏感性:然而,CDAF对光线和对比度的敏感度较高。在低光环境下,由于图像对比度降低,对焦速度可能会受到影响,变得较慢。

聚焦过程

1,聚焦点的选择:CDAF的聚焦点是算法任意指定的,并不对应sensor上的一些特别物理构造,因此没有数量上的限制。这使得系统可以根据图像的特征和需要灵活选择聚焦点。
2,近端和远端遍历:在聚焦过程中,CDAF算法会遍历完近端(Near End)和远端(Far End),即镜头的整个可对焦范围,以找到最佳的焦点位置。

在这里插入图片描述右上图中的白色方框代表对焦点,此处反射出的红色光线在经过镜头,到达传感器前就汇聚在一点,随后又散开,此时图像的对比度是很低的。

将这个对焦点与相邻像素的对比度作分析得出右下角的曲线,失焦状态下对比度低,在聚焦过程中,曲线变得逐渐变得倾斜,但是不能判断什么时候是最高点,只有经过了对焦点后曲线下降再往回移动,反复移动后可以得到一个局部梯度最大值,就认为是对焦成功。

优点:光学设计简单。

缺点:
a. 速度较慢,在出现失焦图像时,机器无法判断该移动多少,甚至往哪个方向移动镜头才能聚焦,甚至到了峰值也不知道,必须移动过了以后再往回移动,来回几次后才能找到对焦点;
b. 在物体对比度较低时会对焦失败,比如雪景,无云的蓝天以及各种纯色的图像。

对比度:
对比度对视觉效果的影响非常关键,一般来说对比度越大,图像越清晰醒目,色彩也越鲜明艳丽;而对比度小,则会让整个画面都灰蒙蒙的。
在这里插入图片描述
二,爬山算法原理

自动对焦爬山算法原理可以归纳为以下几个关键步骤:

1,初始化:
爬山算法从一个随机或预设的初始位置开始,这个位置代表了镜头的初始焦距。

2,清晰度评价:
算法首先在当前焦距下捕获一帧图像,并计算其清晰度评价值(Focus Value)。这个评价值通常基于图像的对比度、边缘清晰度等特征来计算。

3, 搜索方向确定:
算法然后以一个预定的步长沿某一方向(通常是向清晰度更高的方向)移动镜头,并捕获另一帧图像计算其清晰度评价值。
通过比较两帧图像的清晰度评价值,算法确定下一步的移动方向。如果新的评价值更高,说明移动方向正确,继续沿该方向移动;否则,反转移动方向。

4,步长调整:
随着镜头逐渐接近最佳焦距(即清晰度评价值的峰值点),算法会逐步减小步长,以提高对焦精度。

5,循环迭代:
算法重复以上步骤(清晰度评价、搜索方向确定、步长调整),直到满足聚焦精度要求或达到预设的最大迭代次数。

6,优化与改进:
传统的爬山搜索算法分为“粗搜索”和“细搜索”两个步骤。粗搜索采用较大步长快速搜索整个对焦区间内的清晰度评价值峰值;细搜索则是在找到峰值后,采用较小步长在峰值附近进行更精确的搜索。
爬山算法在实际应用中可能存在一些问题,如耗时较长、容易陷入局部最大值和峰值点附近震荡等。为了解决这些问题,研究者们提出了各种优化和改进方法,如采用拟合曲线的方式预测最佳峰值点,以减少搜索时间和提高对焦精度。

总结:
自动对焦爬山算法是一种通过迭代搜索方式实现自动对焦的算法。它基于图像的清晰度评价值来确定镜头的移动方向和步长,通过不断迭代逐渐逼近最佳焦距。虽然爬山算法在自动对焦领域得到了广泛应用,但仍存在一些挑战和限制,需要进一步的研究和改进来提高其性能和适用性。

三,PDAF相位对焦原理

PDAF相位对焦原理可以清晰地分为以下几个步骤进行解释:

1,像素布局与相位差检测:
PDAF技术是在成像传感器的感光元件上预留出一些特殊的遮蔽像素点,这些像素点被专门设计用于相位检测。
遮蔽像素点的设计类似于人类的双眼,它们分别遮盖像素点的左半边和右半边,从而模拟双眼看到物体的角度差异。
这些特殊的像素对被组织成一对一的小区域,每对都包含一个用于对焦的普通像素和一个用于相位差检测的像素。

2,相位差计算:
当光线通过镜头折射后,会在成像传感器上形成干涉图案。这些干涉图案的相位差(PD值)可以用来计算焦点的位置。
通过比较每对像素中的光强差异,系统可以计算出相位差。相位差的大小反映了焦点与当前位置的距离:相位差越大,焦点越远离当前位置;相位差越小,焦点越接近当前位置。

3,对焦位置确定:
利用计算出的相位差信息,系统可以确定当前镜头的对焦位置是否准确。
如果焦点位置不准确,系统会根据相位差的大小和方向,调整镜头的位置,使其向正确的方向移动。

4,算法优化:
相位差的计算和对焦位置的确定通常基于一些数学模型和算法,如互相关方法或锐度检测方法。
这些算法可以帮助系统更准确地计算相位差,并更快速地确定对焦位置。

5, 对焦调整:
一旦系统确定了对焦位置的不准确性及其调整方向,就会控制相机镜头进行微调。
微调的过程会不断重复,直到系统确定镜头已经移动到正确的对焦位置。

在这里插入图片描述
紫色光线代表经过上半部分透镜的光线,蓝色代表经过下半部分透镜的光线,可以看到,CCD在焦前的时候上半部分的CCD接收到的是上半部分的光线,下半部分接收的是下半部分的光线,在焦后的时候,是相反的,上半部分接收的是下半部分的光线,下半部分接收的是上半部分的光线。这样就可以通过区分光线是来自透镜的上半部分还是下半部分,就可以知道是在焦前或者焦后了。当亮色光线重合时,图像最清晰。

在这里插入图片描述
PDAF sensor的一种实现如上图所示,在CMOS上面一半的位置加了金属遮盖,这样,被遮住左边一半的像素点就只能接受右边来的光,同理,pair的被遮住右边一般的像素点就只能接受左边来的光。一般在CMOS中,遮住左边和遮住右边的像素点是在相邻位置会成对出现。
遮蔽因子遮住图像传感器左右的两个像素点得到他们的相位差,再通过算法结算,得到焦点位置,最后通过音圈马达移动镜头的位置,完成对焦。
验证方法
1、 将抓取PDAF log开关打开
2、 抓取log,按照mtk文档排查,读取confidence数据,confidence数据是一组数据,我们需要排查这组数据变化是否较大。
3、 PD线性度测试(在log里查找pdvalue与af位置,看他们是否是呈线性关系)
4、 肉眼看是否是一次性对焦到位,如果是相位对焦。如果不是反差对焦。
Type1、Type2、Type3的区别
1、 Type1:PD像素通过传感器校正,PD值通过传感器计算
2、 Type2:PD像素通过传感器校正,PD像素通过vc输出到isp
3、 Type3:PD像素通过ISP校正,PD像素通过isp从原始图像中提取PD像素由ISP3.0上的PDAF算法提取。
Vc是传输raw和pd像素的两个通道。

总结:
PDAF相位对焦技术通过利用成像传感器上的特殊遮蔽像素点来检测相位差,从而快速、准确地确定焦点的位置。这种技术不仅提高了对焦的速度,还提高了对焦的精度,使得数码相机和摄像机等设备能够更好地捕捉清晰、锐利的图像。

这篇关于图像算法---自动对焦AF的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1037977

相关文章

golang字符串匹配算法解读

《golang字符串匹配算法解读》文章介绍了字符串匹配算法的原理,特别是Knuth-Morris-Pratt(KMP)算法,该算法通过构建模式串的前缀表来减少匹配时的不必要的字符比较,从而提高效率,在... 目录简介KMP实现代码总结简介字符串匹配算法主要用于在一个较长的文本串中查找一个较短的字符串(称为

Java中实现订单超时自动取消功能(最新推荐)

《Java中实现订单超时自动取消功能(最新推荐)》本文介绍了Java中实现订单超时自动取消功能的几种方法,包括定时任务、JDK延迟队列、Redis过期监听、Redisson分布式延迟队列、Rocket... 目录1、定时任务2、JDK延迟队列 DelayQueue(1)定义实现Delayed接口的实体类 (

通俗易懂的Java常见限流算法具体实现

《通俗易懂的Java常见限流算法具体实现》:本文主要介绍Java常见限流算法具体实现的相关资料,包括漏桶算法、令牌桶算法、Nginx限流和Redis+Lua限流的实现原理和具体步骤,并比较了它们的... 目录一、漏桶算法1.漏桶算法的思想和原理2.具体实现二、令牌桶算法1.令牌桶算法流程:2.具体实现2.1

shell脚本自动删除30天以前的文件(最新推荐)

《shell脚本自动删除30天以前的文件(最新推荐)》该文章介绍了如何使用Shell脚本自动删除指定目录下30天以前的文件,并通过crontab设置定时任务,此外,还提供了如何使用Shell脚本删除E... 目录shell脚本自动删除30天以前的文件linux按照日期定时删除elasticsearch索引s

Go Mongox轻松实现MongoDB的时间字段自动填充

《GoMongox轻松实现MongoDB的时间字段自动填充》这篇文章主要为大家详细介绍了Go语言如何使用mongox库,在插入和更新数据时自动填充时间字段,从而提升开发效率并减少重复代码,需要的可以... 目录前言时间字段填充规则Mongox 的安装使用 Mongox 进行插入操作使用 Mongox 进行更

C语言中自动与强制转换全解析

《C语言中自动与强制转换全解析》在编写C程序时,类型转换是确保数据正确性和一致性的关键环节,无论是隐式转换还是显式转换,都各有特点和应用场景,本文将详细探讨C语言中的类型转换机制,帮助您更好地理解并在... 目录类型转换的重要性自动类型转换(隐式转换)强制类型转换(显式转换)常见错误与注意事项总结与建议类型

IDEA如何让控制台自动换行

《IDEA如何让控制台自动换行》本文介绍了如何在IDEA中设置控制台自动换行,具体步骤为:File-Settings-Editor-General-Console,然后勾选Usesoftwrapsin... 目录IDEA如何让控制台自http://www.chinasem.cn动换行操作流http://www

vscode保存代码时自动eslint格式化图文教程

《vscode保存代码时自动eslint格式化图文教程》:本文主要介绍vscode保存代码时自动eslint格式化的相关资料,包括打开设置文件并复制特定内容,文中通过代码介绍的非常详细,需要的朋友... 目录1、点击设置2、选择远程--->点击右上角打开设置3、会弹出settings.json文件,将以下内

Python脚本实现自动删除C盘临时文件夹

《Python脚本实现自动删除C盘临时文件夹》在日常使用电脑的过程中,临时文件夹往往会积累大量的无用数据,占用宝贵的磁盘空间,下面我们就来看看Python如何通过脚本实现自动删除C盘临时文件夹吧... 目录一、准备工作二、python脚本编写三、脚本解析四、运行脚本五、案例演示六、注意事项七、总结在日常使用

基于WinForm+Halcon实现图像缩放与交互功能

《基于WinForm+Halcon实现图像缩放与交互功能》本文主要讲述在WinForm中结合Halcon实现图像缩放、平移及实时显示灰度值等交互功能,包括初始化窗口的不同方式,以及通过特定事件添加相应... 目录前言初始化窗口添加图像缩放功能添加图像平移功能添加实时显示灰度值功能示例代码总结最后前言本文将