😒 저 저 저 개념없는 나/🔆 대파 있나요? Python

[Image processing] Median Filtering

우주수첩 2022. 5. 22. 20:34
728x90

앞서 포스팅 했던 두 numpy 라이브러리를 활용하여 Median Filtering을 진행하고자 한다.

median : https://dusty-wznt.tistory.com/82

clip : https://dusty-wznt.tistory.com/83

 

 

Median filtering은 이미지가 가지고 있는 noise를 제거하기 위한 필터링의 방법 중 하나로

이미지에 Mask를 씌워 해당 마스크의 크기만큼 이미지의 픽셀값을 조회한 뒤

정렬된 픽셀값들 중 중앙 값 저장하여 salt and pepper noise와 같은 튀는값을 제거하고자 하는 목적으로 사용된다.

 

def median_filtering(src, msize):
    h, w = src.shape

    dst = np.zeros((h, w))
    for row in range(h):
        for col in range(w):
            h_start = np.clip(col-msize//2, 0, h)
            h_end = np.clip(row+msize//2 , 0 ,h)

            w_start = np.clip(col-msize//2, 0, w)
            w_end = np.clip(col+ msize//2, 0, w)

            mask = src[h_start:h_end, w_start:w_end]
            dst[row,col] = np.median(mask)

    return dst.astype(np.uint8)

 

 

  • 이미지를 모두 돌면서 파라미터로 입력받은 mask의 size만큼 분할하려 픽셀들의 중앙값을 찾아낸다.
  • msize만큼 이미지를 분할하기 위해서  범위를 지정하여 변수에 저장하고 해당 범위만큼 mask라는 변수에 저장한다.
    • numpy의 clip함수를 사용하여 이미지의 픽셀 범위를 벗어나는 경우를 쉽게 처리할 수 있다.
  • 현재 픽셀값에 마스크로 분할 해 온 픽셀들의 중앙  값을 저장한다.
    • median함수를 사용하여 mask array의 중앙 값을 쉽게 구할 수 있다.
728x90