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
'😒 저 저 저 개념없는 나 > 🔆 대파 있나요? Python' 카테고리의 다른 글
[python] python 가상환경 생성 및 실행 (0) | 2024.01.10 |
---|---|
[python] jupyter notebook ER 500: Internet Server Erro (0) | 2023.04.11 |
[ numpy | python] numpy.clip (0) | 2022.05.22 |
[numpy | python] numpy.median (0) | 2022.05.22 |
[Python | numpy] numpy.mgrid() (0) | 2022.04.22 |