OpenCV - 이미지 필터링

dumbbelldore·2025년 1월 28일
0

zero-base 33기

목록 보기
92/97

1. 필터링(Filtering)

  • 이미지의 특정 특성을 강조하거나 감소시키기 위해 사용
  • 주요 기법
    • Normal Blur: 이미지를 부드럽게 만들어줌
    • Gaussian Blur: Normal Blur 보다 더 자연수러운 결과를 제공함
    • Mediam Blur: 무작위 노이즈 제거에 사용
    • Bilateral Filter: 노이즈는 제거하되, 경계선은 보존하는데 사용할 수 있음

2. 필터링 실습

  • 실습용 샘플 이미지 생성
import cv2
import numpy as np

bg = np.full(
    (500, 500),
    20,
    dtype=np.uint8
)
noise = (np.random.randint(0, 2, (500, 500)) * 255).astype(np.uint8)
res = cv2.add(bg, noise)
res[50:451, 50:451] = cv2.subtract(res[50:451, 50:451], 100)

cv2.imwrite("./data/noise.jpg", res)

  • Normal Blur: 커널 내 모든 픽셀의 평균값을 계산하고, 중심 픽셀의 값을 해당 평균값으로 대체
nblur = cv2.blur(res, (5, 5))
cv2.imwrite("./data/noise_nblur.jpg", nblur)

  • Gaussian Blur: 커널 내 중심 픽셀에 더 큰 가중치를 두는 가우시안 함수를 기반으로 Blur 적용
gblur = cv2.GaussianBlur(res, (3, 3), 0)
cv2.imwrite("./data/noise_gblur.jpg", gblur)

  • Median Blur: 커널 내 모든 픽셀 값을 정렬하여 중위수 값을 구한 뒤, 중심 픽셀의 값을 해당 중위수 값으로 대체
mblur = cv2.medianBlur(res, 3)
cv2.imwrite("./data/noise_mblur.jpg", mblur)

  • Bilateral Filter: 공간적 가중치색상적 가중치를 모두 고려, 노이즈를 제거하면서도 가장자리의 보존 가능
bblur = cv2.bilateralFilter(res, 15, 150, 150)
cv2.imwrite("./data/noise_bblur.jpg", bblur)


*이 글은 제로베이스 데이터 취업 스쿨의 강의 자료 일부를 발췌하여 작성되었습니다.

profile
데이터 분석, 데이터 사이언스 학습 저장소

0개의 댓글