Edge detector
에지는 밝기가 한 방향으로 급격히 변하는 이미지 위치입니다. 에지 검출은 기초적인 이미지 처리 연산이며, 그 핵심 요소인 이미지 그래디언트는 코너 검출, 광학 흐름, 그리고 direct SLAM 방법들의 기반이 됩니다.
먼저 그레이스케일과 평활화
에지 검출은(대부분의 SLAM 프론트엔드 처리와 마찬가지로) 그레이스케일 이미지에서 동작합니다: 그래디언트는 밝기만 필요하고, 1채널은 3채널보다 처리 속도가 3배 빠르며, 색상은 조명에 따라 일관성이 없습니다. 표준 변환은 휘도 공식 입니다.
미분은 노이즈를 증폭시키므로, 그래디언트 계산 전에 이미지를 가우시안 블러로 평활화합니다---다음 커널과의 컨볼루션입니다:
의 선택은 검출하려는 에지의 스케일을 결정합니다: 작은 는 미세한 디테일(그리고 노이즈)을 보존하고, 큰 는 거친 구조만 남깁니다.
Sobel 연산자
Sobel 연산자는 두 개의 커널과의 컨볼루션으로 이미지 그래디언트를 계산합니다:
그래디언트 크기는 이고, 그래디언트 방향은 입니다. Sobel은 미분( 패턴)과 그에 수직인 방향의 평활화( 가중치)를 결합하여, 단순한 유한 차분보다 노이즈에 더 강건합니다.
Canny 에지 검출기
Canny 검출기는 원본 그래디언트를 얇고 정확하게 위치한 에지 곡선으로 변환하는 다단계 알고리즘입니다:
- 가우시안 평활화로 노이즈 억제.
- Sobel 그래디언트 계산(크기와 방향).
- 그래디언트 방향을 따른 비최대 억제로 능선을 단일 픽셀 폭까지 얇게 만듦: 픽셀은 그래디언트 방향을 따라 양쪽 이웃보다 크기가 클 때만 살아남습니다.
- 높고 낮은 두 임계값을 사용한 히스테리시스 임계값 처리: 강한 에지(높은 임계값 이상)는 유지되고, 약한 에지(낮은 임계값과 높은 임계값 사이)는 강한 에지에 연결된 경우에만 유지됩니다. 이는 연속적인 윤곽선을 보존하면서 고립된 노이즈 응답을 걸러냅니다.
import cv2
edges = cv2.Canny(gray, threshold1=50, threshold2=150) # low, high
두 검출기 모두 OpenCV(cv::Sobel, cv::Canny)에서 한 줄로 호출할 수 있지만, 컨볼루션과 그래디언트가 어떻게 동작하는지 내면화하려면 한 번쯤 처음부터 구현해 볼 가치가 있습니다.
흔한 함정
- 블러를 생략하기: 노이즈가 있는 원본 이미지에 Canny를 적용하면 얼룩지고 파편화된 에지가 생성됩니다. (또는 내장 애퍼처)를 임계값과 함께 조정해야 합니다.
- 단일 임계값 사고방식: Canny의 두 임계값이 이 알고리즘의 핵심입니다. 단일 임계값은 윤곽선을 파편화하거나 노이즈를 허용하게 됩니다. 낮은 임계값은 높은 임계값의 일정 비율이어야 합니다.
- 에지는 특징점이 아님: 에지 점은 자신의 윤곽선을 따라 미끄러질 수 있으므로(애퍼처 문제), 한 방향으로만 기하학을 제약합니다---이것이 정확히 에지 점이 아니라 코너가 키포인트로 매칭되는 이유이며, 에지 기반 SLAM이 에지를 1차원 제약으로 취급하는 이유입니다.
SLAM에서의 의미
Sobel이 계산하는 이미지 그래디언트는 Harris 구조 텐서와 Lucas-Kanade 광학 흐름의 입력이므로, 에지 검출은 SLAM 프론트엔드 특징점 처리로 가는 발판입니다. 에지 자체도 직접 사용됩니다: 선/에지 특징점은 텍스처가 부족한 인공 환경에서 점을 보완합니다(예: PL-SLAM), 그리고 LSD-SLAM 같은 direct 방법은 광도 정합을 위해 암묵적으로 그래디언트가 높은(에지 같은) 픽셀에 의존합니다.