这个图里面最让人困惑的就是这个波峰图是怎么产生的,很多说法是说光线到达检测器的时间不同,然后可以通过光的相位判断是往前移动成像面还是往后移动成像面(等效做法是移动镜头),但是检测光的相位这么 NB 的功能单反不大可能有,因此我认为这个波峰其实是物体上特定点的反光或者发光经过透镜之后位于光轴上半部的光线汇聚到下部的线传感器(Line sensor),位于光轴下方的光线则汇聚到上部的线性传感器,而具体设计中可能会有分光机构,这个图只是原理图,但是足够说明问题。
1\]: [*Digital single-lens reflex camera*](https://en.wikipedia.org/wiki/Digital_single-lens_reflex_camera)
\[2\]: [*单反、无反、微单 相机的选择?*](https://product.pconline.com.cn/itbk/bkxt/1507/6748897.html)
\[3\]: [*反光镜和对焦屏 (单反屏幕对焦)*](https://www.ynp.cn/syjq/202301/04/42631.html)
\[4\]: [*How Phase Detection Autofocus Works*](https://photographylife.com/how-phase-detection-autofocus-works)
\[6\]: [*摄像头模组 PDAF 对焦 (Phase Detection Auto Focus)*](https://www.pianshen.com/article/30131362716/)
\[7\]: [*相位對焦(Phase Detection) 資料整理*](https://cuteparrot.pixnet.net/blog/post/209573872)
\[8\]: [*《计算摄影学基础》*](https://lib-oiofnxu6cc6twe2twltbgdny.booksc.eu/book/16899341/b68d31)
\[9\]: [*《Sensor-Based Auto-Focusing System Using Multi-Scale Feature Extraction and Phase Correlation Matching》*](https://www.mdpi.com/1424-8220/15/3/5747)
\[10\]:[*PDAF 相位对焦*](https://www.zhihu.com/column/p/26515007)
\[11\]:[*手机拍照知识科普:PDAF 对焦与激光对焦的区别*](https://www.pc841.com/shoujizhishi/86548.html)
*** ** * ** ***
## 对比 PDAF、CDAF 和 LAAF 自动对焦技术
*大 DA_辉 于 2024-08-30 21:38:22 发布*

### 深入解析相位检测自动对焦(PDAF)
相位检测自动对焦(PDAF,Phase Detection Auto Focus)是一种高效的自动对焦技术,广泛应用于现代数码相机、无反相机和智能手机摄像头中。为了更好地理解 PDAF,我们将从其工作原理、技术优势、应用场景以及最新的发展趋势等方面进行详细解析。

#### 一、PDAF 的工作原理
PDAF 的工作原理主要依赖于光学相位差的测量。以下是其具体步骤:
1. **光线分离**:
当光线通过相机镜头时,它会被镜头内的特殊半透镜或微透镜阵列分成两束光。这些光线来自相同的场景,但由于路径不同,会产生细微的相位差。
2. **相位检测**:
被分离的光线分别到达传感器的不同区域,这些区域通常被称为相位检测像素。这些像素负责接收光线,并生成两个独立的图像。如果镜头没有精确对焦,这两个图像就会出现相位差,即两图像不完全重叠。
3. **计算相位差**:
相机内部的处理器会分析这两个图像的位移量(即相位差),确定其大小和方向。根据这些信息,处理器可以判断镜头应朝哪个方向、移动多远以实现对焦。
4. **调整焦距**:
根据计算出的相位差,镜头马达会迅速移动镜头组件,调整焦距,直到两个图像完全重合为止。这时,相机就实现了精确对焦。
5. **实时反馈**:
PDAF 系统通常会不断进行这种光线分离、相位检测和焦距调整的过程,以便在动态场景中保持焦点的持续锁定。这就是为什么 PDAF 在拍摄运动物体时也能保持快速、精准对焦的原因。
#### 二、PDAF 的技术优势
PDAF 之所以在自动对焦技术中占据重要地位,主要因为其拥有以下技术优势:
1. **超高速对焦**:
相较于传统的对比度检测自动对焦(CDAF),PDAF 通过直接测量相位差,可以在极短的时间内完成对焦。CDAF 需要通过不断调整镜头焦距来寻找最大对比度点,而 PDAF 则能够一次性精确调整到正确的焦点位置。
2. **连续对焦能力**:
PDAF 的实时反馈机制使其能够在动态场景中保持对焦,即使物体在高速运动,相机也能持续跟踪并调整焦点。这使得 PDAF 特别适合于体育赛事、动物摄影和视频拍摄等应用场景。
3. **低光下的表现**:
在光线较弱的环境中,PDAF 系统可以凭借其高效的相位检测传感器,仍然保持较高的对焦速度和准确性。相比之下,CDAF 在低光环境下通常会表现不佳,因为它依赖于图像对比度,而弱光会降低对比度。
4. **高效能耗**:
由于 PDAF 是基于相位差的直接测量,因此相对于那些依赖多次调整和反馈的对焦系统,PDAF 在相同条件下所消耗的能量更少。这一点在移动设备(如智能手机)中尤为重要,因为降低能耗可以延长电池寿命。
#### 三、PDAF 的应用场景
PDAF 的应用非常广泛,以下是其主要的应用场景:
1. **体育摄影和野生动物摄影** :
这些场景通常需要快速反应和连续跟踪移动物体。PDAF 能够以极高的速度和精度锁定焦点,确保拍摄到清晰的图像。
2. **视频拍摄**:
在视频拍摄中,尤其是在拍摄具有高动态场景的视频时,PDAF 可以提供平滑的连续对焦,避免画面因对焦不准而变得模糊。
3. **智能手机摄影** :
许多高端智能手机都采用了 PDAF 技术,特别是在拍摄动态场景和低光环境时表现出色。PDAF 与其他对焦技术(如 CDAF 和 LAAF)结合使用,可以提供更全面的对焦体验。
4. **专业摄影和电影制作**:
在需要快速捕捉瞬间或跟踪拍摄的专业场合,PDAF 凭借其高效对焦能力,成为摄影师和电影制作人不可或缺的工具。
#### 四、PDAF 的 技术挑战 与改进
尽管 PDAF 在许多方面表现出色,但它也面临一些技术挑战:
1. **硬件成本与复杂性**:
PDAF 系统需要在图像传感器上集成专用的相位检测像素,这增加了制造成本和传感器的复杂性。为了提高覆盖范围和对焦精度,传感器需要更加精密的设计。
2. **边缘对焦问题**:
由于 PDAF 像素通常分布在传感器的中间部分,因此在图像边缘区域的对焦效果可能不如中间区域。这在某些宽幅场景或需要边缘清晰的图像中可能成为一个问题。
3. **低对比度和特殊场景**:
在低对比度场景(如拍摄纯色物体)或特殊光照条件下(如逆光场景),PDAF 可能会遇到对焦困难。这些情况下,PDAF 系统可能需要与其他对焦系统(如 CDAF)配合使用,以确保对焦精度。
#### 五、PDAF 的发展趋势
随着相机技术的不断进步,PDAF 也在不断演变和改进。以下是一些未来的发展方向:
1. **全局相位检测**:
新一代的图像传感器正在探索将相位检测像素分布到整个传感器的表面,而不仅仅集中在中央区域。这将显著改善边缘对焦能力,提升图像整体的对焦精度。
2. **深度学习与智能对焦**:
将人工智能技术融入 PDAF 系统,可以通过深度学习算法预测物体运动轨迹,从而实现更加智能的自动对焦。这在视频拍摄中尤其有潜力,能够大大提高对焦的稳定性和准确性。
3. **混合自动对焦系统**:
未来的自动对焦系统可能会结合 PDAF、CDAF 和 LAAF 等多种技术,以实现最佳的对焦性能。例如,在复杂的光照条件下,系统可以自动切换或综合使用不同的对焦方法,确保在任何环境下都能获得最佳的对焦效果。
#### 六、总结
相位检测自动对焦(PDAF)作为一种成熟而高效的自动对焦技术,凭借其快速、准确的对焦能力,广泛应用于各种拍摄场景中。尽管它在某些特殊条件下存在一定的局限性,但随着技术的不断进步,这些问题正在逐步得到解决。未来,PDAF 有望继续发展,特别是在智能手机和高端摄影设备中,提供更卓越的拍摄体验。
*** ** * ** ***
## 图像算法 --- 自动对焦 AF
*孤舟簔笠翁 于 2024-06-06 18:40:50 发布*
### 一,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 相位对焦技术通过利用成像传感器上的特殊遮蔽像素点来检测相位差,从而快速、准确地确定焦点的位置。这种技术不仅提高了对焦的速度,还提高了对焦的精度,使得数码相机和摄像机等设备能够更好地捕捉清晰、锐利的图像。
*** ** * ** ***
## 3A 算法 --- 自动对焦(AF)
*岁月蹉跎的一杯酒 于 2021-03-17 18:19:19 发布*
关于这方面知识,自己所能接触到的东西较少,目前属于学习阶段。
### 1、定义
自动对焦是利用物体光反射原理,将反射的光被相机上的传感器 CCD 所接受,通过计算机处理,带动电动对焦设备进行对焦的方式叫做自动对焦。
下面简单介绍几个专业名字
* 物距:物距是指物体到透镜中心的距离,一般用表示 u 表示。
* 像距:像距是像(CCD 传感器)到平面镜(或透镜的光心)之间的距离,一般用 v 表示。
* 焦距:镜头的焦距基本上是从镜头的中心点,到形成清晰影像镜头胶片或数码 CCD 之间的距离。
* 凸透镜:凸透镜是跟据光的这声原理制成的。凸透镜是中央较厚,边缘较薄的透镜。凸透镜分为双凸、平凸和凹凸(或正弯月形)等形式,凸透镜有会聚光线的作用故又称会聚透镜,较厚的凸透镜则有望远、会聚等作用,这与透镜的厚度有关。远视眼镜是凸透镜。
* 景深:当你拍摄一个照片,照片当中最近的物体和最远的物体之间,能清晰成像的部分,就是景深。
**凸透镜成像原理**

最简单的人眼模型至少是一个**焦距可变的凸透镜(晶状体等)+ 光屏(视网膜)**。
人脑会对视网膜所成的像进行翻转,所以看到的是倒立的像,根据惠更斯原理,凸透镜所成像上各点均可看作光源,所以即使在像的位置放上光屏,对光进行散射,也不影响人眼再次成像;如果把人眼看出 CCD 光屏,对人眼考虑成像公式,1/u+1/v=1/f;

### 2、图像清晰度评价方法
我们可以通过不同的图像清晰度评价方法来评价图像是否聚焦清楚。
其中自动聚焦评价函数主要有:

评价函数算法详细可参考
* 图像清晰度评价指标-CSDN博客
(见下文)
聚焦的准确位置对应于锐度评价函数的最大峰值,也只有找到最大峰值才能知道准确聚焦的位置如何确定最大峰值 ,也就是采用什么样的方法来搜索聚焦峰值, 是基于对比度被动自动聚焦的另外需要考虑 的问题意义上讲,锐度评价函数决定了聚焦的精度,而聚焦峰值搜索方法决定了自动聚焦的速度。

### 3、对焦算法
自动对焦基本原理是:对焦过程中图像仍在一直不断产生,把镜头在某个位置时的那帧图像送到图像处理器(ISP)处理,得出该图像的统计信息,再把这信息送到对焦算法库(也许是在 isp 硬件 上执行,也许是在驱动程序软件执行),对焦算法库根据硬件规范和上述统计信息算出下一步镜头该往哪个方向移动多少距离,并驱动镜头到达那个位置;接着在此位置得到新图像,又计算统计信息,计算再下一步的镜头位置... 图像清晰度渐渐变化,如此经过几个循环收敛,图像到一定程度,就认为对焦成功。
上述图像统计信息必然是和对焦算法一一对应的,用什么样的算法就需要 ISP 计算相应的统计信息。
围绕不同的对焦算法,就形成了各种自动对焦方式,不同的对焦方式有不同的对焦速度和硬件需求及设计(主要针对摄像头传感器)。
对焦算法设计的目标就是快狠准地完成对焦。各种常见算法各路大神已经说得非常全面,在此只做简单小结,(也不作精确分类,因为认识不全面,也分不太清):
第一类,测距法。摄像头发出红外光或超声波(现在也有激光的)并接收返回光线,实现测距,然后借此距离计算物距实现对焦,此方法精度略差,高端机上已较少使用,或作为其他方法的补充。
第二类,图像分析法。又分为反差式和相位检测两种。
反差式就是通过前文所述不断迭代过程,找到画面对比度最大时的镜头位置。
相位检测是较新的技术,多用于单反相机,现渐渐开始用于手机,比如 iphone6。主要原理是通过一个分离镜头(或是通过集成在主图像传感器上的一些线性传感器)产生两个光路,当对焦准确时,通过两个光路分别形成的画面之间的偏移应该等于两个光路固有相位差。相位差方法速度快,精度也较高,但需要硬件的支持。
摘自:
一般通用的自动聚焦算法都要考虑聚焦函数和最佳焦平面算法。也有一些自动聚焦方法,通过添加一些额外的装置,能够计算出最佳焦平面的位置,从而实现快速自动聚焦。
锐度评价函数决定了自动聚焦所能达到的精度,而聚焦峰值搜索则决定了自动聚焦的速度。因 此,只有研究或采用适应性强、抗噪声能力强的锐度评价函数,以及设计稳定而高效 的峰值搜索方法,才能够满足自动聚焦迅速、精确的要求。
关于具体算法,之后也会不断学习进行更新。

### 致谢
* 手机是如何实现自动对焦的? - 知乎
*** ** * ** ***
## 图像清晰度的评价指标
*charlene_bo 于 2017-05-24 09:50:17 发布*
from: http://nkwavelet.blog.163.com/blog/static/227756038201461532247117(链接已沉寂)
在无参考图像的质量评价中,图像的清晰度是衡量图像质量优劣的重要指标,它能够较好的与人的主观感受相对应,图像的清晰度不高表现出图像的模糊。本文针对无参考图像质量评价应用,对目前几种较为常用的、具有代表性清晰度算法进行讨论分析,为实际应用中选择清晰度算法提供依据。
### (1)Brenner 梯度函数
Brenner 梯度函数是最简单的梯度评价函数,它只是简单的计算相邻两个像素灰度差的平方,该函数定义如下:

其中: f ( x , y ) 表示图像 f 对应像素点 ( x , y ) 的灰度值, D ( f ) 为图像清晰度计算结果 ( 下同 ) f (x,y) 表示图像 f 对应像素点 (x,y) 的灰度值,D (f) 为图像清晰度计算结果 (下同) f(x,y)表示图像f对应像素点(x,y)的灰度值,D(f)为图像清晰度计算结果(下同)。
### (2)Tenengrad 梯度函数
Tenengrad 梯度函数采用 Sobel 算子分别提取水平和垂直方向的梯度值,基与 Tenengrad 梯度函数的图像清晰度定义如下:

G (x,y) 的形式如下:

其中:T 是给定的边缘检测阈值,Gx 和 Gy 分别是像素点 (x,y) 处 Sobel 水平和垂直方向边缘检测算子的卷积,建议使用以下的 Sobel 算子模板来检测边缘:

### (3)Laplacian 梯度函数
Laplacian 梯度函数与 Tenengrad 梯度函数基本一致,用 Laplacian 算子替代 Sobel 算子即可,该算子定义如下:

因此基于 Laplacian 梯度函数的图像星清晰度的定义如下:

其中 G (x,y) 是像素点 (x,y) 处 Laplacian 算子的卷积。
### (4)SMD(灰度方差)函数
当完全聚焦时,图像最清晰,图像中的高频分量也最多,故可将灰度变化作为聚焦评价的依据,灰度方差法的公式如下:

### (5)SMD2 (灰度方差乘积)函数
灰度差分评价函数具有较好的计算性能,但其缺点也很明显,即在焦点附近灵敏度不高,即该函数在极值点附近过于平坦,从而导致聚焦精度难以提高。在文章《[一种快速高灵敏度聚焦评价函数](http://wenku.baidu.com/link?url=aAD0nTSU1w9aGDazbl0Q6QsA553xJHTKCGSedlqWewMiEidpXUg3bdPjflxSFVUFWBlQq8DUOIHUR6rz_BJTqeYLeP91SYnfJtzMER60ULG)》中提出了一种新的评价函数,称之为灰度方差乘积法,即对每一个像素领域两个灰度差相乘后再逐个像素累加,该函数定义如下:

### (6)方差函数
因为清晰聚焦的图像有着比模糊图像更大的灰度差异,可以将方差函数作为评价函数:

其中:μ 为整幅图像的平均灰度值,该函数对噪声比较敏感,图像画面越纯净,函数值越小。
### (7)能量梯度函数
能量梯度函数更适合实时评价图像清晰度,该函数定义如下:

### (8)Vollath 函数
Vollath 函数定义如下:

其中: μ 为整幅图像的平均灰度值,M 和 N 分别为图像宽和高。
### (9)熵函数
基于统计特征的熵函数是衡量图像信息丰富程度的一个重要指标,有信息论可知,一幅图像 f 的信息量是由该图像的信息熵 D (f) 来度量:

其中:Pi 是图像中灰度值为 i 的像素出现的概率,L 为灰度级总数(通常取值 256)。根据 Shannon 信息论,熵最大时信息量最多。将此原理应用到对焦过程,D (f) 越大则图像越清晰。熵函数灵敏度不高,依据图像内容不同容易出现与真实情况相反的结果。
### (10) EAV 点锐度算法函数
徐贵力、张霞等提出了一种基于边缘锐度的算法用于评价图像的清晰度。通过统计图像某一边缘方向的灰度变化情况来评价。计算公式如下:

其中:df/dx 为边缘法向的灰度变化率,f (b) - f (a) 为该方向的总体灰度变化。该算法只对图像的特定边缘区域做统计,能否代表整幅图像的清晰度仍有疑问,此外计算前需人工选定边缘区域,不便实现程序运算的自动化,因为王鸿南等在论文 [图像清晰度评价方法研究](http://wenku.baidu.com/link?url=cBr9GD7INQgTwlQG56M17w444gFahlyjCbFTz4YzbAtX-y5OhlWA4mJ49rmyLfgNei7mj0lLei2LWia_UpzzSWvvSN2TR5i10Gc25UhNpoC) 中对上述算法进行了改进,改进如下:
a) 将针对边缘的梯度计算改为逐个像素领域梯度的计算,以便算法能对图像的整体进行评价,并使算法实现自动化。
b) 对方格像素 8 领域的灰度变化进行距离加权,水平和垂直方向的权重为 1,而 45 度和 135 度方向的权重为 1 2 \\frac{1}{\\sqrt{2}} 2 1 。
c) 对计算结果按图像的大小进行规格化,以便于图像的对比。
经过以上三步改进后的点锐度算法为:

其中:M 和 N 为图像的行数和列数。
### (11)Reblur 二次模糊
如果一幅图像已经模糊了,那么再对它进行一次模糊处理,高频分量变化不大;但如果原图是清楚的,对它进行一次模糊处理,则高频分量变化会非常大。因此可以通过对待评测图像进行一次高斯模糊处理,得到该图像的退化图像,然后再比较原图像和退化图像相邻像素值的变化情况,根据变化的大小确定清晰度值的高低,计算结果越小表明图像越清晰,反之越模糊。这种思路可称作基于二次模糊的清晰度算法,其算法简化流程如下图:

### (12)NRSS 梯度结构相似度
Wang 等利用人类视觉系统(HVS)非常适于提取目标的结构信息的特点,提出了图像结构相似度概念(SSIM),认为只要能计算目标结构信息的变化,就能够得到感知图像失真值。杨春玲等基于此思路,将该方法引入到计算全参考图像的清晰度评价中,认为图像的清晰度可以使用目标图像与参考图像间的结构相似度来表示,而图像间的结构相似度包含以下三个部分的比较:

而 C1、C2 和 C3 是为了避免分母为 0 而设的常数。图像的结构相似度由下式计算可得:

为简单起见可以令
谢小甫等进一步改进了杨春玲等的方法,根据结构相似度的相关思想结合人烟视觉系统的相关特点,设计了无参考图像清晰度的评价指标(NRSS),计算方法如下:
(a)为待评价图像构造参考图像。定义待评价图像为 I,而参考图像 I r = L P F ( I ) I_r=LPF(I) Ir=LPF(I),即对待评价图像 I 进行低通滤波得到参考图像 I r I_r Ir。实验表明,基于圆盘模型的均值滤波器和高斯模型的平滑滤波器都可以取得较好的效果,为了更好的与成像系统匹配,建议采用 7x7 大小且 σ 2 = 6 σ\^2=6 σ2=6 的高斯平滑滤波器。在需要实时处理的工程应用中 7x7 均值滤波器并不会是评价效果下降很大。
(b)提取图像 I 和 I r I_r Ir 的梯度信息。利用人眼对水平和垂直方向的边缘信息最为敏感的特性,使用 Sobel 算子分别提取水平和垂直方向的边缘信息,定义 I 和 I r I_r Ir 的梯度图像是 G 和 G r G_r Gr。
(c)找出梯度图像 G 中梯度信息最丰富的 N 个图像块。将图像 G 划分为 8x8 的小块,块间的步长为 4,即相邻块有 50% 重叠,这是为了避免丢失重要的边缘。计算每块的方差,方差越大说明梯度信息越丰富,找出其中方差最大的 N 块,记为 { x i ∣ i = 1 , 2 , . . . , N } \\left\\{ \\mathop{x}_{i}\|i=1,2,...,N \\right\\} {xi∣i=1,2,...,N},对应的 G r G_r Gr 中的对应块定义为 { y i ∣ i = 1 , 2 , . . . , N } \\left\\{ \\mathop{y}_{i}\|i=1,2,...,N \\right\\} {yi∣i=1,2,...,N}。N 的值大小直接影响评价结果,同时也影响算法运行时间。在后面的实验中设 N = 64。
(d)计算结构清晰度 NRSS。先计算每个 x i x_i xi 和 y i y_i yi 的结构相似度 S S I M ( x i , y i ) SSIM (x_i, y_i) SSIM(xi,yi),其中 S S I M SSIM SSIM 计算方法参见前面的定义,则图像的无参考结构清晰度定义为:

### (13)FFT 图像变换域
待写!(多年已过去,作者并未更新)
### (14) No-Reference Perceptual Quality Assessment of JPEG Compressed Images
在这篇文章中,作者【Zhou Wang】等针对 JPEG 压缩图片提出了一种新的无参图像质量评价方法。
JPEG 图片是基于 8x8 块的 DCT 变换的编码技巧,它是有损的因为对 DCT 变换系数做量化的时候会产生量化误差。量化就会导致模糊和块效应。模糊主要是因为丢失了高频的 DCT 系数。块效应是由于块边界的不连续性,因为每个分块的量化是独立的。
我们用 f ( x , y ) f (x, y) f(x,y) 表示一幅图片,图片尺寸为 M × N M\\times N M×N,计算跨越每个水平线的信号差:

首先计算块效应,块效应的定义就是左右跨越边界的信号差的平均值:

然后计算块内信号差的平均值:

再计算 zero-crossing(ZC)率,ZC 是边界跨零的意思,也就是说相邻两个点的 d h ( x , y ) \\mathop{d}_{h}\\left( x,y \\right) dh(x,y) 值的乘积为负数,也就是一正一负,因此对于 \[1, N - 2\] 范围内的 y,定义如下变量:

于是水平方向的 ZC 率定义如下:

同理,我们可以计算垂直方向的几个指标值 B v , A v a n d Z v \\mathop{B}_{v}\\,,\\mathop{A}_{v}\\,and\\,\\mathop{\\text{Z}}_{v}\\, Bv,AvandZv。最后得到这几个指标的水平和垂直方向的平均值:

有很多方式把这几个指标联系起来组成一个质量评价模型。此处我们采用如下图像质量定义:
S = α + β B γ 1 A γ 2 Z γ 3 \\displaystyle S = \\alpha + \\beta B\^{\\gamma_1} A\^{\\gamma_2} Z\^{\\gamma_3} S=α+βBγ1Aγ2Zγ3
其中 α , β , γ 1 , γ 2 a n d γ 3 \\displaystyle \\alpha ,\\,\\,\\beta ,\\,\\,{{\\gamma }_{1}},\\,\\,{{\\gamma }_{2}}\\,\\,and\\,\\,{{\\gamma }_{3}} α,β,γ1,γ2andγ3 是从大量实验中提炼出来的模型参数。本文中所采用的参数值如下:

### (15)No-Reference Image Quality Assessment forJPEG/JPEG2000 Coding
这篇文章的作者在前面那篇文章的基础上,重新定义了新的质量指标:

其实 S 就是在(14)中已经得到的质量评价值。
### (16)No-Reference Image Quality Assessment using Blur and Noise
图像质量受很多因素影响,例如:亮度、对比度、色调、边界、噪声、模糊等。在本文中,我们假定噪声和模糊是影响图像质量最重要的两个因素。简单起见,只对彩色图像的亮度分量做模糊和噪声监测。本文的图像质量评价算法框架图如下:

**A)模糊检测**
模糊估计分为两个步骤:首先是边缘检测,然后是模糊确定。此处模糊估计是通过计算当前像素点与领域内像素点均值之差来确定。我们用 f ( x , y ) f (x,y) f(x,y) 表示图片,其中
x ∈ \[ 1 , M \] a n d y ∈ \[ 1 , N \] x\\in \\left\[ 1,M \\right\]\\,and\\,y\\in \\left\[ 1,N \\right\] x∈\[1,M\]andy∈\[1,N
定义水平绝对差如下:
D h ( x , y ) = ∣ f ( x , y + 1 ) − f ( x , y − 1 ) ∣ \displaystyle \mathop{D}_{h}\left( x,y \right)=|f\left( x,y+1 \right)-f\left( x,y-1 \right)| Dh(x,y)=∣f(x,y+1)−f(x,y−1)∣
整个图片的水平绝对差的均值为:
如果当前像素点的 D h ( x , y ) D h − m a e n \mathop{D}{h}\left( x,y \right)\,\,\mathop{\,D}{h-maen} Dh(x,y)Dh−maen, 则该像素点就是一个候选的边缘点 C h ( x , y ) \mathop{C}{h}\left( x,y \right) Ch(x,y)。如果 C h ( x , y ) \mathop{C}{h}\left( x,y \right) Ch(x,y) 比它水平方向两个相邻的点 { C h ( x , y − 1 ) , C h ( x , y + 1 ) } \left\{ \mathop{C}{h}\left( x,y-1 \right),\mathop{C}{h}\left( x,y+1 \right) \right\} {Ch(x,y−1),Ch(x,y+1)} 都大,则该像素点就被确认为一个边缘点。边缘点 E h ( x , y ) \mathop{E}_{h}\left( x,y \right) Eh(x,y) 的判断总结如下:
接下来我们检测边缘点是否模糊。定义:
同理,按照以上的步骤我们可以计算垂直方向的值 B R v B{{R}{v}} BRv。 B R h B{{R}{h}} BRh 和 B R v B{{R}_{v}} BRv 两者之大者称作 Inverse Blurriness,用于最终的模糊判定依据。
因为沿边缘的噪点视觉上不明显,因此我们只检测边缘之外的噪点。边缘检测会被噪点影响,因此在检测边缘之前做一个噪点滤波的预处理。在本文中,应用均值滤波来消除噪点。均值滤波之后的图像 g ( x , y ) g (x,y) g(x,y) 为:
候选的噪点估计如下:
同理可以在垂直方向计算对应的值。然后得到候选的噪点是:
其中 N_cand (x,y) 表示候选噪点,它在边缘区域为 0。
噪点均值和比率为:
其中 Sum_Noise 是 N ( x , y N (x,y N(x,y) 之和, N o i s e c n t Noise_{cnt} Noisecnt 是噪点总数目。
C)噪点和模糊的组合
此处我们的图像质量评价指标定义如下:
其中 w 1 、 w 2 、 w 3 、 w 4 w_1、w_2、w_3、w_4 w1、w2、w3、w4 是权值。通过线性回归分析获取这些权值。本文中这些权值为:
w 1 = 1 , w 2 = 0.95 , w 3 = 0.3 , w 4 = 0.75 w_1=1,w_2=0.95,w_3=0.3,w_4=0.75 w1=1,w2=0.95,w3=0.3,w4=0.75
实验
为了测试以上评价方法的准确性,我们才用 C 语言 编程实现以上算法,由于以上算法都是针对灰度图,因此在处理彩色图像的时候,首先将彩色图像转化为灰度图(简单起见,转化算法采用了 g r e y = ( R + G + B ) / 3 grey = (R + G + B) /3 grey=(R+G+B)/3)。 测试图片采用了美国德州大学图像与视频工程实验室提供的图像质量评价数据库。该图像数据库包含了 29 幅原始图像,并利用原始图像生成了包括 JPEG 压缩、JPEG2000 压缩、高斯模糊、Fastfsding(在 Fastading 通道中传输传输错误)、WhiteNoise(白噪声)五类失真在内的失真图像共 779 幅。此处我们选用 JPEG 目录下的部分图片做测试。
def brenner(img):
'''
:param img:narray 二维灰度图像
:return: float 图像约清晰越大
'''
shape = np.shape(img)
out = 0
for x in range(0, shape[0]-2):
for y in range(0, shape[1]):
out+=(int(img[x+2,y])-int(img[x,y]))**2
return out
def SMD(img):
'''
:param img:narray 二维灰度图像
:return: float 图像约清晰越大
'''
shape = np.shape(img)
out = 0
for x in range(0, shape[0]-1):
for y in range(1, shape[1]):
out+=math.fabs(int(img[x,y])-int(img[x,y-1]))
out+=math.fabs(int(img[x,y]-int(img[x+1,y])))
return out
4 SMD2(灰度方差乘积)
cobol复制代码
def SMD2(img):
'''
:param img:narray 二维灰度图像
:return: float 图像约清晰越大
'''
shape = np.shape(img)
out = 0
for x in range(0, shape[0]-1):
for y in range(0, shape[1]-1):
out+=math.fabs(int(img[x,y])-int(img[x+1,y]))*math.fabs(int(img[x,y]-int(img[x,y+1])))
return out
5 方差函数
cobol复制代码
def variance(img):
'''
:param img:narray 二维灰度图像
:return: float 图像约清晰越大
'''
out = 0
u = np.mean(img)
shape = np.shape(img)
for x in range(0,shape[0]):
for y in range(0,shape[1]):
out+=(img[x,y]-u)**2
return out
6 能量梯度函数
cobol复制代码
def energy(img):
'''
:param img:narray 二维灰度图像
:return: float 图像约清晰越大
'''
shape = np.shape(img)
out = 0
for x in range(0, shape[0]-1):
for y in range(0, shape[1]-1):
out+=((int(img[x+1,y])-int(img[x,y]))**2)+((int(img[x,y+1]-int(img[x,y])))**2)
return out
7 Vollath函数
cobol复制代码
def Vollath(img):
'''
:param img:narray 二维灰度图像
:return: float 图像约清晰越大
'''
shape = np.shape(img)
u = np.mean(img)
out = -shape[0]*shape[1]*(u**2)
for x in range(0, shape[0]-1):
for y in range(0, shape[1]):
out+=int(img[x,y])*int(img[x+1,y])
return out
8 熵函数
cobol复制代码
def entropy(img):
'''
:param img:narray 二维灰度图像
:return: float 图像约清晰越大
'''
out = 0
count = np.shape(img)[0]*np.shape(img)[1]
p = np.bincount(np.array(img).flatten())
for i in range(0, len(p)):
if p[i]!=0:
out-=p[i]*math.log(p[i]/count)/count
return out