首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >图像/视频序列中的模糊检测

图像/视频序列中的模糊检测
EN

Stack Overflow用户
提问于 2011-03-03 19:49:19
回答 4查看 20.9K关注 0票数 34

我曾在照片stackexchange上问过这一点,但我认为它在这里可能也是相关的,因为我想在我的实现中编程实现这一点。

我正在尝试为我的成像管道实现一个模糊检测算法。我想要检测的模糊都是-

1)相机抖动:当快门速度较小时,使用移动/抖动的手拍摄的照片。

2)镜头聚焦错误-(景深)问题,例如聚焦在不正确的对象上会导致一些模糊。

3)运动模糊:场景中快速移动的对象,使用不够高的快门速度捕获。例如,一辆在夜间行驶的汽车可能会在图像中显示其前灯/尾灯的轨迹为模糊。

如何检测这种模糊,并以某种方式对其进行量化,以便根据计算出的“模糊度量”做出一些决策?

模糊检测背后的理论是什么?

我正在寻找很好的阅读材料,使用它我可以用C/Matlab实现一些算法。

谢谢。

-AD。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-03-03 20:58:39

当你考虑原因时,运动模糊和相机抖动是一回事:相机和物体的相对运动。你提到了慢的快门速度--这在两种情况下都是罪魁祸首。

焦点未命中是主观的,因为它们取决于摄影师的intent。如果不知道摄影师想要关注什么,就不可能做到这一点。即使你do知道你想要关注什么,它仍然不是微不足道的。

抛开这种真实感不谈,让我向你保证,模糊检测实际上是非常活跃的研究领域,并且已经有一些度量标准可以在你的图像上试用。以下是我最近使用的一些方法:

  • 边缘宽度。基本上,对图像执行边缘检测(使用Canny或其他方法),然后测量边缘的宽度。模糊的图像会有更宽的边缘,更分散。更清晰的图像将具有更薄的边缘。谷歌搜索Marziliano的“无参考感知模糊度量”--这是一篇著名的论文,它很好地描述了这种方法,足以实现完整的实现。如果您正在处理运动模糊细节,则边缘将在精细细节的motion.
  • Presence方向上变得模糊(宽)。看看我对this question (编辑过的part).
  • Frequency领域方法)的回答。获取图像的DCT系数的直方图(假设您使用的是JPEG)可以让您了解图像有多少细节。你可以直接从This is how文件中获取DCT系数。如果非DC项的计数较低,则图像很可能是模糊的。这是最简单的方法--在频域中有更复杂的方法。

还有更多,但我觉得这应该足以让你开始。如果你想了解更多关于这两点的信息,可以打开Google Scholar四处看看。特别是,请查看Marziliano论文的参考文献,以了解过去尝试过的内容。

票数 38
EN

Stack Overflow用户

发布于 2016-11-18 14:35:57

有一篇很棒的论文,叫做"analysis of focus measure operators for shape-from-focus“(https://www.researchgate.net/publication/234073157_Analysis_of_focus_measure_operators_in_shape-from-focus),它对30种不同的方法进行了比较。

在所有不同的技术中,基于“拉普拉斯”的方法似乎具有最好的性能。大多数图像处理程序,如MATLAB或OPENCV,都已经实现了这种方法。下面是一个使用OpenCV的示例:http://www.pyimagesearch.com/2015/09/07/blur-detection-with-opencv/

票数 9
EN

Stack Overflow用户

发布于 2021-05-29 01:43:04

这里要注意的一个要点是,图像可以有一些模糊区域和一些清晰区域。例如,如果图像包含肖像摄影,则前景中的图像是清晰的,而背景是模糊的。在体育摄影中,聚焦的对象是清晰的,背景通常是运动模糊的。检测图像中这种空间变化的模糊的一种方法是在图像中的每个位置运行频域分析。其中一篇论文是“基于梯度幅度的多尺度融合和排序变换系数的空间变化模糊检测”(cvpr2017)。

作者查看了每个像素的多分辨率DCT系数。这些DCT系数被分成低频带、中频带和高频带,从中只选择高频系数。然后将DCT系数融合在一起并排序,以形成多尺度融合和排序的高频变换系数,选择这些系数的子集。所选系数的数目是特定于应用的可调参数。然后,通过最大池化块发送所选系数子集,以在所有尺度内保持最高激活。这会将模糊贴图作为输出,然后通过后期处理步骤发送该输出,以细化贴图。该模糊图可用于量化图像各个区域中的清晰度。为了获得单个全局度量来量化整个图像的模糊度,可以使用该模糊图的平均值或该模糊图的直方图

以下是关于该算法如何执行的一些示例结果:

图像中的锐化区域在blur_map中具有高强度,而模糊区域具有低强度。

指向该项目的github链接是:https://github.com/Utkarsh-Deshmukh/Spatially-Varying-Blur-Detection-python

这个算法的python实现可以在pypi上找到,它可以很容易地安装,如下所示:

pip install blur_detector

生成模糊贴图的示例代码片段如下所示:

代码语言:javascript
运行
复制
import blur_detector
import cv2
if __name__ == '__main__':
    img = cv2.imread('image_name', 0)
    blur_map = blur_detector.detectBlur(img, downsampling_factor=4, num_scales=4, scale_start=2, num_iterations_RF_filter=3)

    cv2.imshow('ori_img', img)
    cv2.imshow('blur_map', blur_map)
    cv2.waitKey(0)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5180327

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档