我尝试使用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]]
我试了好几个值。我错过了什么?
2条答案
按热度按时间bz4sfanl1#
目前为止,我最好的解决方案是:
restoration.wiener()
的值越小,图像看起来就像是在上面覆盖了一个不透明的覆盖层(比如this)。另一方面,随着该值的增大,图像变得越来越模糊。接近1的值似乎效果最好,可以消除图像模糊。值得注意的是,这个值越小(我的意思是平衡,图像大小就越大。
PS -我对新的答案持开放态度。
11dmarpk2#
1问题的解决方案是使用
clip = False
或将数据转换为[0,1]
刻度。