본문 바로가기

과목/영상처리

Median Filter 단순 계산을 파이썬으로

다음과 같은 배열이 있을 때 이를 중앙값 필터링하면

f(x,y) = { 1, 2, 4, 5, 2, 

3, 6, 6, 9, 0,

1, 8, 3, 7, 2,

2, 9, 8, 9, 9,

3, 9, 8, 8, 7 }

arr = [
[1,2,4,3,6,6,1,8,3],
[2,4,5,6,6,9,8,3,7],
[4,5,2,6,9,0,3,7,2],
[3,6,6,1,8,3,2,9,8],
[6,6,9,8,3,7,9,8,9],
[6,9,0,3,7,2,8,9,9],
[1,8,3,2,9,8,3,9,8],
[8,3,7,9,8,9,9,8,8],
[3,7,2,8,9,9,8,8,7]
]
for i in range(len(arr)):
result = sorted(arr[i])
print(result, result[3])

[1, 1, 2, 3, 3, 4, 6, 6, 8] 3

[2, 3, 4, 5, 6, 6, 7, 8, 9] 5

[0, 2, 2, 3, 4, 5, 6, 7, 9] 3

[1, 2, 3, 3, 6, 6, 8, 8, 9] 3

[3, 6, 6, 7, 8, 8, 9, 9, 9] 7

[0, 2, 3, 6, 7, 8, 9, 9, 9] 6

[1, 2, 3, 3, 8, 8, 8, 9, 9] 3

[3, 7, 8, 8, 8, 8, 9, 9, 9] 8

[2, 3, 7, 7, 8, 8, 8, 9, 9] 7


이런 결과가 나온다. 리스트는 3x3 마스크를 씌워 정렬하였고 중앙값을 구하려면 가운데 값을 끄집어 내면 된다.


최종 결과는

{3, 5, 3,

3, 7, 6,

3, 8, 7}이 아니고


{ 1, 2, 4, 5, 2,

 3, 3, 5, 3, 0,

1, 3, 7, 6, 2,

2, 3, 8, 7, 9, 

3, 9, 8, 8, 7 }  이다. 가운데 3x3 만 변화가 있다.