«Фильтр верхних частот» - это очень общий термин. Существует бесконечное количество различных «высокочастотных фильтров», которые делают совершенно разные вещи (например, фильтр определения границ, как уже упоминалось ранее, технически является высокочастотным (в большинстве случаев полосовым) фильтром, но имеет эффект, отличный от того, что вы, вероятно, имел в виду.)
Во всяком случае, основываясь на большинстве вопросов, которые вы задавали, вам, вероятно, следует рассмотреть scipy.ndimage
вместо scipy.filter
, особенно если вы собираетесь работать с большими изображения (ndimage может выполнять операции на месте, сохраняя память).
В качестве базового примера показаны несколько различных способов выполнения действий:
import matplotlib.pyplot as plt
import numpy as np
from scipy import ndimage
import Image
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...
im = Image.open('lena.png')
data = np.array(im, dtype=float)
plot(data, 'Original')
# A very simple and very narrow highpass filter
kernel = np.array([[-1, -1, -1],
[-1, 8, -1],
[-1, -1, -1]])
highpass_3x3 = ndimage.convolve(data, kernel)
plot(highpass_3x3, 'Simple 3x3 Highpass')
# A slightly "wider", but sill very simple highpass 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]])
highpass_5x5 = ndimage.convolve(data, kernel)
plot(highpass_5x5, 'Simple 5x5 Highpass')
# Another way of making a highpass filter is to simply subtract a lowpass
# filtered image from the original. Here, we'll use a simple gaussian filter
# to "blur" (i.e. a lowpass filter) the original.
lowpass = ndimage.gaussian_filter(data, 3)
gauss_highpass = data - lowpass
plot(gauss_highpass, r'Gaussian Highpass, $\sigma = 3 pixels$')
plt.show()
![enter image description here](https://i.stack.imgur.com/M24re.png)