Sobel Operator
Sobel 연산자는 에지 검출, 특징 추출 및 이미지 분할을 위해 밝기 기울기를 측정하는 3×3 이미지 필터입니다.
Sobel 연산자는 이미지 전반의 밝기가 얼마나 빠르게, 어느 방향으로 변하는지 추정하는 고정 이미지 필터입니다. 이미지 기울기를 생성하며, 큰 응답은 급격한 변화를 나타내고 작은 응답은 비교적 균일한 영역을 나타냅니다. Sobel 필터 또는 Sobel–Feldman 연산자라고도 하는 이 방법은 에지 검출과 특징 추출을 위한 컴퓨터 비전의 기본 도구입니다.
Irwin Sobel과 Gary Feldman은 1968년 Stanford Artificial Intelligence Project에서 이미지 처리를 위한 3x3 등방성 기울기 연산자라는 제목의 발표를 통해 이 방법을 소개했으며, 자세한 내용은 Sobel의 역사적 설명과 유도 과정에 기술되어 있습니다.
Sobel 커널의 작동 방식#
Sobel 필터링은 커널이라고 하는 두 개의 작은 가중치 격자를 인접 픽셀에 적용합니다. 이러한 국소 필터링은 일반적으로 합성곱으로 설명되지만, OpenCV는 가중치를 뒤집지 않고 상관 연산을 사용해 적용합니다. 표준 3 x 3 커널의 각 행은 다음과 같습니다.
| 행 | X 방향 커널 | Y 방향 커널 |
|---|---|---|
| 위쪽 | -1, 0, 1 | -1, -2, -1 |
| 가운데 | -2, 0, 2 | 0, 0, 0 |
| 아래쪽 | -1, 0, 1 | 1, 2, 1 |
x 방향 응답 Gx는 왼쪽에서 오른쪽으로의 강도 변화를 측정하며 수직 에지를 강조합니다. Gy는 위에서 아래로의 변화를 측정하며 수평 에지를 강조합니다. 각 커널은 한 축을 따라 -1, 0, 1의 가중치를 사용하는 차분 필터와 다른 축을 따라 1, 2, 1의 가중치를 사용하는 평활화를 결합합니다. 수용 영역은 9개의 픽셀을 포함합니다.
Gx와 Gy를 결합하면 기울기 크기(Gx 제곱과 Gy 제곱의 합의 제곱근)와 atan2(Gy, Gx)으로 계산하는 방향을 구할 수 있습니다. 기울기는 에지를 가로지르며, 해당 지점의 경계에 수직입니다. 이러한 방향성 출력은 각 위치의 응답을 나타내는 공간 격자인 특징 맵입니다.
Python에서 Sobel 적용하기#
OpenCV는 에지 검출 구현 가이드에서 사용되는 것처럼 cv2.Sobel로 부호가 있는 미분값을 계산합니다. 부동 소수점 출력은 선택한 방향으로 밝기가 감소할 때 발생하는 음수 응답을 보존하지만, 부호 없는 8비트 출력은 해당 값을 0으로 잘라내어 에지 변화를 잃게 됩니다.
pip install opencv-python numpy으로 종속 항목을 설치합니다. 이 예제에서는 이미지를 다운로드하고 두 미분값을 계산한 뒤, 두 값을 결합한 크기를 저장합니다.
from urllib.request import urlopen
import cv2
import numpy as np
with urlopen("https://ultralytics.com/images/bus.jpg") as response:
encoded = np.frombuffer(response.read(), dtype=np.uint8)
image = cv2.imdecode(encoded, cv2.IMREAD_GRAYSCALE)
# 강도를 결합하기 전에 부호가 있는 미분값을 보존합니다.
gx = cv2.Sobel(image, cv2.CV_32F, 1, 0, ksize=3)
gy = cv2.Sobel(image, cv2.CV_32F, 0, 1, ksize=3)
magnitude = cv2.magnitude(gx, gy)
edge_image = cv2.normalize(magnitude, None, 0, 255, cv2.NORM_MINMAX)
cv2.imwrite("sobel_edges.png", edge_image.astype(np.uint8))저장된 이미지에서는 강한 밝기 변화가 밝은 윤곽선으로 표시됩니다. 정규화는 표시를 위해 값을 재조정하며, 별도의 임계값 처리 단계는 기울기 강도를 이진 에지 맵으로 변환합니다.
Sobel 기울기의 활용 분야#
이미지 분할에서 Sobel 크기는 시작 마커에서 영역을 확장하는 워터셰드 알고리즘에 경계 정보를 제공할 수 있습니다. scikit-image의 동전 분할 예제에서는 강한 기울기가 동전과 배경 사이에 장벽을 형성합니다. 워터셰드 알고리즘은 이 장벽을 사용해 전경과 배경을 분리한 다음, 연결 요소를 통해 개별 동전에 레이블을 지정합니다.
Sobel 기울기는 Ultralytics YOLO26을 기반으로 하는 커스텀 모델 YOLO26-RD의 객체 검출에도 활용됩니다. 이 모델의 EdgeSPD 모듈은 고정된 Sobel 에지 신호를 사용해 다운샘플링을 제어하며, 공간 해상도가 감소할 때 경계 정보를 강조합니다.
Sobel과 다른 에지 필터 비교#
Prewitt는 균일한 평활화 가중치를 사용하고, Sobel은 가운데 행 또는 열에 더 큰 가중치를 부여합니다. Scharr는 3 x 3 미분 추정의 방향 정확도를 개선합니다. 라플라시안은 2차 강도 변화를 측정합니다. Canny는 기울기 추정에 에지 세선화와 두 임계값을 이용한 에지 연결을 결합하여, 원시 Sobel 크기보다 더 선택적인 윤곽선 맵을 생성합니다.
의료 영상 분석에서는 노이즈로 인한 기울기가 워터셰드 영역을 조각낼 수 있습니다. Sobel 기울기를 이용한 MR 이미지 분할은 과분할 현상을 보여주고 이를 줄이기 위해 노이즈 제거를 사용합니다. 이미지 경계에서는 누락된 인접 픽셀을 처리하기 위해 확장 규칙을 지정해야 합니다. SciPy의 Sobel 구현은 기본적으로 마지막 픽셀의 가장자리를 기준으로 픽셀을 반사합니다.










