Jemma,一只超级甜美,极其活泼可爱的家养米格鲁猎犬,可能是家里有史以来照片最多的狗狗了。从我在她八周大的时候遇到她开始,三年以来,我已经累积了6000 多张她的照片。

过度了吧?

或许是吧。但是我喜欢狗狗。非常喜欢。尤其是米格鲁猎犬。所以应该不足为奇,作为狗狗主人的我,会花很多时间用 Jemma 最喜欢的玩具和她玩拔河游戏,或者和她在厨房地板上滚来滚去相互打闹。当然,我会用我的 iphone 拍摄大量她的照片。

在刚刚过去的这个周末,我坐下来想在 iphoto 中整理这些海量的照片。这不仅仅意味着巨大的工作量,因为我很快注意到一个现象——其中充斥着大量模糊的照片。

主要因为我的摄影技术比较low,Jemma又特别活泼,跑来跑去,有时候看到我拍照,它又吓得缩起来发抖,所以我抓拍的效果不是很好,导致有多照片都是模糊的

作为一个普通人,我可能会想软件设计者们会开发出新功能来检测出这些模糊的照片(或者至少把他们移到一个单独的文件夹)。但是作为一个计算机视觉科学家,我是不会这样想的。

相反,我打开编辑器很快就编写了一个 Python 脚本,用 OpenCV 来执行模糊检测。

在这篇文章剩下的部分里,我将会展示如何用 OpenCV、Python 和拉普拉斯算子来计算图片中的模糊量。到文章结束,读者就能应用拉普拉斯方差算法来检测图片中的模糊量。

拉普拉斯方差算法(Variance of the Laplacian)

图1,用拉普拉斯算子与输入图像做卷积

我检测图片模糊量的第一步就是去拜读这篇优秀的综述文献——《Analysis of focus measure operators for shape-from-focus》[2013 Pertuz et al.]。在这篇文献中,Pertuz 等人论述了近 36 种不同的图片清晰度评价(focus measure)方法。

如果读者了解信号处理,就会知道最直接的方法就是计算图片的快速傅里叶变换,然后查看高低频的分布。如果图片有少量的高频成分,那么该图片就可以被认为是模糊的。然而,区分高频量多少的具体阈值却是十分困难的,不恰当的阈值将会导致极差的结果。

相反,如果我们能用计算出的一个具体浮点数值来表征图片的模糊程度,岂不是十分优雅?

Pertuz 等人讨论了很多种方法来计算“模糊度”。其中的一些方法简单明了,仅仅使用了像素灰度值的统计数据,其他的一些相比更加先进并且是基于特征的,使用了局部二值模式。

在快速浏览论文之后,我开始着手实现我找到的拉普拉斯方差算法——出自 Pech-Pacheco 等人 2000 年模式识别国际会议论文:《Diatom autofocusing in brightfield microscopy: a comparative study》

这种方法简洁明了,论证翔实,并且可以通过仅仅一行代码来实现:

更多相关文章

  1. 解决SimpleCV的Hello World程序无法显示照片
  2. Android——Tomcat版本更新下载+头像照片上传到Tomcat
  3. 跟随屏幕大小自动调整bitmap大小(横竖屏拍摄的照片均可)
  4. Android开发 处理拍照完成后的照片角度
  5. Android开源代码解读の地图照片应用Panoramio的实现详解(六)
  6. Unity Android使用相机拍摄照片并在其上增加一个3D对象

随机推荐

  1. Android USB挂载
  2. Android中Log信息的输出方法
  3. sqlite数据库默认自增标号RecNo与integer
  4. 安卓Android大量项目源码实例
  5. 在4.0以上系统中应用出现2.3版本的系统UI
  6. 2013.07.11——— android MediaRecorder
  7. Android编码规范
  8. 【翻译】(8-补丁1)Android接口定义语言(AI
  9. Android之Google Map(一)
  10. android 多项对话框