gpt4 book ai didi

python - 去模糊图像

转载 作者:行者123 更新时间:2023-12-02 06:43:39 28 4
gpt4 key购买 nike

我正在尝试用 Python 对图像进行去模糊处理,但遇到了一些问题。这是我尝试过的,但请记住,我不是这个主题的专家。根据我的理解,如果您知道点扩散函数,您应该能够通过执行反卷积非常简单地对图像进行去模糊。但是,这似乎不起作用,我不知道我是否在做一些愚蠢的事情,或者我只是没有正确理解事情。在 Mark Newman 的 Computational Physics 一书中(使用 Python),他在问题 7.9 中谈到了这个主题。在这个问题中,他提供了一张他故意使用高斯点扩散函数 (psf) 模糊的图像,问题的目标是使用高斯去模糊图像。这是通过将模糊图像的 2D FFT 除以 psf 的 2D FFT 然后进行逆变换来实现的。这相当有效。

为了扩展这个问题,我想对用故意失焦的相机拍摄的真实图像进行去模糊处理。于是我架起相机,拍了两张照片。第一组照片是焦点。第一个是在一个完全黑暗的房间里的一个非常小的 LED 灯,第二个是一张上面有文字的纸(使用闪光灯)。然后,在没有改变任何距离或任何东西的情况下,我改变了相机的焦点设置,使文本非常失焦。然后我用闪光灯拍了一张文字的照片,并拍摄了 LED 的第二张照片(没有闪光灯)。这是模糊的图像。

Blurred Text

Blurred Point Light Source

现在,根据我的理解,模糊点光源的图像应该是点扩散函数,因此我应该能够使用它来去模糊我的图像。问题是,当我这样做时,我得到的图像看起来像噪音。在做了一些研究之后,似乎在使用去卷积技术时噪声可能是一个大问题。然而,鉴于我已经测量了我认为是确切的点扩散函数,我很惊讶噪声会在这里成为一个问题。

我尝试过的一件事是用 1 或 epsilon 替换 psf 变换中的小值(小于 epsilon),并且我尝试了使用 epsilon 的大范围值进行此操作。这产生的图像不仅是噪声,而且也不是图像的去模糊版本;它看起来像是原始(非模糊)图像的奇怪、模糊版本。这是我的程序中的图像(您可以忽略 sigma 的值,该值未在此程序中使用)。

enter image description here

我相信我正在处理噪音问题,但我不知道为什么,也不知道该怎么办。任何建议将不胜感激(请记住,我不是这方面的专家)。

请注意,我故意不发布代码,因为我认为这在这一点上有些无关紧要。但如果有人认为这会有用,我会很乐意这样做。我不认为这是一个编程问题,因为我使用了相同的技术,并且当我具有已知的点扩散函数时它可以正常工作(例如当我将原始对焦图像的 FFT 除以离焦图像的 FFT 时) -聚焦图像,然后逆变换)。我只是不明白为什么我似乎不能使用我实验测量的点扩散函数。

最佳答案

不幸的是,您试图解决的问题比您预期的要困难得多。让我分四个部分来解释。第一部分假设您熟悉傅立叶变换。

  • 为什么你不能用简单的反卷积解决这个问题。
  • 如何执行图像去模糊的概述。
  • FFT 解卷积以及为什么它是个坏主意
  • 执行反卷积的另一种方法

  • 但首先,一些符号:

    我用 I 表示图像,用 K 表示卷积核。 I * K 是图像 I 与核 K 的卷积。 传真 (I) 是图像 I 和 的(n 维)傅立叶变换传真 (K) 是卷积核 K 的傅立叶变换(这也称为点扩展函数,或 PSF)。同样, Fi 是傅里叶逆变换。

    为什么你不能用简单的反卷积解决这个问题:

    您说我们可以通过将 Ib 的傅立叶变换除以 K 的傅立叶变换来恢复模糊图像 Ib = I * K 是正确的。但是,镜头模糊不是卷积模糊操作。它是一种改进的卷积模糊操作,其中模糊核 K 取决于与您拍摄的物体的距离。因此,内核从像素到像素变化。

    您可能认为这不是您的图像的问题,因为您已经在图像的位置测量了正确的内核。然而,情况可能并非如此,因为远处的图像部分会影响近处的图像部分。解决此问题的一种方法是裁剪图像,使其只有纸张可见。

    为什么通过 FFT 反卷积是个坏主意:

    卷积定理指出 I * K = Fi ( F (I) F (K))。这个定理导致了一个合理的假设,如果我们有一个被卷积核 K 模糊的图像 Ib = I * K,那么我们可以通过计算 I = ( F (Ib)/ F (K)。

    在我们研究为什么这是一个坏主意之前,我想先了解一下卷积定理的含义。当我们用内核对图像进行卷积时,这与获取图像的频率分量并将其与内核的频率分量相乘是相同的。

    现在,让我解释一下为什么用 FFT 去卷积图像很困难。默认情况下,模糊会移除高频信息。因此,K 的高频必须趋向于零。这样做的原因是I的高频信息在模糊时丢失了——因此,Ib的高频分量必须趋向于零。为此,K 的高频分量也必须趋于零。

    由于 K 的高频分量几乎为零,我们看到当我们用 FFT 去卷积时,Ib 的高频分量被显着放大(因为我们几乎被零除)。在无噪声的情况下这不是问题。

    然而,在嘈杂的情况下,这是一个问题。这样做的原因是,根据定义,噪声是高频信息。因此,当我们尝试对 Ib 进行去卷积时,噪声会被放大到几乎无限的程度。这就是 FFT 解卷积是一个坏主意的原因。

    此外,您需要考虑基于 FFT 的卷积算法如何处理边界条件。通常,当我们对图像进行卷积时,分辨率会有所降低。这是不需要的行为,因此我们引入了边界条件来指定图像外部像素的像素值。这种边界条件的例子是
  • 图像外部的像素与图像内部最近的像素具有相同的值
  • 图像外的像素具有恒定值(例如 0)
  • 图像是周期信号的一部分,因此最上面一行上面的像素行等于下面一行像素。

  • 最终边界条件通常对一维信号有意义。然而,对于图像来说,这没有什么意义。不幸的是,卷积定理指定使用周期性边界条件。

    除此之外,基于 FFT 的反演方法似乎比迭代方法(例如梯度下降和 FISTA)对错误内核更加敏感。

    执行反卷积的另一种方法

    现在似乎所有希望都破灭了,因为所有图像都是嘈杂的,而去卷积会增加噪声。然而,情况并非如此,因为我们有迭代方法来执行反卷积。让我首先向您展示最简单的迭代方法。

    让 || I ||² 是所有 I 像素的平方和。求解方程

    Ib = I * K

    关于 I 则等价于解决以下优化问题:

    min L(I) = min ||I * K - Ib||²

    关于 I。这可以使用梯度下降来完成,因为 L 的梯度由下式给出

    DL = Q * (I * K - Ib)

    其中 Q 是通过转置 K 获得的内核(这在信号处理文献中也称为匹配滤波器)。

    因此,您可以获得以下迭代算法,该算法将对图像进行去模糊。
    from scipy.ndimage import convolve

    blurred_image = # Load image
    kernel = # Load kernel/psf
    learning_rate = # You need to find this yourself, do a logarithmic line search. Small rate will always converge, but slowly. Start with 0.4 and divide by 2 every time it fails.
    maxit = 100

    def loss(image):
    return np.sum(convolve(image, kernel) - blurred_image)

    def gradient(image):
    return convolve(convolve(image, kernel) - blurred_image)

    deblurred = blurred_image.copy()
    for _ in range(maxit):
    deblurred -= learning_rate*gradient(image)

    上述方法可能是最简单的迭代解卷积算法。这些在实践中的使用方式是通过所谓的正则化反卷积算法。这些算法首先指定一个函数来测量图像中的噪声量,例如TV(I)(I 的总变异)。然后对 L(I) + wTV(I) 执行优化程序。如果您对此类算法感兴趣,我建议您阅读 Amir Beck 和 Marc Teboulle 的 FISTA 论文。这篇论文的数学很重,但你不需要理解其中的大部分——只需要了解如何实现电视去模糊算法。

    除了使用正则化器之外,我们还使用加速方法来最小化损失 L(I)。一个这样的例子是 Nesterov 加速梯度下降。有关此类方法的信息,请参阅 Brendan O'Donoghue、Emmanuel Candes 所著的 Adaptive Restart for Accelerated Gradient Schemes。

    如何执行图像去模糊的概述。
  • 裁剪您的图像,使所有物体与相机的距离相同
  • 像现在一样找到卷积核(首先在合成模糊图像上测试你的反卷积算法)
  • 实现迭代方法来计算去卷积
  • 解卷积图像。
  • 关于python - 去模糊图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53743561/

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