【问题标题】:Is there a function in Python similar to Matlab's deconvblind?Python中有没有类似于Matlab的deconvblind的函数?
【发布时间】:2021-09-17 01:19:21
【问题描述】:

我正在研究盲去卷积。

在迭代L2norm正则化的时候,想同时更新PSF,一查,在Matlab中发现了一个叫deconvblind的函数:

l[J,PSF] = deconvblind(I,INITPSF) 使用最大似然算法对图像 I 进行反卷积, 返回去模糊图像 J 和恢复的点扩展函数 PSF。 输入数组 I 和您对 PSF 的初始猜测 INITPSF 可以是数值数组或元胞数组。 (当您希望能够执行其他操作时,请使用元胞数组 从初始反卷积完成的地方开始的反卷积。 有关详细信息,请参阅恢复解卷积。) 恢复的 PSF 是一个与 INITPSF 大小相同的正数组,已归一化,因此其总和为 1。

Python中有没有类似deconvblind的函数?

【问题讨论】:

  • 如果你手头有 MATLAB,你可以使用MATLAB engine for Python。我只是专门为这个功能使用的,没有任何问题。

标签: python matlab image-processing convolution deconvolution


【解决方案1】:

以下是如何使用 Richardson Lucy 算法在 python 中实现盲反卷积:

Blind Deblurring 的迭代更新步骤(如在 24 中提出的那样),unknown PSF H,损坏的图像 X 和恢复图像 S 如下式所示:

以下代码显示了我在1 中提出的迭代贝叶斯盲反卷积算法的实现,主要使用频域操作(与3 中的空间域实现相反)。它类似于3 中的非盲实现,只是我们需要在每次迭代时估计未知模糊 PSF(从随机 PSF 开始),假设在 3 中已知。

import numpy as np
from scipy.signal import fftconvolve

def richardson_lucy_blind(image, psf, original, num_iter=50):    
    im_deconv = np.full(image.shape, 0.1, dtype='float')    # init output
    for i in range(num_iter):
        psf_mirror = np.flip(psf)
        conv = fftconvolve(im_deconv, psf, mode='same')
        relative_blur = image / conv
        im_deconv *= fftconvolve(relative_blur, psf_mirror, mode='same')
        im_deconv_mirror = np.flip(im_deconv)
        psf *= fftconvolve(relative_blur, im_deconv_mirror, mode='same')    
    return im_deconv

下一个动画分别展示了使用 RL 算法的非盲版本和盲版本进行图像恢复。

参考:

  1. https://courses.cs.duke.edu/cps258/fall06/references/Nonnegative-iteration/Richardson-alg.pdf
  2. https://scikit-image.org/docs/dev/api/skimage.restoration.html#skimage.restoration.richardson_lucy
  3. https://arxiv.org/ftp/arxiv/papers/1206/1206.3594.pdf

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-04
    相关资源
    最近更新 更多