【问题标题】:Compute the blurriness along x direction using sobel operator in OpenCV in Python在 Python 中使用 OpenCV 中的 sobel 算子计算沿 x 方向的模糊度
【发布时间】:2020-08-22 06:06:59
【问题描述】:

我们需要检测可调镜头产生的图像是否模糊。

我们希望找到模糊度的代理度量。

我目前的想法是首先沿 x 方向应用 Sobel,因为跳跃或条纹大多沿此方向。然后计算x方向的边际均值,最后计算出这些边际均值的标准差。

我们希望这个标准清晰的图像更大模糊的图像更小,因为清晰的图像应该具有较大的强度或更大的像素值跳跃。

但我们得到相反的结果。我们如何改进这种模糊度测量?

def sobel_image_central_std(PATH):
    # use the blue channel
    img = cv2.imread(PATH)[:,:,0]

    # extract the central part of the image
    hh, ww = img.shape
    hh2 = hh // 2 
    ww2 = ww// 2
    hh4 = hh // 4
    ww4 = hh //4
    img_center = img[hh4:(hh2+hh4), ww4:(ww2+ww4)]

    # Sobel operator
    sobelx = cv2.Sobel(img_center, cv2.CV_64F, 1, 0, ksize=3)
    x_marginal = sobelx.mean(axis = 0)

    plt.plot(x_marginal)
    return(x_marginal.std())

模糊 #1

模糊 #2

清除#1

清除#2

【问题讨论】:

标签: python opencv blur sobel


【解决方案1】:

一般来说:

Is there a way to detect if an image is blurry?

您可以将此计算与您正在搜索中心角的your other question 结合使用。

一旦有了角度(以及中心,可能在图像之外),您就可以进行轴变换以移除圆锥的圆形分量。相反,您会得到 x(半径)和 y(角度),其中 y 将沿着圆弧延伸。

也许您可以从相机设置中获得图像的中心。 然后你不需要使用中心角的边缘的交点来计算它。或者,如果对所有图像都已修复,则只需手动执行一次。

看看polar coordinate systems

由于圆锥的形状,图像在峰值处会更密集,但这应该是一个固定因素。但这可能会在计算沿变换图像的模糊度时使结果产生偏差。

因此,您可以通过创建带有圆形线条的合成锥形图像并对其进行转换来纠正此问题。同样,需要一些尝试和错误。 但它应该提供一些可以用来纠正“模糊偏差”的遮罩。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-31
    • 2020-03-12
    • 2014-04-18
    • 2022-01-23
    相关资源
    最近更新 更多