Python/OpenCV

OpenCV를 활용한 이미지 필터링 (블러링, 가우시안 필터, 샤프닝)

임베디드 친구 2025. 11. 3. 19:30
반응형

OpenCV를 활용한 이미지 필터링 (블러링, 가우시안 필터, 샤프닝)

1. 이미지 필터링이란?

이미지 필터링(Image Filtering)은 이미지에서 특정한 특징을 강조하거나 노이즈를 제거하는 기법입니다. 필터링은 다양한 방식으로 수행될 수 있으며, 대표적인 방법으로 블러링(Blurring), 가우시안 필터(Gaussian Filter), 샤프닝(Sharpening) 등이 있습니다.

OpenCV에서는 다양한 필터링 기법을 제공하며, 이를 활용하면 손쉽게 이미지의 품질을 개선하거나 특정한 효과를 적용할 수 있습니다.


2. 블러링 (Blurring)

블러링은 이미지의 노이즈를 줄이거나 부드럽게 만드는 과정입니다. 보통 저주파 필터링(Low-pass filtering)의 한 형태로, 이미지의 급격한 밝기 변화(경계선, 노이즈)를 줄이는 역할을 합니다.

2.1. 평균 블러링 (Averaging Blur)

가장 간단한 블러링 기법으로, 커널(Kernel) 크기 내의 픽셀 평균값을 계산하여 적용합니다. OpenCV에서는 cv2.blur() 또는 cv2.boxFilter()를 사용합니다.

import cv2
import numpy as np

# 이미지 로드
image = cv2.imread('sample.jpg')

# 블러링 적용
blurred = cv2.blur(image, (5, 5))  # 5x5 커널 사용

# 결과 출력
cv2.imshow('Original', image)
cv2.imshow('Blurred', blurred)
cv2.waitKey(0)
cv2.destroyAllWindows()
  • (5,5): 블러링을 적용할 커널 크기입니다. 크기가 클수록 더 강한 블러 효과를 가집니다.

2.2. 가우시안 블러 (Gaussian Blur)

가우시안 블러는 평균 블러링과 유사하지만, 중심에 가까울수록 가중치를 더 주어 부드러운 흐림 효과를 만듭니다. cv2.GaussianBlur()를 사용합니다.

# 가우시안 블러 적용
gaussian_blurred = cv2.GaussianBlur(image, (5, 5), 0)

# 결과 출력
cv2.imshow('Original', image)
cv2.imshow('Gaussian Blurred', gaussian_blurred)
cv2.waitKey(0)
cv2.destroyAllWindows()
  • (5,5): 가우시안 필터의 커널 크기입니다.
  • 0: 표준 편차(SigmaX) 값으로, 자동 계산됩니다.

가우시안 블러는 이미지 노이즈 제거 및 전처리 과정에서 많이 사용됩니다.

2.3. 미디언 블러 (Median Blur)

미디언 블러는 커널 내의 픽셀 값을 정렬한 후, 중간값을 픽셀 값으로 설정하는 방식입니다. 염색체 노이즈(Salt-and-Pepper Noise)를 제거하는 데 효과적입니다.

# 미디언 블러 적용
median_blurred = cv2.medianBlur(image, 5)

# 결과 출력
cv2.imshow('Original', image)
cv2.imshow('Median Blurred', median_blurred)
cv2.waitKey(0)
cv2.destroyAllWindows()
  • 5: 커널 크기이며, 반드시 홀수여야 합니다.

3. 샤프닝 (Sharpening)

샤프닝은 이미지의 경계를 강조하여 더 뚜렷하게 만드는 기법입니다. 보통 커널을 사용하여 필터를 적용합니다.

# 샤프닝 커널 정의
sharpening_kernel = np.array([[-1, -1, -1],
                               [-1,  9, -1],
                               [-1, -1, -1]])

# 샤프닝 필터 적용
sharpened = cv2.filter2D(image, -1, sharpening_kernel)

# 결과 출력
cv2.imshow('Original', image)
cv2.imshow('Sharpened', sharpened)
cv2.waitKey(0)
cv2.destroyAllWindows()
  • cv2.filter2D(): 컨볼루션을 수행하는 함수입니다.
  • sharpening_kernel: 중심 픽셀(9)을 강조하고 주변 픽셀(-1)을 줄이는 커널입니다.

샤프닝 필터는 경계를 더욱 선명하게 하는 데 유용합니다.


4. 필터링 기법 비교

아래는 각 필터링 기법을 비교한 결과입니다.

필터 종류 효과
평균 블러 부드럽게 하지만 경계를 흐릿하게 만듦
가우시안 블러 자연스럽게 흐림 효과를 적용함
미디언 블러 염색체 노이즈 제거에 효과적
샤프닝 이미지의 경계를 강조하여 선명하게 함

5. 결론

OpenCV를 활용하면 다양한 필터링 기법을 쉽게 적용할 수 있습니다. 블러링 기법은 이미지에서 노이즈를 줄이는 데 유용하며, 샤프닝은 이미지의 선명도를 높이는 데 사용됩니다. 실제 이미지 처리에서 적절한 필터링 기법을 선택하여 원하는 결과를 얻는 것이 중요합니다.

이제 OpenCV를 활용하여 다양한 이미지 필터링 기법을 실습해 보세요!

반응형