【图像处理】SFR算法详解4
2016-06-30 10:04
1016 查看
本篇为SFR算法详解系列的第四篇,前面三篇为:
《SFR算法详解1》:什么是MTF,MTF50,MTF50P
《SFR算法详解2》:算法过程描述
《SFR算法详解3》:ROI定义,线性化,centroid
本篇主要根据第二篇中的算法流程,描述几个流程及其相关原理。
在得到对应的矩心之后,对其进行线性回归。这里采用最小二乘法,求出估计参数a、b。
最小二乘法的目的是为了使得各个矩心到拟合出来的直线上对应的点的差的平方和最小,即残差平方和最小。相应的数学原理如下:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/25/51567be7ff258c97abb2538e862eddb9)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/25/73c8745e82e33af1bc457ce3bd41cfbd)
在代码中,a对应于b0,b对应于b1.
需要注意的是,在代码中,是将ROI进行翻转再进行线性回归的,这样是为了基于图像中行数的变化(下图中的x)来求解对应的y的方程。下图根据代码中的变量得出。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/25/8253be0f2d936a6e7f239c2af5b32619)
代码中还有相关的avar,bvar的求解,这分别是估计量a、b的残差的估计标准差;还有拟合优度R2的求解,以下为数学表达式:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/25/4547250b5c7b1f095111b67d2c0700b6)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/25/9ade6446a9422f1793518b631f5f74f6)
在这里我们的目标是对ROI区域进行4倍超采样。
1、edgex是以边缘为基准的,以距离边缘的长度为数值的x坐标。以下称为edgex轴。
2、在超采样的过程中,我们先计算每个像素点的edgex值。需要明确的是对于ESF,定义域的范围从0到size_x*4
3、对edgex轴的数值进行4倍放大,然后向下取整,获得对应坐标,并且保存相应位置的signal值。由于是逐行扫描,对于每一行,都会对之前所计算得到的坐标对应的值有所重复,这时,我们采用对其求平均值。比如:
说在第i行,在整个区域内对应的坐标为j,有⌊4*edgex[i]⌋=k,得到
AveEdge[k]=Signal[j];
说在第i+N行,区域坐标为j+N*size_x,有⌊4*edgex[i+N]⌋=k,得到
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/25/6e57b2aa6c857e437ac9b0f1c576d575)
在这里,AveEdge就是得到的4x放大的ESF的值。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/25/ace6e49d59f7494d4f84c5a6d0a1b926)
calculate_derivative,对ESF进行求导,获得LSF。
求导的计算,其实就是差分的概念,在这里,我们采用AvgEdge[i]-AvgEdge[i-1]进行求导。
《SFR算法详解1》:什么是MTF,MTF50,MTF50P
《SFR算法详解2》:算法过程描述
《SFR算法详解3》:ROI定义,线性化,centroid
本篇主要根据第二篇中的算法流程,描述几个流程及其相关原理。
4、线性回归
在得到对应的矩心之后,对其进行线性回归。这里采用最小二乘法,求出估计参数a、b。 最小二乘法的目的是为了使得各个矩心到拟合出来的直线上对应的点的差的平方和最小,即残差平方和最小。相应的数学原理如下:
在代码中,a对应于b0,b对应于b1.
需要注意的是,在代码中,是将ROI进行翻转再进行线性回归的,这样是为了基于图像中行数的变化(下图中的x)来求解对应的y的方程。下图根据代码中的变量得出。
代码中还有相关的avar,bvar的求解,这分别是估计量a、b的残差的估计标准差;还有拟合优度R2的求解,以下为数学表达式:
5、4倍超采样
在这里我们的目标是对ROI区域进行4倍超采样。 1、edgex是以边缘为基准的,以距离边缘的长度为数值的x坐标。以下称为edgex轴。
2、在超采样的过程中,我们先计算每个像素点的edgex值。需要明确的是对于ESF,定义域的范围从0到size_x*4
3、对edgex轴的数值进行4倍放大,然后向下取整,获得对应坐标,并且保存相应位置的signal值。由于是逐行扫描,对于每一行,都会对之前所计算得到的坐标对应的值有所重复,这时,我们采用对其求平均值。比如:
说在第i行,在整个区域内对应的坐标为j,有⌊4*edgex[i]⌋=k,得到
AveEdge[k]=Signal[j];
说在第i+N行,区域坐标为j+N*size_x,有⌊4*edgex[i+N]⌋=k,得到
在这里,AveEdge就是得到的4x放大的ESF的值。
6、差分运算,获得LSF
calculate_derivative,对ESF进行求导,获得LSF。 求导的计算,其实就是差分的概念,在这里,我们采用AvgEdge[i]-AvgEdge[i-1]进行求导。
相关文章推荐
- 书评:《算法之美( Algorithms to Live By )》
- 动易2006序列号破解算法公布
- C#递归算法之分而治之策略
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- C#算法之大牛生小牛的问题高效解决方法
- C#算法函数:获取一个字符串中的最大长度的数字
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- 经典排序算法之冒泡排序(Bubble sort)代码
- c语言实现的带通配符匹配算法
- 浅析STL中的常用算法
- 算法之排列算法与组合算法详解
- C++实现一维向量旋转算法
- Ruby实现的合并排序算法
- C#折半插入排序算法实现方法