Edge detector

에지는 밝기가 한 방향으로 급격히 변하는 이미지 위치입니다. 에지 검출은 기초적인 이미지 처리 연산이며, 그 핵심 요소인 이미지 그래디언트는 코너 검출, 광학 흐름, 그리고 direct SLAM 방법들의 기반이 됩니다.

먼저 그레이스케일과 평활화

에지 검출은(대부분의 SLAM 프론트엔드 처리와 마찬가지로) 그레이스케일 이미지에서 동작합니다: 그래디언트는 밝기만 필요하고, 1채널은 3채널보다 처리 속도가 3배 빠르며, 색상은 조명에 따라 일관성이 없습니다. 표준 변환은 휘도 공식 I=0.299R+0.587G+0.114BI = 0.299R + 0.587G + 0.114B입니다.

미분은 노이즈를 증폭시키므로, 그래디언트 계산 전에 이미지를 가우시안 블러로 평활화합니다---다음 커널과의 컨볼루션입니다:

G(x,y)=12πσ2exp ⁣(x2+y22σ2)G(x,y) = \frac{1}{2\pi\sigma^2}\exp\!\left(-\frac{x^2+y^2}{2\sigma^2}\right)

σ\sigma의 선택은 검출하려는 에지의 스케일을 결정합니다: 작은 σ\sigma는 미세한 디테일(그리고 노이즈)을 보존하고, 큰 σ\sigma는 거친 구조만 남깁니다.

Sobel 연산자

Sobel 연산자는 두 개의 3×33 \times 3 커널과의 컨볼루션으로 이미지 그래디언트를 계산합니다:

Kx=[101202101],Ky=[121000121]K_x = \begin{bmatrix} -1 & 0 & 1 \\ -2 & 0 & 2 \\ -1 & 0 & 1 \end{bmatrix}, \qquad K_y = \begin{bmatrix} -1 & -2 & -1 \\ 0 & 0 & 0 \\ 1 & 2 & 1 \end{bmatrix}

그래디언트 크기는 I=(KxI)2+(KyI)2|\nabla I| = \sqrt{(K_x * I)^2 + (K_y * I)^2}이고, 그래디언트 방향은 atan2(KyI,KxI)\mathrm{atan2}(K_y * I,\, K_x * I)입니다. Sobel은 미분([1,0,1][-1, 0, 1] 패턴)과 그에 수직인 방향의 평활화([1,2,1][1, 2, 1] 가중치)를 결합하여, 단순한 유한 차분보다 노이즈에 더 강건합니다.

Canny 에지 검출기

Canny 검출기는 원본 그래디언트를 얇고 정확하게 위치한 에지 곡선으로 변환하는 다단계 알고리즘입니다:

  1. 가우시안 평활화로 노이즈 억제.
  2. Sobel 그래디언트 계산(크기와 방향).
  3. 그래디언트 방향을 따른 비최대 억제로 능선을 단일 픽셀 폭까지 얇게 만듦: 픽셀은 그래디언트 방향을 따라 양쪽 이웃보다 크기가 클 때만 살아남습니다.
  4. 높고 낮은 두 임계값을 사용한 히스테리시스 임계값 처리: 강한 에지(높은 임계값 이상)는 유지되고, 약한 에지(낮은 임계값과 높은 임계값 사이)는 강한 에지에 연결된 경우에만 유지됩니다. 이는 연속적인 윤곽선을 보존하면서 고립된 노이즈 응답을 걸러냅니다.
import cv2
edges = cv2.Canny(gray, threshold1=50, threshold2=150)  # low, high

두 검출기 모두 OpenCV(cv::Sobel, cv::Canny)에서 한 줄로 호출할 수 있지만, 컨볼루션과 그래디언트가 어떻게 동작하는지 내면화하려면 한 번쯤 처음부터 구현해 볼 가치가 있습니다.

흔한 함정

SLAM에서의 의미

Sobel이 계산하는 이미지 그래디언트는 Harris 구조 텐서와 Lucas-Kanade 광학 흐름의 입력이므로, 에지 검출은 SLAM 프론트엔드 특징점 처리로 가는 발판입니다. 에지 자체도 직접 사용됩니다: 선/에지 특징점은 텍스처가 부족한 인공 환경에서 점을 보완합니다(예: PL-SLAM), 그리고 LSD-SLAM 같은 direct 방법은 광도 정합을 위해 암묵적으로 그래디언트가 높은(에지 같은) 픽셀에 의존합니다.

관련 문서