-
Notifications
You must be signed in to change notification settings - Fork 2
/
MedianFiltering.m
63 lines (45 loc) · 1.4 KB
/
MedianFiltering.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
function [filteredIm] = MedianFiltering (im, mask)
[a,b] = size(mask);
[m_orig, n_orig ] = size(im);
if (mod(a,2)==0 || mod(b,2)==0)
disp('Mask is not right Mask should have odd number of rows and columns');
end
if (a~=b)
disp('Mask is not right. Should be a square matrix');
return;
end
for i = 1:a
for j = 1:b
if mask(i,j)<0
disp('Mask is not right. Must have non-negative values only');
return;
end
end
end
if mask ~= mask'
disp('Mask is not right. Mask should be symmetrical about center');
return;
end
pad = 0.5*(a-1);
[m,n] = size(im);
im = [ [im ;zeros(pad,n)] zeros(m+pad,pad)];
[m,n] = size(im);
im = [ zeros(m+pad,pad) [zeros(pad,n);im] ];
filteredIm = zeros(m_orig,n_orig,'uint8');
k =double(a-1);
mask = mask(:)';
for i = 1:m_orig
for j = 1:n_orig
marray=double([]);
submatrix = double(im(i:i+k,j:j+k));
submatrix = submatrix(:)';
for ii = 1:length(mask)
x = mask(ii);
for jj = 1:x
marray = [marray,submatrix(ii)];
end
end
filteredIm(i,j) = double(median(marray));
end
end
end