首页 > 编程语言 >SFR算法原理分析

SFR算法原理分析

时间:2024-08-21 09:26:27浏览次数:13  
标签:SFR 对焦 算法 图像 原理 像素 MTF

成像系统的解析力:

摄像头最关键的指标之一。所有用户拿到一张照片的时候首选看到的是照片清楚不清楚,这里的清楚指的就是解析力。但是如果评价一个成像系统的解析力也是大家一直在探讨的问题。目前主流的办法主要有三种TV line检测、MTF检测以及FR检测。

MTF:

MTF是Modulation Transfer Function的英文简称,中文为调制传递函数。是指调制度随空间频率变化的函数称为调制度传递函数。传递函数最开始是为了说明镜头的能力。在各个摄像头镜头中经常采用MTF描述镜头的MTF曲线,表明镜头的能力。这些曲线是通过理想的测试环境下尽量减少其它系统对镜头的解析力的衰减的情况下测试得出的。但是其实MTF也可以涵盖对整个成像系统的解析力评价。MTF的值越接近于1,说明镜头的成像效果越好。

SFR:

SFR是 Spatial Frequency Response (SFR) 主要是用于测量随着空间频率的线条增加对单一影像的所造成影响。简言之SFR就是MTF的另外一种测试方法。这种测试方法在很大程度上精简了测试流程。SFR的最终计算是希望得到MTF曲线。SFR的计算方法和MTF虽然不同但是在结果上是基本一致的。

Cy/mm&LP/mm:

cy/mm和lp/mm都是进行分辨率衡量的单位,具体含义:线对每毫米(lp/mm)、周期每毫米(cy/mm);此外,

常用到的分辨率单位还有线对每毫弧度(lp/mr)以及周期每毫弧度(cy/mr)。

在上图中,上半部分的是原图像,下半部分表示相机拍摄得到的图像。可以看出线对的边缘经过镜头之后明显变得模糊,并且线对越密越模糊,相应的MTF也就越低。cy/mm表示的就是在图像的一个毫米内有多少线对。此外,线对和像素间距之间还可以进行转换。

转换计算过程:

假设现在 分辨率为100cy/mm, 这意味着每毫米包含100个黑白相间的线对。一个线对包含一条黑线和一条白线。因此,如果一个毫米有100个线对,则每毫米有200条线(100条黑线和100条白线) 则,每条线的厚度为1000μm/200 = 5μm

对于单色图片,我们可以认为5um是像素对角线长度,假设每条线的厚度5 μm相当于像素对角线的长度。为了获得像素间距(即像素的边长),我们需要将对角线长度除以√2。。为了获得像素间距,我们除以根号2,55um /√2≈3.54um。

彩色图像的典型值:

对于彩色图像,每个颜色通道(例如红、绿、蓝)的分辨率往往是单色图像的一半。因此,通常的做法是将单色图像像素间距除以2。

对于颜色应用,典型值是该值的一半,即5um / 2 = 2.5um。

SFR的具体步骤就是上面的九大步骤,箭头中对应的是每一步执行前后对应的输入和输出。

总结如下:

0、获取垂直斜边的ROI

1、进行数据的归一化

2、计算图像每一行的像素矩心

3、对每行的矩心使用最小二乘法进行线性拟合,获得一条关于矩心的直线

4、重新定位ROI,获得ESF

5、对获得的ESF进行四倍超采样

6、通过差分运算获得LSF

7、对LSF应用汉明窗

8、进行DFT运算

步骤解析:

  1. 获取垂直边缘的ROI:

上图是专业的图像MTF测试图,用红色方框框起来的是测试卡用于计算SFR的部分,蓝色小方框框起来的是我们应该获取的具体RIO区域(具体就是黑白图像,中间有分界线,我们称之为边缘(Edge))

具体ROI图像如图:

以及

这里水平和垂直的Edge只是为了计算图像在水平方向和垂直方向的解析力,与算法本身无关,因为水平的Edge会被进行90°旋转后作为输入,然后计算SFR的值。

1、进行数据的归一化

在Sensor获得图像之后,呈现出来的图像由于要符合人眼的感觉,会对图像像素进行伽马变换,使得其变成非线性的像素数据,从而使图像的显示更加符合人眼的感受。所以,当我们要进行sensor的成像解析力分析时,要先将图像处理成没有经过伽马变换前的。

一般sensor会对raw图像进行一个2.2的gamma变换,若我们想恢复原始图像时,我们只需要进行一个1/2.2的gamma变换即可。

2、计算图像每一行的像素矩心

这一步的操作其实是为了计算出边缘的位置。具体讲来就是,我们会将图片中的每一行像素都计算具体的矩心位置。

可以看到,其实每一行像素的矩心计算出来的结果,其实就是在黑白分界线的附近。

矩心对应位置:

shift[i]就是对应的第i行的矩心位置。

3、对每行的矩心使用最小二乘法进行线性拟合,获得一条关于矩心的直线

就是根据你计算出来的那么多个矩心的点,然后获取分界边缘的直线表达式。

我们知道用的是最小二乘法就可以了。最小二乘法公式如下:

最后获得的其实就是上面的图中那条红色的线,略微有差距,可是基本上可以说是完全一致的了

4、重新定位ROI,获得边缘扩展函数(Edge Spread Function, ESF)

这一步其实比较复杂,我也不确定在我的讲述之下,大家是否能够听懂,我尝试用简单的方式讲解一下。

首先,转换坐标轴,将坐标轴转换到计算出来的矩心直线上。如图所示:

5、对获得的边缘扩展函数(Edge Spread Function, ESF)进行四倍超采样

然后,我们将每一行中X轴坐标相等的像素值累加起来,然后求均值后得到下面第一行的数组。

这里是将整张图片的像素转换为一个长度为rows的数组,然后进行4倍的扩增。然后其他没有像素的地方,是进行一个向前寻找非0的像素值进行替换,这样就获得了ESF。

6、通过差分运算获得LSF

这不用多说,就是得到的ESF数组元素进行差分,获得LSF。一下是函数公式:

7、对线扩展函数(Line Spread Function, LSF)应用汉明窗

对上面的LSF数组进行汉明窗处理,这一步主要也是看公式,如下:

8、进行DFT运算

最后的到的SFR数组就是空间频域响应的值。

SFR是一种用于评估图像系统(例如相机或扫描仪)分辨率和锐度的方法。它通过测量系统对不同空间频率(图像中的细节程度)的响应来评估图像质量。具体来说,SFR算法通常包括以下步骤:

图像采集:使用被测系统拍摄特定的测试图案,通常是斜边(edge)或正弦波(sine wave)图案。

边缘检测:在测试图案中找到斜边并提取出感兴趣的区域。

边缘剖面分析:沿着斜边的法线方向提取灰度值,得到边缘剖面(edge profile)。

边缘扩展函数(Edge Spread Function, ESF):通过边缘剖面计算得到边缘扩展函数。

线扩展函数(Line Spread Function, LSF):对ESF进行微分得到线扩展函数。

调制传递函数(Modulation Transfer Function, MTF):对LSF进行傅里叶变换得到MTF,它表示系统对不同空间频率的响应。

SFR计算:SFR是MTF的一部分,用于描述系统在不同空间频率下的响应强度。

通过以上步骤,SFR算法能够提供关于图像系统性能的详细信息,帮助工程师和研究人员改进图像系统的设计和优化。

在自动对焦(AF)场景中,SFR算法可以作为评价自动对焦性能的一种重要指标,尤其是在评估对比度自动对焦算法时。

对比度自动对焦算法通常通过分析图像的对比度来确定焦点位置。而SFR算法可以提供更精细的信息,例如评估系统对不同空间频率的分辨率能力和锐度。因此,它在以下几个方面可以为对比度自动对焦算法提供支持和补充:

精度评估:SFR算法能够量化图像系统对各种细节层次的响应,这对评估自动对焦的精度尤为重要。通过比较不同焦点位置下的SFR结果,可以确定哪一个位置产生了最佳的分辨率和清晰度。

鲁棒性分析:自动对焦算法需要在各种场景和条件下保持鲁棒性。SFR算法可以帮助分析在不同光照、对比度和场景复杂度下自动对焦的表现。比如,在低对比度或复杂背景下,SFR分析可以显示出哪些自动对焦算法能够正确地锁定焦点。

优化参数:基于SFR分析的结果,可以优化自动对焦算法的参数。

验证与标定:在图像系统设计阶段,SFR算法可以用来验证自动对焦算法的实际表现是否符合设计要求,也可以用来标定不同系统之间的自动对焦性能差异。

因此,虽然SFR算法本身并不是对比度自动对焦算法的替代品,但它可以作为一个有力的评价工具,帮助理解和优化自动对焦算法的性能,特别是在需要更细致的图像质量分析时。

SFR算法(Spatial Frequency Response)和对焦评价函数在图像处理和图像质量评估中有着不同的应用和目的:

SFR算法

定义和目的:

SFR算法用于评估图像系统的空间频率响应。它通过测量系统对不同空间频率的成像能力来分析系统的分辨率、对比度和图像锐度等特性。

SFR曲线通常展示系统在不同空间频率下的模传递函数(MTF),可以直观地反映系统对细节的保留能力和边缘清晰度。

应用场景:

主要用于图像系统的设计、制造和性能评估阶段。

适用于相机镜头、图像传感器和整个图像处理链路的优化和测试。

计算方法:

SFR算法通常涉及从测试图像中提取特定频率的信息,并通过比较输入和输出信号的能量来计算系统的频率响应。

对焦评价函数

定义和目的:

对焦评价函数是用来评估图像的焦点位置的指标。它衡量图像中目标区域的清晰度或对比度,并根据这些指标来判断图像是否正确对焦。

常见的对焦评价函数包括基于图像梯度、频域特征或深度信息的计算方法。

应用场景:

主要用于自动对焦系统、图像处理软件和计算机视觉应用中,以确保图像在不同条件下(如光线变化、场景变化)都能获得清晰的图像。

计算方法:

对焦评价函数的具体方法因应用而异,但通常涉及从图像中提取特定特征,如梯度变化或频率响应,然后将这些特征与预期的清晰度标准进行比较。

区别总结

目的不同:SFR算法旨在评估图像系统的空间频率响应和分辨能力;对焦评价函数旨在衡量图像中焦点的清晰度或对比度。

应用场景不同:SFR算法主要用于硬件设计和性能评估;对焦评价函数主要用于自动对焦系统和图像质量控制。

计算方法不同:SFR算法通常基于空间频率分析;对焦评价函数可以基于图像梯度、频域特征或其他局部信息。

标签:SFR,对焦,算法,图像,原理,像素,MTF
From: https://www.cnblogs.com/cupwym/p/18370935

相关文章

  • .NETCore 中的 await 原理浅析
    在.NETCore中,await 关键字是异步编程的重要组成部分,它极大地简化了异步代码的编写和维护。下面将对 await 的原理进行浅析:目录一、异步编程的背景二、await关键字的作用三、await的工作原理四、注意事项一、异步编程的背景随着网络应用的普及和硬件性能的不断提......
  • 排序算法 常见排序算法特性比较
    目录排序的概念内外部排序稳定与非稳定排序改进排序的指标图片排序的概念排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原......
  • 排序算法 排序性能测试代码(随机数调整,高精度时间) - C++
    目录测试工具源码testsort测试工具C++11标准库<chrono>中高精度计时器,时间精度可以达到1纳秒.C++11标准库<random>中随机数生成器,可以实现各类随机数,本测试主要用于实现9成随机数下排序性能源码源码我拆分成两部分,一部分为测试,一部分为sort源码.合并一起使用test......
  • 密码学之哈希算法
    文章目录1.哈希函数概述1.1哈希函数的定义1.2哈希函数的重要性2.SHA系列算法简介2.1SHA系列的发展历史2.2SHA系列的应用场景3.主要SHA算法详解3.1MD5算法3.2SHA-1算法3.3SHA-2算法家族3.4SHA-3算法4.SHA算法的安全性分析4.1安全性的重要性4.2已知的攻击......
  • 密码学之RSA算法
    文章目录1.RSA算法介绍1.2算法历史与发展1.3算法应用场景2.RSA密钥生成2.1选择素数2.2计算公钥和私钥2.3密钥长度与安全性3算法原理3.1加密原理3.2加密方法3.3加密示例3.4代码实现4.总结1.RSA算法介绍1.2算法历史与发展RSA算法由RonRivest、Adi......
  • 【Linux】撕开fork的本质,深入了解fork函数原理
     目录一、如何使用fork函数?二、fork函数如何产生两个返回值?三、if,else语句怎么会同时执行?为什么i会有两个不同的值?子进程创建出来之后去哪里了?四,为什么给父进程返回子进程的PID,子进程返回0?一、如何使用fork函数?在Linux操作系统里,我们可以通过调用fork函数来创建子进程......
  • Manacher 算法
    引入:万恶的字符串问题你是否看到字符串就感到迷茫而无所适从?你是否看到“border”“回文”等字眼就感到大脑宕机只会暴力?如果你像我一样有这种症状,不妨一起来学习一下Manacher算法。当你掌握了Manacher之后,你会发现,很多字符串问题都变成了板子,而你再也不用担心因为字符串抱......
  • ViT 原理解析 (Transformers for Image Recognition at Scale)
    ViT原理解析(TransformersforImageRecognitionatScale)原创 小白 小白研究室 2024年06月10日21:09 北京如何将transformer应用到图像领域Transformer模型最开始是用于自然语言处理(NLP)领域的,NLP主要处理的是文本、句子、段落等,即序列数据。视觉领域处理的......
  • codetop算法
    15.三数之和复杂度显然不能暴力,卡1e9思路先排序,左边固定一个i,双指针,两边开始夹逼接近-nums[i]注意,如何跳过重复的数3.无重复字符的最长子串这个思路一定要熟练215.数组中的第K个最大元素回忆下写法53.最大子数组和基本不太会写dp究竟有什么特征?答案(定义)就......
  • springboot自动配置原理-面试题
    网络上看很多文章并没什么用,重点没说到,不知道从那里入手讲,刷到的直接按照下面这个,背出来就行了1、当启动springboot应用程序的时候,会先创建SpringApplication的对象,在对象的构造方法中会进行某些参数的初始化工作,最主要的是判断当前应用程序的类型以及初始化器和监听器,在这个......