我正在编写一个脚本,通过应用拉普拉斯滤波器并计算标准来使用 OpenCV 检测模糊图像,但是存在一个问题,包含运动模糊的图像的标准与包含任何其他类型模糊的图像非常接近。(我的建议是找到检测不合适的图像,这些图像无法检测到其上的对象,例如包含运动模糊的狗图像)
我使用这段代码cv2.Laplacian(image, cv2.CV_64F, ksize=3 ).std()
来查找模糊率,并将 std < 40 的阈值视为模糊图像,因此我想要一种方法来区分包含运动模糊图像和其他类型模糊的图像
我正在编写一个脚本,通过应用拉普拉斯滤波器并计算标准来使用 OpenCV 检测模糊图像,但是存在一个问题,包含运动模糊的图像的标准与包含任何其他类型模糊的图像非常接近。(我的建议是找到检测不合适的图像,这些图像无法检测到其上的对象,例如包含运动模糊的狗图像)
我使用这段代码cv2.Laplacian(image, cv2.CV_64F, ksize=3 ).std()
来查找模糊率,并将 std < 40 的阈值视为模糊图像,因此我想要一种方法来区分包含运动模糊图像和其他类型模糊的图像
您可以使用以下拉普拉斯响应方差:
cv2.Laplacian(gray_image, cv2.CV_64F).var()
更多详细信息,请访问https://www.pyimagesearch.com/2015/09/07/blur-detection-with-opencv/
无需使用对称高斯进行过滤,它是每个方向上的模糊内核,只需使用两个 1D 内核进行过滤:
一个在 x 方向(如果你愿意的话,一个行向量内核),一个在 y 方向(列向量)。
如果两个方向的“模糊度”相同,一般是模糊的。如果它在一个方向上比在另一个方向上高得多:运动模糊。
您必须调整“模糊”的阈值以适应对角线运动模糊。