当前位置: 首页 > news >正文

使用 OpenCV 进行图像模糊度检测(拉普拉斯方差方法)

写在前面


  • 工作中遇到,简单整理
  • 人脸识别中,对于模糊程度较高的图像数据,识别率低,错误率高。
  • 虽然使用 AdaFace 模型,对低质量人脸表现尤为突出。
  • 但是还是需要对 模糊程度高的图像进行丢弃处理
  • 当前通过阈值分类,符合要求的进行特性提取
  • 实际应用中,可以维护一个质量分数
  • 比如由 模糊程度图片字节大小人脸姿态评估(欧拉角)等 算出一个综合质量分,用于人脸归类/聚类
  • 理解不足小伙伴帮忙指正

对每个人而言,真正的职责只有一个:找到自我。然后在心中坚守其一生,全心全意,永不停息。所有其它的路都是不完整的,是人的逃避方式,是对大众理想的懦弱回归,是随波逐流,是对内心的恐惧 ——赫尔曼·黑塞《德米安》


模糊度检测算法来自 :https://pyimagesearch.com/2015/09/07/blur-detection-with-opencv/

具体实现方式小伙伴可直接看原文

这种方法起作用的原因是由于拉普拉斯算子本身的定义,它用于测量图像的二阶导数。拉普拉斯突出显示包含快速强度变化的图像区域,与 Sobel 和 Scharr 算子非常相似。而且,就像这些运算符一样,拉普拉斯通常用于边缘检测。这里的假设是,如果图像包含高方差,则存在广泛的响应,包括边缘类和非边缘类,代表正常的焦点图像。但是,如果方差非常低,则响应的分布很小,表明图像中的边缘非常小。众所周知,图像越模糊,边缘就越少

下面为原文的 Demo

#!/usr/bin/env python
# -*- encoding: utf-8 -*-
"""
@File    :   detect_blur.py
@Time    :   2023/07/24 22:57:51
@Author  :   Li Ruilong
@Version :   1.0
@Contact :   liruilonger@gmail.com
@Desc    :   图片模糊度检测
"""# here put the import lib# import the necessary packages
from imutils import paths
import cv2
import osdef variance_of_laplacian(image):gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# compute the Laplacian of the image and then return the focus# measure, which is simply the variance of the Laplacianreturn cv2.Laplacian(gray, cv2.CV_64F).var()# loop over the input images
for imagePath in paths.list_images("./res/mh"):# load the image, convert it to grayscale, and compute the# focus measure of the image using the Variance of Laplacian# methodimage = cv2.imread(imagePath)fm = variance_of_laplacian(image)text = "Not Blurry"print(fm)# if the focus measure is less than the supplied threshold,# then the image should be considered "blurry"if fm < 100:text = "Blurry"# show the imagefile_name = os.path.basename(imagePath)cv2.imwrite(str(fm)+'__' + file_name , image)

核心代码:

cv2.Laplacian(gray, cv2.CV_64F).var()

如果为 Image.image ,可以使用下的方式

def variance_of_laplacian(image):"""@Time    :   2023/07/25 01:57:44@Author  :   liruilonger@gmail.com@Version :   1.0@Desc    :   模糊度检测Args:Returns:void"""numpy_image = np.array(image)cv2_image = cv2.cvtColor(numpy_image, cv2.COLOR_RGB2BGR)gray = cv2.cvtColor(cv2_image, cv2.COLOR_BGR2GRAY)# compute the Laplacian of the image and then return the focus# measure, which is simply the variance of the Laplacianreturn cv2.Laplacian(gray, cv2.CV_64F).var()

实际测试中发现,阈值设置为 100 相对来说比较合适,当然如何数据集很大,可以考虑 提高阈值,当模糊度大于 1000 时,一般为较清晰图片,低于 100 时,图片模糊严重

下面为对一组较模糊数据进行检测

在这里插入图片描述

最后一个图像,模糊度为 667 ,其他为 200 以内

(AdaFace) C:\Users\liruilong\Documents\GitHub\AdaFace_demo>python detect_blur.py
130.99918569797578
97.54477372302556
70.30346984100659
95.56028915335366
77.70006004883219
107.2065965492792
93.43007114319839
75.44132565995248
127.50238903320515
98.11810838476116
69.49917570127641
132.46578324273048
99.2095025510204
92.97255942246558
93.33812691062155
667.4883318795927

博文部分内容参考

© 文中涉及参考链接内容版权归原作者所有,如有侵权请告知 😃


https://pyimagesearch.com/2015/09/07/blur-detection-with-opencv/


© 2018-2023 liruilonger@gmail.com, All rights reserved. 保持署名-非商用-相同方式共享(CC BY-NC-SA 4.0)

http://www.lryc.cn/news/102371.html

相关文章:

  • 神经网络简单介绍
  • 16位S912ZVML32F3MKH、S912ZVML31F1WKF、S912ZVML31F1MKH混合信号MCU,适用于汽车和工业电机控制应用。
  • 力扣 509. 斐波那契数
  • 使用 DolphinDB TopN 函数探索高效的Alpha因子
  • 超聚变和厦门大学助力兴业银行构建智慧金融隐私计算平台,助力信用卡业务精准营销...
  • docker 的compose安装
  • JavaScript---事件对象event
  • Day 15 C++对象模型和this指针
  • HarmonyOS/OpenHarmony元服务开发-卡片生命周期管理
  • 软件工程01
  • UML/SysML建模工具更新(2023.7)(1-5)有国产工具
  • Mac plist文件
  • 基于Java+SpringBoot+vue前后端分离校园周边美食探索分享平台设计实现
  • 【openwrt】package介绍
  • vue 封装一个鼠标拖动选择时间段功能
  • ubuntu22.0安装Barrier局域网共享鼠标键盘
  • ffmpeg常用功能博客导航
  • shopee,lazada,etsy店群如何高效安全的管理
  • 【计算复杂性理论】证明复杂性(八):命题鸽巢原理(Propositional Pigeonhole Principle)的指数级归结下界
  • 使用DataX实现mysql与hive数据互相导入导出
  • 语音转录成文本:AI Transcription for mac
  • [nlp] TF-IDF算法介绍
  • 一些感想,写在8月之前
  • 推动数字经济高质量发展需破解三大挑战
  • Pycharm工具Python开发自动添加注释(详细)
  • RUST 有哪些整型?
  • 【Python 实战】---- 批量识别图片中的文字,存入excel中【使用百度的通用文字识别】
  • 探索前端图片如何携带token进行验证
  • 飞桨AI Studio可以玩多模态了?MiniGPT4实战演练!
  • C++笔记之++i和i++是原子操作吗?