Python中的低通和反向滤波器
我想用Python写一个简单的低通滤波器,来处理一张叫做lena的图片。然后我还想用一个反向滤波器来处理这个低通滤波的结果,看看能不能把原来的图片恢复回来(当然,尽量接近原图)。我刚开始学Python编程,不太知道该从哪里入手。之前我尝试调整一个高通滤波器的代码,但感觉不太对。
import matplotlib.pyplot as plt
import numpy as np
import scipy.misc
from scipy import ndimage
import Image
#lowpass
def plot(data, title):
plot.i += 1
plt.subplot(2,2,plot.i)
plt.imshow(data)
plt.gray()
plt.title(title)
plot.i = 0
# Load the data...
img = scipy.misc.lena()
data = np.array(img, dtype=float)
plot(data, 'Original')
#narrow lowpass filter
kernel = np.array([[1, 1, 1],
[1, -8, 1],
[1, 1, 1]])
lp_3 = ndimage.convolve(data, kernel)
plot(lp_3, '3x3 Lowpass')
# A slightly "wider" lowpass filter
kernel = np.array([[1, 1, 1, 1, 1],
[1, -1, -2, -1, 1],
[1, -2, -4, -2, 1],
[1, -1, -2, -1, 1],
[1, 1, 1, 1, 1]])
lp_5 = ndimage.convolve(data, kernel)
plot(lp_5, '5x5 Lowpass')
plt.show()
1 个回答
1
你应该先检查一下你的内核(kernel)。看起来它根本不像是一个低通滤波器(低通滤波器是用来平滑图像的)。你可以先试试下面这个:
kernel = np.ones((n,n))
如果你想做一个非常简单的 n x n 低通滤波器(也就是模糊效果):