检测图像的模糊程度

par*_*ars 2 opencv image-processing blur motion-blur

我想检测图像的模糊程度,可能可以称为“模糊扩展”。我为此找到了一篇有用的论文:

http://www.cs.cmu.edu/~htong/pdf/ICME04_tong.pdf

我使用 OpenCV 并实现了本文中的所有步骤,但结果与本文的结果不同。

有人可以给我任何检测“模糊扩展”的建议吗?

Erm*_*mIg 6

您可以使用下一个算法检测模糊图像:

  1. 将图像转换为灰度格式。
  2. 计算灰度图像的最大绝对二阶导数(对于每个点):

    d[x,y] = max(abs(2*d[x,y] - d[x,y+1] -d[x,y-1]), abs(2*d[x,y] - d[x+1,y] -d[x-1,y]));
    
    Run Code Online (Sandbox Code Playgroud)
  3. 计算这个估计图像的直方图(最大绝对二阶导数)。

  4. 找到此直方图的上分位数 (0,999)。

  5. 如果该值小于阈值(大约 25% 的图像动态范围),则图像模糊。

  6. 如果要估计模糊值,请对缩小图像执行步骤 2-5。

您可以自己编写这些算法,也可以使用Simd 库实现中的算法(免责声明:我是作者)。

  • Simd::BgrToGraySimd::BgraToGray(对于第 1 步)。
  • Simd::AbsSecondDerivativeHistogram (对于步骤 2-5)。
  • Simd::ReduceGray2x2 (对于第 6 步)。