Hi, I'm Ramu. This time, we will implement a median filter that removes noise in the image.
A smoothing filter is a filter that smoothes an image. By applying this filter, you can make the entire image look blurry.
This filter replaces the pixel of interest with the average value of the peripheral pixels. For example, a 3x3 or 5x5 average filter looks like this:
Assuming that the pixel of interest is the center, the sum of the products of the peripheral pixels and the corresponding filter values should be substituted for the pixel of interest. For a 3 × 3 filter, $ I (x_0, y_0) × \ frac {1} {9} + I (x_0, y_1) × \ frac {1} {9} + ... I (x_2, y_2) × Substitute the value of \ frac {1} {9} $ for the pixel of interest. Now, the average value of the peripheral pixels is assigned to the pixel of interest.
Also, as in the previous time, since the edge part of the image cannot be filtered, 0 padding processing using 0 is performed for pixels that do not exist.
meanFilter.py
import numpy as np
import cv2
import matplotlib.pyplot as plt
def meanFilter(img,k):
w,h,c = img.shape
size = k // 2
#0 padding process
_img = np.zeros((w+2*size,h+2*size,c), dtype=np.uint8)
_img[size:size+w,size:size+h] = img.copy().astype(np.uint8)
dst = _img.copy()
#Create filter
ker = np.zeros((k,k), dtype=np.float)
for x in range(-1*size,k-size):
for y in range(-1*size,k-size):
ker[x+size,y+size] = (1/k**2)
#Filtering process
for x in range(w):
for y in range(h):
for z in range(c):
dst[x+size,y+size,z] = np.sum(ker*_img[x:x+k,y:y+k,z])
dst = dst[size:size+w,size:size+h].astype(np.uint8)
return dst
#Image reading
img = cv2.imread('image.jpg')
#Average filter
img = meanFilter(img,9)
#Save image
cv2.imwrite('result.jpg', img)
#Image display
plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
plt.show()
The image on the left is the input image, and the image on the right is the output image. The output image looks blurry, and you can see that smoothing has been performed.
If you have any questions, please feel free to contact us. imori_imori's Github has the official answer, so please check that as well. .. Also, since python is a beginner, please kindly point out any mistakes.
Recommended Posts