Ответ 1
"Фильтр высоких частот" - очень общий термин. Существует бесконечное количество различных "фильтров верхних частот", которые делают очень разные вещи (например, фильтр реберной фильтрации, как упоминалось ранее, технически является верхним (наиболее часто является полосовым) фильтром, но имеет совсем другой эффект от того, что вы, вероятно, имел в виду.)
Во всяком случае, исходя из большинства вопросов, которые вы задавали, вы должны, вероятно, посмотреть 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()