计算图像的模糊度和清晰度

时间:2012-12-20 06:46:32

标签: c++ image-processing opencv computer-vision

  

可能重复:
  Is there a way to detect if an image is blurry?

如何使用opencv计算给定图像的模糊度和清晰度? opencv中是否有任何功能可以执行此操作?如果opencv中没有函数我该如何实现呢?不会有什么想法......

输入将是图像,输出应该是图像的模糊度和清晰度。

2 个答案:

答案 0 :(得分:3)

我不知道opencv。

如果我试图近似测量想象在锐利模糊光谱上的位置,我会从观察开始,从相邻像素之间的对比度可以看出图像部分的清晰度 - 像max(c1 * abs(r1 - r2), c2 * abs(g1 - g2), c3 * abs(b1 - b2))这样的东西,其中c1-3衡量每个红色,绿色和蓝色通道的感知重要性,两个像素是(r1,g1,b1)和(r2,g2,b2))。

可能进行许多调整,例如提高每种颜色对功率的贡献,以强调亮度标度的暗(功率<1)或亮(功率> 1)端的变化。请注意,max()方法分别考虑每个颜色通道的清晰度:尽管只有一个通道发生变化,但从(255,255,255)到(0,255,255)的变化非常显着。

你可能会发现将RBG转换为另一种颜色表示更好,例如Hue / Saturation / Value(在线会有很多网站解释HSV空间和转换公式)。

从照片上看,我们通常有兴趣知道图像的对焦部分是清晰的(由于浅景深导致的前景/背景模糊/散景是正常且经常需要的质量) - 最明显的指示在图像的某些部分是高对比度,表明你想要相邻像素对比度的最大值。也就是说,一些聚焦的像素仍然可以具有非常低的局部对比度(例如,纯色表面的图片)。此外,传感器上的受损像素元件,透镜/传感器上的污垢以及高ISO /长曝光噪声都可能表现为极高对比度的斑点。所以你的结果的有效性总是值得怀疑,但它可能是一个有用的时间比例。

答案 1 :(得分:2)

我建议您对图像进行频繁分析。高频段的能量将告诉您图像非常锐利,而低频段的能量通常意味着图像模糊。对于计算频谱,您可以使用FFTW库。

此致