您的位置:首页 > 其它

【图像处理】SFR算法详解3

2017-09-30 10:22 267 查看
原文地址:http://blog.csdn.net/jaych/article/details/51030939

本篇为SFR算法详解系列的第三篇,前面两篇为: 
《SFR算法详解1》:什么是MTF,MTF50,MTF50P 
《SFR算法详解2》:算法过程描述

本篇主要根据第二篇中的算法流程,描述前面的几个流程及其相关原理。这里参考标准中的附录C算法原理及mitre SFR的代码实现,并结合自己需要对其进行优化。


1、获取图像ROI

这里从拍摄的图像(一般为RGB)中截取ROI区域,并将其转换为Gray。

有个问题就是:用于SFR算法的图像大小多大比较合适?ROI的区域大小信息并没有严格定义,但会有影响,具体各个方面的要求可参考如下: 

对于定义ROI,有以下几个要求:(针对垂直的斜边) 

1) 对于垂直的斜边,ROI的宽度要小于高度。 

2)在ROI中,只允许出现一个斜边,并且大致居中。 

3)在底部或者顶部,比例小的那一部分不能低于5个像素 

4)在中心位置,边界到中间斜边的距离需要在20至60个像素之间 

5)高度需要在80到300之间。 

6)ROI中避免污点,保证图像边界基本连续。

而以下的图片已经很能说明问题如何解决。 




2、线性化图像

主要是对获取到的斜边数据进行伽马变换,获取到线性的图像数据。

为什么要获取线性的图像数据? 

在SFR的标准算法中,建议的算法是用OECF将图像数据转化为线性数据。因此需要讨论下我们获取到的数据是否线性数据。线性跟非线性应该怎样去理解。

通常,sensor获取到的数据是线性的,sensor上每个pixel都是根据物体所呈现出来的颜色强度转化为对应的数值。但是,由于人眼对颜色的感知不是线性的,因此,通常在相机内部处理中,都有对转化后的图像进行伽马变换,变换后的图像就不是线性的,使得图像数据能够适应人眼。而通常取值为2.2的伽马变换。

为了获取到线性的图像数据,需要抵消这个伽马变换,在算法上,我们可以采取1/2.2的伽马变换来抵消。

在imatest的SFR算法中,也是采用的伽马变换来获得线性数据。

• The cropped image is linearized, i.e., the pixel levels are adjusted to remove the gamma encoding applied by the camera. (Gamma is adjustable with a default of 0.5). 

参考:http://www.imatest.com/docs/sharpness/#calc

在这里,我们根据前面的GRAY数据,处理获得线性化数据ϕ(p,r),其中p表示像素的个数,r表示图像的行数。


3、找到图像中的矩心centroid

这里是为了获取图像每一行的矩心centroid,因为我们是要计算出边缘的回归线,经过矩心的回归线是最佳的。

对于图像数据,在边缘的地方,我们可以认为每一行都是边缘扩散函数的估计值,这些边缘扩散函数的估计值能够通过差分计算获得对应的线扩散函数。这里先计算每一行的矩心: 



在代码中对应的函数为:locate_centroids(),size_y为ROI的行数,shifts[]为每一行上矩心的位置,temp[]为每一行矩心距离图像中心的Y的数值。方向表示数值符号为正的方向。



版权声明:本文为博主原创文章,未经博主允许不得转载。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息