Low-pass and High-pass Filters
One of the key benefits of the Fourier Transformation is it enables us to do high-pass and low-pass filtering.
After we apply the Fourier Transformation:
dft = np.fft.fft2(image)
dft_shift = np.fft.fftshift(dft)
we need to create a filtering mask
Low-Pass Filtering (Blurring)
A low-pass filter removes high-frequency components, which results in a blurred image. Low-pass mask:
rows, cols = image.shape 
crow, ccol = rows // 2, cols // 2 
mask = np.zeros((rows, cols), np.uint8)
mask[crow-30:crow+30, ccol-30:ccol+30] = 1
rows, cols = image.shape: retrieves the number of rows and columns from the grayscale image;crow, ccol = rows // 2, cols // 2: computes the center coordinates of the image;mask = np.zeros((rows, cols), np.uint8): creates a mask of zeros with the same dimensions as the image;mask[crow-30:crow+30, ccol-30:ccol+30] = 1: sets a 60Γ60 square region at the center of the mask to 1, allowing only the low-frequency components (near the center of the frequency domain) to pass through while filtering out high-frequency details.
High-Pass Filtering (Edge Detection)
A high-pass filter removes low-frequency components and enhances edges. High-pass mask:
highpass_mask = np.ones((rows, cols), np.uint8)
highpass_mask[crow-5:crow+5, ccol-5:ccol+5] = 0
highpass_mask = np.ones((rows, cols), np.uint8): initializes a mask of ones with the same dimensions as the image, meaning all frequencies are initially allowed to pass;highpass_mask[crow-5:crow+5, ccol-5:ccol+5] = 0: sets a small 10Γ10 square at the center (low-frequency region) to zero, effectively blocking those frequencies.
Applying the filter
After creating the mask, we must apply a filter and transform our photo back to the spatial domain:
dft_filtered = dft_shift * mask
dft_inverse = np.fft.ifftshift(dft_filtered) # Inverse shifting
image_filtered = np.fft.ifft2(dft_inverse) # Inverse transformation
image_filtered = np.abs(image_filtered) # Remove negative values
dft_filtered = dft_shift * mask: applies the frequency domain mask (e.g., low-pass or high-pass) by element-wise multiplication with the shifted DFT of the image;dft_inverse = np.fft.ifftshift(dft_filtered): reverses the shift applied earlier to bring the frequency components back to their original positions;image_filtered = np.fft.ifft2(dft_inverse): computes the Inverse Fourier Transform to convert the filtered frequency data back into the spatial domain;image_filtered = np.abs(image_filtered): takes the absolute value to remove any residual imaginary components, resulting in a real-valued filtered image.
Swipe to start coding
You are given an image of the sheep in the image variable and an image in the frequency domain in the dft_shift variable:
- Get the shape of the 
imagematrix and store it inrowsandcolsvariables; - Calculate the center point and store in 
crowandccol; - Define the 
low_maskas an array of zeros with(rows, cols)shape andnp.uint8type; - Choose the 20x20 center region of 
low_maskand fill it with1. - Define the 
high_maskas an array of ones with(rows, cols)shape andnp.uint8type; - Choose the 20x20 center region of 
high_maskand fill it with0; - Apply 
low_maskandhigh_masktodft_shiftand store the filtered frequences inlowpass_dft_filteredandhighpass_dft_filteredaccordingly; - Perform inverse transformation for 
lowpass_dft_filtered:- Do inverse shifting and store in 
lowpass_dft_inverse; - Do inverse transformation and store image in 
image_lowpass; - Remove negative values for 
image_lowpass. 
 - Do inverse shifting and store in 
 - Perform inverse transformation for 
highpass_dft_inverse:- Do inverse shifting and store in 
lowpass_dft_inverse; - Do inverse transformation and store image in 
image_highpass; - Remove negative values for 
image_highpass. 
 - Do inverse shifting and store in 
 
Solution
Thanks for your feedback!
single
Ask AI
Ask AI
Ask anything or try one of the suggested questions to begin our chat
Can you explain the difference between high-pass and low-pass filtering in more detail?
How do I choose the size of the mask for filtering?
What are some practical applications of these filters in image processing?
Awesome!
Completion rate improved to 3.45
Low-pass and High-pass Filters
Swipe to show menu
One of the key benefits of the Fourier Transformation is it enables us to do high-pass and low-pass filtering.
After we apply the Fourier Transformation:
dft = np.fft.fft2(image)
dft_shift = np.fft.fftshift(dft)
we need to create a filtering mask
Low-Pass Filtering (Blurring)
A low-pass filter removes high-frequency components, which results in a blurred image. Low-pass mask:
rows, cols = image.shape 
crow, ccol = rows // 2, cols // 2 
mask = np.zeros((rows, cols), np.uint8)
mask[crow-30:crow+30, ccol-30:ccol+30] = 1
rows, cols = image.shape: retrieves the number of rows and columns from the grayscale image;crow, ccol = rows // 2, cols // 2: computes the center coordinates of the image;mask = np.zeros((rows, cols), np.uint8): creates a mask of zeros with the same dimensions as the image;mask[crow-30:crow+30, ccol-30:ccol+30] = 1: sets a 60Γ60 square region at the center of the mask to 1, allowing only the low-frequency components (near the center of the frequency domain) to pass through while filtering out high-frequency details.
High-Pass Filtering (Edge Detection)
A high-pass filter removes low-frequency components and enhances edges. High-pass mask:
highpass_mask = np.ones((rows, cols), np.uint8)
highpass_mask[crow-5:crow+5, ccol-5:ccol+5] = 0
highpass_mask = np.ones((rows, cols), np.uint8): initializes a mask of ones with the same dimensions as the image, meaning all frequencies are initially allowed to pass;highpass_mask[crow-5:crow+5, ccol-5:ccol+5] = 0: sets a small 10Γ10 square at the center (low-frequency region) to zero, effectively blocking those frequencies.
Applying the filter
After creating the mask, we must apply a filter and transform our photo back to the spatial domain:
dft_filtered = dft_shift * mask
dft_inverse = np.fft.ifftshift(dft_filtered) # Inverse shifting
image_filtered = np.fft.ifft2(dft_inverse) # Inverse transformation
image_filtered = np.abs(image_filtered) # Remove negative values
dft_filtered = dft_shift * mask: applies the frequency domain mask (e.g., low-pass or high-pass) by element-wise multiplication with the shifted DFT of the image;dft_inverse = np.fft.ifftshift(dft_filtered): reverses the shift applied earlier to bring the frequency components back to their original positions;image_filtered = np.fft.ifft2(dft_inverse): computes the Inverse Fourier Transform to convert the filtered frequency data back into the spatial domain;image_filtered = np.abs(image_filtered): takes the absolute value to remove any residual imaginary components, resulting in a real-valued filtered image.
Swipe to start coding
You are given an image of the sheep in the image variable and an image in the frequency domain in the dft_shift variable:
- Get the shape of the 
imagematrix and store it inrowsandcolsvariables; - Calculate the center point and store in 
crowandccol; - Define the 
low_maskas an array of zeros with(rows, cols)shape andnp.uint8type; - Choose the 20x20 center region of 
low_maskand fill it with1. - Define the 
high_maskas an array of ones with(rows, cols)shape andnp.uint8type; - Choose the 20x20 center region of 
high_maskand fill it with0; - Apply 
low_maskandhigh_masktodft_shiftand store the filtered frequences inlowpass_dft_filteredandhighpass_dft_filteredaccordingly; - Perform inverse transformation for 
lowpass_dft_filtered:- Do inverse shifting and store in 
lowpass_dft_inverse; - Do inverse transformation and store image in 
image_lowpass; - Remove negative values for 
image_lowpass. 
 - Do inverse shifting and store in 
 - Perform inverse transformation for 
highpass_dft_inverse:- Do inverse shifting and store in 
lowpass_dft_inverse; - Do inverse transformation and store image in 
image_highpass; - Remove negative values for 
image_highpass. 
 - Do inverse shifting and store in 
 
Solution
Thanks for your feedback!
single