scipy 使用scikit-image对图像进行去模糊

inn6fuwd  于 2022-11-10  发布在  其他
关注(0)|答案(2)|浏览(152)

我尝试使用skimage.restoration.wiener,但我总是得到一个带有一串1(或-1)的图像,我做错了什么?原始图像来自Uni of Waterloo

import numpy as np
from scipy.misc import imread
from skimage import color, data, restoration
from scipy.signal import convolve2d as conv2

def main():
  image = imread("/Users/gsamaras/Downloads/boat.tif")
  psf = np.ones((5, 5)) / 25
  image = conv2(image, psf, 'same')
  image += 0.1 * image.std() * np.random.standard_normal(image.shape)

  deconvolved = restoration.wiener(image, psf, 0.00001)
  print deconvolved
  print image

if __name__ == "__main__":
    main()

输出量:

[[ 1. -1.  1. ...,  1. -1. -1.]
 [-1. -1.  1. ..., -1.  1.  1.]
 [ 1.  1.  1. ...,  1.  1.  1.]
 ..., 
 [ 1.  1.  1. ...,  1. -1.  1.]
 [ 1.  1.  1. ..., -1.  1. -1.]
 [ 1.  1.  1. ..., -1.  1.  1.]]
[[  62.73526298   77.84202199   94.1563234  ...,   85.12442365
    69.80579057   48.74330501]
 [  74.79638704  101.6248559   143.09978769 ...,  100.07197414
    94.34431216   59.72199141]
 [  96.41589893  132.53865314  161.8286996  ...,  137.17602535
   117.72691238   80.38638741]
 ..., 
 [  82.87641732  122.23168689  146.14129645 ...,  102.01214025
    75.03217549   59.78417916]
 [  74.25240964  100.64285679  127.38475015 ...,   88.04694654
    66.34568789   46.72457454]
 [  42.53382524   79.48377311   88.65000364 ...,   50.84624022
    36.45044106   33.22771889]]

我试了好几个值。我错过了什么?

bz4sfanl

bz4sfanl1#

目前为止,我最好的解决方案是:

import numpy as np

# import matplotlib.pyplot as plt

from scipy.misc import imfilter, imread
from skimage import color, data, restoration
from scipy.signal import convolve2d as conv2

def main():
  image = imread("/Users/gsamaras/Downloads/boat.tif")
  #plt.imshow(arr, cmap='gray')
  #plt.show()
  #blurred_arr = imfilter(arr, "blur")
  psf = np.ones((5, 5)) / 25
  image = conv2(image, psf, 'same')
  image += 0.1 * image.std() * np.random.standard_normal(image.shape)

  deconvolved = restoration.wiener(image, psf, 1, clip=False)
  #print deconvolved
  plt.imshow(deconvolved, cmap='gray')
  plt.show()
  #print image

if __name__ == "__main__":
    main()

restoration.wiener()的值越小,图像看起来就像是在上面覆盖了一个不透明的覆盖层(比如this)。另一方面,随着该值的增大,图像变得越来越模糊。接近1的值似乎效果最好,可以消除图像模糊。
值得注意的是,这个值越小(我的意思是平衡,图像大小就越大。
PS -我对新的答案持开放态度。

11dmarpk

11dmarpk2#

1问题的解决方案是使用clip = False或将数据转换为[0,1]刻度。

相关问题