Python中的低通和反向滤波器

0 投票
1 回答
1293 浏览
提问于 2025-04-18 02:12

我想用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 低通滤波器(也就是模糊效果):

低通滤波结果

撰写回答