Contour Detection
- Contour: 같은 색깔 및 intensity를 가지는 연속적인 경계점들로 이루어진 curve
- 고전 컴퓨터 비전을 활용하여 raw image에서 객체의 contour를 추출
중요성
- 딥러닝 모델 사용 X
- 딥러닝 모델 학습을 위한 데이터 가공 시 활용 가능
과정
- Edge detection -> Dilation (optional) -> Contour detection
Canny Edge Detector
컴퓨터 비전에서 가장 널리 사용되는 edge detector
1986년 TPAMI에 발표된 논문으로, John Canny에 의해 개발됨
Pros & Cons
- (장점) 정확도 높음
- (단점) 실행 시간 느림
- (단점) 구현 복잡함
(1단계) 노이즈 제거
이미지 내에 노이즈가 있다면, 엣지를 찾는데 어려움이 있음 노이즈 줄이기 위해, 가우시안 필터 이용
가우시안 필터란? 가우시안 분포를 기반으로 하여 주변 픽셀들의 가중치를 계산하여 필터링을 수행
- 가우시안 분포 함수를 근사하여 생성한 필터 마스크
- 가우시안 필터 마스크 행렬은 중앙부에서 큰 값을 가짐
- 중앙에서 외곽으로 갈 수록 0에 가까운 작은 값을 가짐
(2단계) 이미지 내의 높은 미분값 찾기
- Sobel 커널을 각 방향으로 적용하여 gradient를 추출
- 수평방향의 gradient: G_x, 수직방향의 gradient: G_y
- Gradient의 방향은 엣지와 수직한 방향
Edge-Gradient(G)=Gx2+Gy2
Angle(θ)=tan−1(GxGy)
Sobel 커널이란?
- 행 또는 열의 변화율을 계산하는 마스크
- Edge 검출에 특화
(3단계) 최대값이 아닌 픽셀 값 0으로 치환
- 목표: 엣지 검출에 기여하지 않은 픽셀을 제거
- Gradient 방향으로 gradient의 최대값을 가진 픽셀을 찾음
- 주변의 값과 비교하여, 엣지가 아닌 픽셀값들을 제거(0으로 치환)함
(4단계) 하이퍼파라미터 조정을 통한 세밀한 엣지 검출
2가지의 Threshold (Low Threshold, High Threshold)를 정의
Contour Edge Detection with OpenCV
- Raw image를 binary image로 변환 -> OpenCV의 findContours() 함수 이용
- Binary image를 만들 때 edge detection의 결과를 활용