[CV] 고전 CV: Contour Detection

myeongwang·2024년 1월 29일
0

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\text{Edge-Gradient} (G) = \sqrt{G_x^2 + G_y^2}
Angle(θ)=tan1(GyGx)\text{Angle} (\theta) = \tan^{-1}\left(\frac{G_y}{G_x}\right)

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의 결과를 활용

profile
Real Cryptocurrency Trader & AI Engineer LV.0

0개의 댓글