Gaussian Blur
가우시안 블러는 컴퓨터 비전 및 전처리에서 가중 픽셀 평균을 사용해 노이즈와 미세한 디테일을 줄이는 이미지 스무딩 필터입니다.
가우시안 블러는 각 픽셀을 주변 픽셀의 가중 평균으로 대체하는 이미지 스무딩 기법으로, 가까운 이웃 픽셀에 더 큰 가중치를 부여합니다. 가중치는 종 모양의 가우시안 분포를 따르므로 노이즈와 미세한 디테일을 줄이는 부드러운 블러 효과가 나타납니다. 가우시안 스무딩이라고도 하며, 분석을 위해 이미지를 준비할 때 컴퓨터 비전과 데이터 전처리에 널리 사용됩니다.
가우시안 블러의 작동 방식#
필터는 커널이라고 하는 작은 가중치 그리드를 이미지 위에서 이동시킵니다. 각 위치에서 주변 픽셀 값에 해당 가중치를 곱하고 결과를 더합니다. 이 연산을 컨볼루션이라고 합니다. 가중치의 합은 1이므로, 커널이 샘플링한 모든 값의 밝기가 같으면 픽셀은 변하지 않습니다. 가우시안 블러는 로우패스 필터로 작동하며, 노이즈, 텍스처, 선명한 경계를 비롯한 급격한 픽셀 간 변화를 억제합니다.
결과는 두 가지 설정에 따라 달라집니다. 시그마는 가우시안 분포의 표준편차로, 가중치가 얼마나 넓게 퍼지는지를 조절합니다. 시그마를 높이면 스무딩 효과가 강해집니다. 커널 크기는 주변 이미지에서 얼마나 많은 영역을 포함할지 결정합니다. 큰 커널은 더 넓은 가우시안 분포를 수용하지만, 너무 작은 커널은 분포의 꼬리를 잘라냅니다. 커널 반경은 중심에서 커널 가장자리까지의 거리를 나타냅니다. 반경이 3픽셀이면 커널의 너비는 7픽셀입니다.
이미지 경계에서는 커널의 일부가 사용 가능한 픽셀 영역 밖으로 벗어납니다. 이미지를 반사하면 주변 콘텐츠가 확장되지만, 누락된 영역을 0으로 채우면 어두운 값이 추가되어 경계가 어두워질 수 있습니다. 따라서 경계 처리 방식에 따라 이미지 가장자리 근처의 필터링된 출력이 달라집니다.
컴퓨터 비전 및 머신러닝에서의 활용#
가우시안 스무딩은 이미지 구조를 분석하는 공간적 스케일을 조절하여 특징 추출을 지원합니다. 다중 스케일 활용은 이미지의 블러 수준을 다르게 표현하는 기반을 마련한 이이지마 다이조의 1959~1962년 가우시안 스케일 공간 연구에 뿌리를 두고 있습니다.
scikit-image의 Canny 에지 검출 구현에서는 가우시안 스무딩으로 노이즈를 줄인 뒤 Sobel 연산자를 사용해 그래디언트를 추정합니다. 스무딩이 없으면 노이즈로 인해 추가적인 강도 변화가 발생하여 객체 경계와 혼재됩니다. 스무딩 스케일을 높이면 미세한 에지도 제거되므로 검출 후 남는 윤곽이 달라집니다.
문서 이미지 분할에서는 가우시안 가중 로컬 평균을 사용해 적응형 임계값 처리를 수행할 수 있습니다. 각 픽셀의 임계값은 주변 영역의 가중 평균에서 오프셋을 뺀 값으로 계산됩니다. 이를 통해 스캔한 페이지의 로컬 임계값 처리와 같이 조명이 고르지 않은 배경에서 텍스트를 분리할 수 있습니다.
데이터 증강으로 가우시안 블러를 적용하면 바운딩 박스와 키포인트의 좌표를 유지하면서 학습 이미지를 부드럽게 만든 버전을 생성할 수 있습니다. Ultralytics YOLO는 사용자 지정 Albumentations 변환을 통해 A.GaussianBlur를 지원하므로, YOLO26 학습에 조절 가능한 블러 변화를 포함할 수 있습니다.
가우시안 블러와 다른 필터 비교#
스무딩 방법에 따라 이미지에서 보존되는 정보가 달라집니다.
- 평균 블러는 박스 블러라고도 하며, 윈도우 내 모든 픽셀에 동일한 가중치를 부여합니다. 가우시안 블러는 가까운 픽셀을 더 강조하여 가중치가 점진적으로 변하는 평균을 만듭니다.
- 미디언 블러는 픽셀을 주변 영역의 중앙값으로 대체합니다. 고립된 밝은 픽셀과 어두운 픽셀로 나타나는 솔트 앤 페퍼 노이즈에 특히 효과적입니다.
- 양방향 필터링은 공간적 거리와 강도 유사도를 모두 사용해 선명한 경계를 보존하면서 노이즈를 줄입니다. 가우시안 블러는 위치만을 기준으로 픽셀에 가중치를 부여하므로 에지도 부드럽게 만듭니다.
Python에서 가우시안 블러 적용하기#
OpenCV는 가우시안 스무딩을 위한 cv2.GaussianBlur를 제공합니다. pip install opencv-python을 사용해 Python 패키지를 설치한 다음, 나란히 비교한 이미지를 저장합니다.
from urllib.request import urlopen
import cv2
import numpy as np
with urlopen("https://ultralytics.com/images/bus.jpg") as response:
image_bytes = np.frombuffer(response.read(), dtype=np.uint8)
image = cv2.imdecode(image_bytes, cv2.IMREAD_COLOR)
blurred = cv2.GaussianBlur(image, (15, 15), sigmaX=3)
comparison = cv2.hconcat([image, blurred])
cv2.imwrite("gaussian_blur_comparison.jpg", comparison)저장된 이미지에서는 원본이 왼쪽에, 스무딩된 결과가 오른쪽에 배치됩니다. 15 x 15 커널은 두 방향 모두에서 시그마를 3픽셀로 사용합니다. 생략된 sigmaY의 값이 sigmaX의 값을 사용하기 때문입니다.
가우시안 커널은 분리 가능하므로, 수평 및 수직 방향의 1차원 필터로 해당하는 2차원 블러를 생성할 수 있습니다. 7 x 7 커널의 경우 픽셀당 커널 가중치 연산 횟수가 49회에서 14회로 줄어듭니다.










