使用scikit-image对图像进行去模糊 [英] Deblur an image using scikit-image

查看:505
本文介绍了使用scikit-image对图像进行去模糊的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用 skimage。 restore.wiener ,但我总是最终得到一堆1(或-1)的图像,我做错了什么?原始图片来自 Uni of Waterloo

I am trying to use skimage.restoration.wiener, but I always end up with an image with a bunch of 1 (or -1), what am I doing wrong? The original image comes from 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]]

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

And I tried several values. What am I missing?

推荐答案

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

My best so far solution is:

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()

中更小的值recover.wiener() l看起来就像你在它上面放了一个不透明的覆盖图(如这个)。另一方面,随着该值的增加,图像越来越模糊。接近1的值似乎效果最好并对图像进行去模糊。

Much smaller values in restoration.wiener() lead to images that appear like you have put a non-transparent overlay above it (like this). On the other hand as this value grows the image blurs more and more. A value near 1 seems to work best and deblur the image.

值得注意的是这个值越小(我的意思是余额,图像尺寸越大。

Worthnoting is the fact that the smaller this value (I mean the balance, the greater the image size is.

PS - 我愿意接受新的答案。

这篇关于使用scikit-image对图像进行去模糊的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆