Skip to content

Commit ac28125

Browse files
matheustguimaraesAnupKumarPanwar
authored andcommitted
Add median filter algorithm (TheAlgorithms#675)
1 parent 2d70e9f commit ac28125

File tree

3 files changed

+42
-0
lines changed

3 files changed

+42
-0
lines changed

digital_image_processing/__init__.py

Whitespace-only changes.

digital_image_processing/filters/__init__.py

Whitespace-only changes.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
"""
2+
Implementation of median filter algorithm
3+
"""
4+
5+
from cv2 import imread, cvtColor, COLOR_BGR2GRAY, imshow, waitKey
6+
from numpy import zeros_like, ravel, sort, multiply, divide, int8
7+
8+
9+
def median_filter(gray_img, mask=3):
10+
"""
11+
:param gray_img: gray image
12+
:param mask: mask size
13+
:return: image with median filter
14+
"""
15+
# set image borders
16+
bd = int(mask / 2)
17+
# copy image size
18+
median_img = zeros_like(gray)
19+
for i in range(bd, gray_img.shape[0] - bd):
20+
for j in range(bd, gray_img.shape[1] - bd):
21+
# get mask according with mask
22+
kernel = ravel(gray_img[i - bd:i + bd + 1, j - bd:j + bd + 1])
23+
# calculate mask median
24+
median = sort(kernel)[int8(divide((multiply(mask, mask)), 2) + 1)]
25+
median_img[i, j] = median
26+
return median_img
27+
28+
29+
if __name__ == '__main__':
30+
# read original image
31+
img = imread('lena.jpg')
32+
# turn image in gray scale value
33+
gray = cvtColor(img, COLOR_BGR2GRAY)
34+
35+
# get values with two different mask size
36+
median3x3 = median_filter(gray, 3)
37+
median5x5 = median_filter(gray, 5)
38+
39+
# show result images
40+
imshow('median filter with 3x3 mask', median3x3)
41+
imshow('median filter with 5x5 mask', median5x5)
42+
waitKey(0)

0 commit comments

Comments
 (0)