zoukankan      html  css  js  c++  java
  • 利用Laplacian变换进行图像模糊检测

    检测图片是否模糊有很多方法(这篇文章review了36种),比如FFT和variation of Laplacian等,前者在操作到时候需要定义高频的量有多低和多高来区分图片是模糊的,操作起来比较麻烦;而后者可以输出一个浮点数来代表图片的模糊程度。

    这里我们用的方法为Pech-Pacheco在2000年提出的Laplacian方法(具体可以查看这篇文章)。Laplacian方法能够进行这项工作的原因是Laplacian算子是用来衡量图片的二阶导,能够强调图片中密度快速变化的区域,也就是边界,故常用于边界检测。在正常图片中边界比较清晰因此方差会比较大;而在模糊图片中包含的边界信息很少,所以方差会较小。

    这个方法在opencv中只是一行代码的事:cv2.Laplacian(image, cv2.CV_64F).var()。具体操作为:用图片的1个通道用以下3x3的核进行卷积,然后计算输出的方差,如果方差小于一定值则图片视为模糊。

    [[0,  1, 0],
     [1, -4, 1],
     [0,  1, 1]]
    

    代码:

    import cv2
    
    image = "test.jpg"
    frame = cv2.imread(image)
    img2gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)  # 将图片压缩为单通道的灰度图
    # img_resize = cv2.resize(img2gray, (112, 112))  # 为方便与其他图片比较可以将图片resize到同一个大小
    score = cv2.Laplacian(img2gray, cv2.CV_64F).var()
    print "Laplacian score of given image is ", score
    if score > 100:  # 这个值可以根据需要自己调节,在我的测试集中100可以满足我的需求。
        print "Good image!"
    else:
        print "Bad image!"
    

    比如这张图片的输出分值为4.337

    而这张为153.783

    参考

    1. https://www.pyimagesearch.com/2015/09/07/blur-detection-with-opencv/
  • 相关阅读:
    SDOI2011古代朱文
    LIS 堆优化
    ZR2019 广州 游记
    LG2709 小B的询问
    [SCOI2009] 生日礼物
    [SDOI2008]沙拉公主的困惑
    [LG3396]哈希冲突
    ZROI2018.8.2 菜鸡互啄杯组队 ACM 赛
    ZROI 菜鸡互啄杯 III
    [LG4016] 负载平衡问题
  • 原文地址:https://www.cnblogs.com/arkenstone/p/7900978.html
Copyright © 2011-2022 走看看