Spatial Filters - Averaging filter and Median filter in Image Processing - GeeksforGeeks

09 Nov, 2021
Spatial Filtering technique is used directly on pixels of an image. Mask is usually considered to be added in size so that it has a specific center pixel. This mask is moved on the image such that the center of the mask traverses all image pixels.In this article, we are going to cover the following topics – 
To write a program in Python to implement spatial domain averaging filter and to observe its blurring effect on the image without using inbuilt functions 
To write a program in Python to implement spatial domain median filter to remove salt and pepper noise without using inbuilt functions 
Neighborhood processing in spatial domain: Here, to modify one pixel, we consider values of the immediate neighboring pixels also. For this purpose, 3X3, 5X5, or 7X7 neighborhood mask can be considered. An example of a 3X3 mask is shown below.
f(x-1, y-1) f(x-1, y) f(x-1, y+1)
f(x, y-1) f(x, y) f(x, y+1)
f(x+1, y-1) f(x+1, y) f(x+1, y+1)
Low Pass filtering: It is also known as the smoothing filter. It removes the high-frequency content from the image. It is also used to blur an image. A low pass averaging filter mask is as shown.
1/9 1/9 1/9
1/9 1/9 1/9
1/9 1/9 1/9
High Pass Filtering: It eliminates low-frequency regions while retaining or enhancing the high-frequency components. A high pass filtering mask is as shown.
-1/9 -1/9 -1/9
-1/9 8/9 -1/9
-1/9 -1/9 -1/9
Median Filtering: It is also known as nonlinear filtering. It is used to eliminate salt and pepper noise. Here the pixel value is replaced by the median value of the neighboring pixel. 
Below is the implementation.
Input Image:  
Averaging Filter: 
Python3
# Low Pass SPatial Domain Filtering# to observe the blurring effect  import cv2import numpy as np       # Read the imageimg = cv2.imread('sample.png', 0) # Obtain number of rows and columns# of the imagem, n = img.shape  # Develop Averaging filter(3, 3) maskmask = np.ones([3, 3], dtype = int)mask = mask / 9  # Convolve the 3X3 mask over the imageimg_new = np.zeros([m, n]) for i in range(1, m-1):    for j in range(1, n-1):        temp = img[i-1, j-1]*mask[0, 0]+img[i-1, j]*mask[0, 1]+img[i-1, j + 1]*mask[0, 2]+img[i, j-1]*mask[1, 0]+ img[i, j]*mask[1, 1]+img[i, j + 1]*mask[1, 2]+img[i + 1, j-1]*mask[2, 0]+img[i + 1, j]*mask[2, 1]+img[i + 1, j + 1]*mask[2, 2]                img_new[i, j]= temp         img_new = img_new.astype(np.uint8)cv2.imwrite('blurred.tif', img_new)
Output:
In the above example, it is observed that the filtered image is slightly blurred. If we increase the size of the averaging mask, more blurring can be obtained. 
Median Filtering: 
Python3
# Median Spatial Domain Filtering  import cv2import numpy as np  # Read the imageimg_noisy1 = cv2.imread('sample.png', 0) # Obtain the number of rows and columns# of the imagem, n = img_noisy1.shape  # Traverse the image. For every 3X3 area,# find the median of the pixels and# replace the center pixel by the medianimg_new1 = np.zeros([m, n]) for i in range(1, m-1):    for j in range(1, n-1):        temp = [img_noisy1[i-1, j-1],               img_noisy1[i-1, j],               img_noisy1[i-1, j + 1],               img_noisy1[i, j-1],               img_noisy1[i, j],               img_noisy1[i, j + 1],               img_noisy1[i + 1, j-1],               img_noisy1[i + 1, j],               img_noisy1[i + 1, j + 1]]                 temp = sorted(temp)        img_new1[i, j]= temp[4] img_new1 = img_new1.astype(np.uint8)cv2.imwrite('new_median_filtered.png', img_new1)
Output:
In the above example, we can see that the median filtered image is considerably enhanced with hardly any salt and pepper noise in it. 
gulshankumarar231
Image-Processing
Python-OpenCV
Python
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Python Dictionary
Read a file line by line in Python
How to Install PIP on Windows ?
Enumerate() in Python
Different ways to create Pandas Dataframe
Iterate over a list in Python
Python String | replace()
*args and **kwargs in Python
Reading and Writing to text files in Python
Create a Pandas DataFrame from Lists