import numpy as np
from numpy.fft import fft2, ifft2
import cv2
from PIL import Image
def wiener_filter(img,kernel,K = 10):
kernel=([3,1],[2,1])
dummy = np.copy(img)
kernel = np.pad(kernel, [(0, dummy.shape[0] - kernel.shape[0]), (0, dummy.shape[1] - kernel.shape[1])], 'constant')
# Fourier Transform
dummy = fft2(dummy)
kernel = fft2(kernel)
kernel = np.conj(kernel)/(np.abs(kernel) ** 2 + K)
dummy = dummy * kernel
dummy = np.abs(ifft2(dummy))
return np.uint8(dummy)
img = cv2.imread("C:\\Users\\anup\\Desktop\\New folder\\leo.jpg")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#gray1 = cv2.cvtColor(gray,cv2.COLOR_GRAY2RGB)
kernel=([3,1],[2,1])
fm = wiener_filter(img,kernel)
cv2.imshow("Image", img)
key = cv2.waitKey(0)
我想實現維納濾波器對模糊圖像執行反捲積。我的實現是這樣的爲什麼它在說我已經申報內核
雖然實現這個我有錯誤
Traceback (most recent call last):
File "C:\Python27\deblur.py", line 21, in <module>
fm = wiener_filter(img,kernel)
File "C:\Python27\deblur.py", line 8, in wiener_filter
kernel = np.pad(kernel, [(0, dummy.shape[0] - kernel.shape[0]), (0, dummy.shape[1] - kernel.shape[1])], 'constant')
AttributeError: 'tuple' object has no attribute 'shape'
正在重用的變量'kernel'很多在這裏,儘量不會破壞這個名字。 – shuttle87
這就是說,你如何定義'kernel'與你如何使用它不相容。你創建了一個元組,但是像使用數組一樣使用它。 – hpaulj
現在我得到錯誤,因爲內核沒有定義......其實我試圖去模糊圖像 –