I am currently studying image processing. In Scipy, I know there is one median filter in Scipy.signal. Can anyone tell me if there is one filter similar to high pass filter?
Thank you
Method 1: High Pass Filter(HPF) in Python OpenCV Now that we have an image, using the Python OpenCV module we shall read the image. Given the size of the image, we can also resize the shape this step is completely optional. While resizing the image you can pass an interpolation so that the image maintains its quality.
The SciPy provides the ndimage (n-dimensional image) package, that contains the number of general image processing and analysis functions. It is dedicated to image processing. We can perform several tasks in image processing such as input/output image, classification, Feature extraction, Registration, etc.
Low pass filter: Low pass filter is the type of frequency domain filter that is used for smoothing the image. It attenuates the high frequency components and preserves the low frequency components. High pass filter: High pass filter is the type of frequency domain filter that is used for sharpening the image.
The Gaussian filter applies either a Lowpass or a Highpass digital filter to an image along either the Horizontal or the Vertical axis.
"High pass filter" is a very generic term. There are an infinite number of different "highpass filters" that do very different things (e.g. an edge dectection filter, as mentioned earlier, is technically a highpass (most are actually a bandpass) filter, but has a very different effect from what you probably had in mind.)
At any rate, based on most of the questions you've been asking, you should probably look into scipy.ndimage
instead of scipy.filter
, especially if you're going to be working with large images (ndimage can preform operations in-place, conserving memory).
As a basic example, showing a few different ways of doing things:
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()
Here is how we can design a HPF with scipy fftpack
from skimage.io import imread import matplotlib.pyplot as plt import scipy.fftpack as fp im = np.mean(imread('../images/lena.jpg'), axis=2) # assuming an RGB image plt.figure(figsize=(10,10)) plt.imshow(im, cmap=plt.cm.gray) plt.axis('off') plt.show()
Original Image
F1 = fftpack.fft2((im).astype(float)) F2 = fftpack.fftshift(F1) plt.figure(figsize=(10,10)) plt.imshow( (20*np.log10( 0.1 + F2)).astype(int), cmap=plt.cm.gray) plt.show()
Frequency Spectrum with FFT
(w, h) = im.shape half_w, half_h = int(w/2), int(h/2) # high pass filter n = 25 F2[half_w-n:half_w+n+1,half_h-n:half_h+n+1] = 0 # select all but the first 50x50 (low) frequencies plt.figure(figsize=(10,10)) plt.imshow( (20*np.log10( 0.1 + F2)).astype(int)) plt.show()
Block low Frequencies in the Spectrum
im1 = fp.ifft2(fftpack.ifftshift(F2)).real plt.figure(figsize=(10,10)) plt.imshow(im1, cmap='gray') plt.axis('off') plt.show()
Output Image after applying the HPF
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With