估计图像清晰度的另一种非常简单的方法是使用拉普拉斯(或 LoG)滤波器并简单地选择最大值。如果您预计会有噪声(即选择第 N 个最高对比度而不是最高对比度),那么使用 99.9% 分位数等稳健的度量可能会更好。如果您预计图像亮度会发生变化,则还应该包括一个预处理步骤来标准化图像亮度/对比度(例如直方图均衡化)。
我已经在 Mathematica 中实现了 Simon 的建议和这一建议,并在一些测试图像上进行了尝试:
第一个测试使用具有不同内核大小的高斯滤波器模糊测试图像,然后计算模糊图像的 FFT 并取 90% 最高频率的平均值:
testFft[img_] := Table[
(
blurred = GaussianFilter[img, r];
fft = Fourier[ImageData[blurred]];
{w, h} = Dimensions[fft];
windowSize = Round[w/2.1];
Mean[Flatten[(Abs[
fft[[w/2 - windowSize ;; w/2 + windowSize,
h/2 - windowSize ;; h/2 + windowSize]]])]]
), {r, 0, 10, 0.5}]
结果为对数图:
5条线代表5张测试图像,X轴代表高斯滤波器半径。图形逐渐减小,因此 FFT 是衡量锐度的一个很好的方法。
这是“最高 LoG”模糊度估计器的代码:它只是应用 LoG 滤波器并返回滤波器结果中最亮的像素:
testLaplacian[img_] := Table[
(
blurred = GaussianFilter[img, r];
Max[Flatten[ImageData[LaplacianGaussianFilter[blurred, 1]]]];
), {r, 0, 10, 0.5}]
结果为对数图:
这里未模糊图像的分布要好一些(2.5 vs 3.3),主要是因为该方法仅使用图像中最强的对比度,而 FFT 本质上是整个图像的平均值。函数也减少得更快,因此设置“模糊”阈值可能更容易。