"Filtro de paso alto" es un término muy genérico. Hay un número infinito de diferentes "filtros de paso alto" que hacen cosas muy diferentes (por ejemplo, un filtro de dectección de borde, como se mencionó anteriormente, es técnicamente un filtro de paso alto (la mayoría son un paso de banda), pero tiene un efecto muy diferente de lo que probablemente tenido en cuenta.)
en todo caso, sobre la base de la mayor parte de las preguntas que hemos estado pidiendo, probablemente debería mirar en lugar de scipy.ndimage
scipy.filter
, especialmente si usted va a estar trabajando con imágenes grandes (ndimage puede operaciones de preforma en el lugar, conservando la memoria).
Como un ejemplo básico, que muestra algunas maneras diferentes de hacer las cosas:
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()

Gracias por un gran guión! Aprendí mucho sobre convolve() y matplotlib * y * incluso Python. (No tenía idea de que algo como "plot.i" podría funcionar.) –
no es un filtro gaussiano, ¿es un filtro de paso bajo? –
@ A.H. - Sí, pero si restas el paso bajo gaussiano de la imagen original, obtienes un filtro de paso alto equivalente. Eso es lo que se conoce como un "pase alto gaussiano". (Eche un vistazo a los comentarios sobre el código para esa parte). –