forked from TheAlgorithms/Python
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add median filter algorithm (TheAlgorithms#675)
- Loading branch information
1 parent
2d70e9f
commit ac28125
Showing
3 changed files
with
42 additions
and
0 deletions.
There are no files selected for viewing
Empty file.
Empty file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
""" | ||
Implementation of median filter algorithm | ||
""" | ||
|
||
from cv2 import imread, cvtColor, COLOR_BGR2GRAY, imshow, waitKey | ||
from numpy import zeros_like, ravel, sort, multiply, divide, int8 | ||
|
||
|
||
def median_filter(gray_img, mask=3): | ||
""" | ||
:param gray_img: gray image | ||
:param mask: mask size | ||
:return: image with median filter | ||
""" | ||
# set image borders | ||
bd = int(mask / 2) | ||
# copy image size | ||
median_img = zeros_like(gray) | ||
for i in range(bd, gray_img.shape[0] - bd): | ||
for j in range(bd, gray_img.shape[1] - bd): | ||
# get mask according with mask | ||
kernel = ravel(gray_img[i - bd:i + bd + 1, j - bd:j + bd + 1]) | ||
# calculate mask median | ||
median = sort(kernel)[int8(divide((multiply(mask, mask)), 2) + 1)] | ||
median_img[i, j] = median | ||
return median_img | ||
|
||
|
||
if __name__ == '__main__': | ||
# read original image | ||
img = imread('lena.jpg') | ||
# turn image in gray scale value | ||
gray = cvtColor(img, COLOR_BGR2GRAY) | ||
|
||
# get values with two different mask size | ||
median3x3 = median_filter(gray, 3) | ||
median5x5 = median_filter(gray, 5) | ||
|
||
# show result images | ||
imshow('median filter with 3x3 mask', median3x3) | ||
imshow('median filter with 5x5 mask', median5x5) | ||
waitKey(0) |