Imatest 学习:Sharpness

Imatest 学习:Sharpness


sharpness的测量方法

sharpness在图像的边缘更明显,一般用图像的边缘响应来测量。
sharpness有几种测量方法:10%-90%上升距离法,MTF,空间频域,斜边算法等。

1.10-90%上升距离法

我查了官网资料,但是刚开始看完很迷惑。官网资料描述很少,里的原话是这样的:
Image sharpness can be measured by the “rise distance” of an edge within the image.

With this technique, sharpness can be determined by the distance of a pixel level between 10% to 90% of its final value.
在这里插入图片描述
假设,在一张白色图像里有一个黑色条纹,那么黑色条纹边缘的像素亮度由里到外是逐渐升高的,最暗的地方是黑色条纹的中间部分,最亮的地方在白色区域,而上图中亮度变化的快慢就表示成像系统的清晰程度。取10%-90%这一距离来表示清晰度,距离越大,说明边缘像素的亮度变化越缓慢,黑白交界处就越模糊,清晰度就越低。

2.MTF

对于单个镜头的解析力,一般用MTF(Modulation Transfer function:调制传递函数)来测量,MTF 是调制度随频率的变化而变化的函数,调制度M(f)= C(f)/C(0) ,其中,C(f)= (Vmax-Vmin)/(Vmax+Vmin),V是亮度,f是频率。C(0)即空间频率为0时的对比度,用极限频率来理解,当频率极低时,可以认为对比度几乎没有损失接近1,所以MTF曲线最大值接近于1(经过镜头清晰度肯定有一定的损耗),一般来说,MTF值衰减到50%,对应的空间频率就是该镜头的解析力,MTF衰减到3%,是人眼能分辨到的极限频率。这种方法需要用昂贵的正弦光栅,主要用在光学系统中,而在成像系统(光学系统+sensor+算法等),一般选用更简洁便宜的SFR,下面会介绍。

MTF 曲线

3.SFR

SFR是基于MTF的方法做了简化,不用去测不同频率的黑白线对得到一个对比度随频率变化的曲线。SFR的前提条件是:任意一条线由黑到白(或由白到黑)的过程由不同频率的黑白线对组成。
怎么理解这句话?一条黑线,不是严格意义上的黑线,图像都有衰减,拍出来的黑线边缘其实是慢慢由黑到白的,用数学模型,就是亮度随空间位置的变化而变化的未知曲线。在频率分析就是,由不同频率不同振幅不同相位的正弦信号叠加而成的信号,也就是不同频率的黑白线对组成了。
SFR 为什么是斜边而不是垂直或水平抑或是较大的角呢?
答:这个我也不知道,我还在思索中,文档没能看懂。。。
SFR的优点大致是:
1.简单省事,只要一条斜边就能测出较为准确的解析力,很方便快捷。
2.对camera的降噪能力要求不高。因为噪点对测量的准确度影响不大。
缺点:
1.部分情形测试不大准确。当图像锐度很高,或者噪点很大的时候,测出来的解析力会很高,尤其是斜边的对比度太大,一般控制在10:1,推荐用4:1的对比度的斜边测,对比度太高,容易出现截止失真或饱和失真。
2.当频率高于1/2 奈奎斯特频率时,测出的结果不一致。
3.对锐度敏感,对高对比度(>10)的敏感,对低对比度(<2)的不敏感。推荐对比度4。

上面的SFR是基于斜边计算的,这种方法是最常用的,还有一种是基于圆边计算SFR的方法,主要是为了弥补斜边算法的不足。如下图。
圆边法chart
这种圆边计算SFR的原理和斜边类似,主要的优势在于,测试结果更准确。因为镜头是圆形的,镜头的的清晰度衰减和畸变程度和到镜头轴心的距离有关。所以,斜边边缘各位置的清晰度是不一致的。它们的线扩展函数LSF曲线如下:
在这里插入图片描述
斜边边缘的清晰度不是一致的。测试的时候,意味着圆边的中心和镜头的光轴中心对齐。
对LSF函数做傅里叶转换,得到MTF(调制传递函数)。所以回到开头说的,不管是用圆边还是斜边测SFR,其实都是一种简易的MTF测试的应用,最终要得到的还是MTF曲线。


  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
自动对焦算法是摄影中非常重要的一部分,它可以通过调整相机镜头的焦距,从而使得拍摄的图像更加清晰。下面介绍几种常见的Python自动对焦算法: 1. 基于图像锐度的自动对焦算法 该算法通过计算图像的锐度值来实现对焦。当图像的锐度值最大时,说明图像最清晰,此时相机镜头的焦距应该是最佳的。可以通过计算图像中每个像素的梯度值,然后将其平均值作为图像的锐度值。代码如下: ``` import cv2 def calculate_sharpness(image): gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) laplacian = cv2.Laplacian(gray, cv2.CV_64F) return laplacian.var() def autofocus(camera): camera.capture('photo.jpg') image = cv2.imread('photo.jpg') sharpness = calculate_sharpness(image) while sharpness < 100: camera.capture('photo.jpg') image = cv2.imread('photo.jpg') sharpness = calculate_sharpness(image) return image ``` 2. 基于对比度的自动对焦算法 该算法通过计算图像的对比度值来实现对焦。当图像的对比度值最大时,说明图像最清晰,此时相机镜头的焦距应该是最佳的。可以通过计算图像中每个像素的灰度值的标准差,然后将其作为图像的对比度值。代码如下: ``` import cv2 def calculate_contrast(image): gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) mean, std = cv2.meanStdDev(gray) return std[0][0] def autofocus(camera): camera.capture('photo.jpg') image = cv2.imread('photo.jpg') contrast = calculate_contrast(image) while contrast < 10: camera.capture('photo.jpg') image = cv2.imread('photo.jpg') contrast = calculate_contrast(image) return image ``` 这些算法是比较简单的自动对焦算法,实际应用中可能需要更加复杂的算法来实现更加精确的对焦效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值