gpt4 book ai didi

python - 使用 OpenCV 进行图像模糊检测

转载 作者:太空宇宙 更新时间:2023-11-03 21:49:11 25 4
gpt4 key购买 nike

我正在研究图像的模糊检测。我在 OpenCV 中使用了拉普拉斯方法的方差

img = cv2.imread(imgPath)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
value = cv2.Laplacian(gray, cv2.CV_64F).var()

该功能在某些情况下失败,例如像素化模糊。它显示那些模糊图像比实际清晰图像更高的值。有没有更好的方法来检测像素化和运动模糊?

示例图片:

这张图片更清晰,但显示值 266.79

enter image description here

这张图片显示 446.51 的值。

enter image description here

另外这张图片看起来清晰多了但是显示值只有38.96

enter image description here

我需要将第一个和第三个分类为不模糊,而将第二个分类为模糊。

最佳答案

我可能来不及回答这个问题,但这是一种可能的方法。pypi 中的 blur_detector 库可用于识别图像中清晰与模糊的区域。这是创建图书馆的论文:https://arxiv.org/pdf/1703.07478.pdf

该库的运作方式是,它以多个比例查看图像中的每个像素,并在每个比例上执行离散余弦变换。然后过滤这些 DCT 系数,以便我们仅使用 high frequency 系数。然后将多个尺度的所有高频 DCT系数融合在一起并排序以形成多尺度融合和排序的高频变换系数选择这些排序系数的子集。这是一个可调参数,用户可以根据应用程序对其进行试验。所选 DCT 系数的输出然后通过最大池化发送,以保留多个尺度的最大激活。这使得该算法对于检测图像中的模糊区域非常稳健。

这是我在问题中提供的图像上看到的结果: enter image description here

注意:我使用了 opencv 中默认的 cascade_detectors 中的人脸检测器来选择感兴趣的区域。这两种方法(空间模糊检测+人脸检测)的输出可用于获取图像中的锐度图。

在这里我们可以看到,在清晰的图像中,眼睛区域的像素强度非常高,而对于模糊的图像,它很低。

您可以设置阈值来识别哪些图像清晰,哪些图像模糊。

这是生成上述结果的代码片段:

pip install blur_detector

import blur_detector
import cv2

if __name__ == '__main__':
face_cascade = cv2.CascadeClassifier('cv2/data/haarcascade_frontalface_default.xml')

img = cv2.imread('1.png', 0)
blur_map1 = blur_detector.detectBlur(img, downsampling_factor=1, num_scales=3, scale_start=1)
faces = face_cascade.detectMultiScale(img, 1.1, 4)
for (x, y, w, h) in faces:
cv2.rectangle(blur_map1, (x, y), (x + w, y + h), (255, 0, 0), 2)

img = cv2.imread('2.png', 0)
blur_map2 = blur_detector.detectBlur(img, downsampling_factor=1, num_scales=3, scale_start=1)
faces = face_cascade.detectMultiScale(img, 1.1, 4)
for (x, y, w, h) in faces:
cv2.rectangle(blur_map2, (x, y), (x + w, y + h), (255, 0, 0), 2)

img = cv2.imread('3.png', 0)
blur_map3 = blur_detector.detectBlur(img, downsampling_factor=1, num_scales=3, scale_start=1)
faces = face_cascade.detectMultiScale(img, 1.1, 4)
for (x, y, w, h) in faces:
cv2.rectangle(blur_map3, (x, y), (x + w, y + h), (255, 0, 0), 2)

cv2.imshow('a', blur_map1)
cv2.imshow('b', blur_map2)
cv2.imshow('c', blur_map3)
cv2.waitKey(0)

要了解有关模糊检测器算法的详细信息,请查看此 github 页面:https://github.com/Utkarsh-Deshmukh/Spatially-Varying-Blur-Detection-python

关于python - 使用 OpenCV 进行图像模糊检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57233870/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com