본문 바로가기
공부/컴퓨터비젼

Canny Edge 설명 & 구현코드

by 맑은청이 2021. 4. 6.
728x90
반응형

Canny Edge의 정의

 

Canny Edge Detection은 1986년 John F. Canny에 의해 개발된 알고리즘

가장 인기있는 에지 찾기 알고리즘 중 하나 

윤곽을 가장 잘 찾아내면서도 원래 영상의 회색과 관련된 모든 에지(Edge)들을 제거할 수 있는 유일한 방법

 

Canny Edge의 장점

 

1. 에러율이 낮음

2. 정확도 

3. 단일 점 매칭 - 검출기가 에지 점 하나만 있는 곳에 식별하지 말아야 한다는 것 

 

 

Canny Edge의 단점 

 

1. 구현이 복잡

2. 긴 실행시간 

 

 

Canny Edge 구현 5단계 

 

1. Noise Reduction 

    노이지가 있으면 에지를 찾는 게 어려워짐

    가우시안 필터(Gaussian Filter) 이용해 이미지의 노이즈를 줄여줌

 

2. Finding the intensity gradient of the image 

    가우시안 필터로 노이즈가 제거된 이미지를 Sobel 커널을 각 방향으로 적용하여 방향 별 gradient를 획득 

    수평의 gradient 는 Ix

    수직의 gradient 는 Iy

    gradient의 방향은 Edge에 수직인 방향

    여기서 Edge 는 Image의 강도(Intensity) 가 급격하게 변하는 부분 

    극 값은 Maximum, Mimumum 2군데에서 찾고 이를 합쳐 Extrema

    

 

    픽셀 (x,y) 에서의 Edge Gradient 

   

 

    Sobel를 통해 계산을 하는 건 Extreme 를 찾는 것

    이 값들을 각 방향 별로 미분하면 가장 빠르게 증가한 방향을 나태내고 크기를 나타냄

    이 크키를 통해 증가량 비교하여 방향 구할 수 있음 

    위의 G는 강도(Norm)의 크기를 얻는 것 

    미분을 통해 각도(Angle) 를 구하는 것 

    아래의 값을 구할 수 있음

 

     이 각도를 구하면 각각의 방향성에 있어  각도를 그룹화 

     여기선 (0, 45, 90, 135) 로 구분 

 

3. Non-maximum suppression

     매우 중요 Local maxima 선택하는 단계

     극 값을 선택 할 때 잘못된 영역이 나오면 진짜 Edge가 아닌데 나온 영역이 있는 것

     이런 Non-Maximum를 제거해야 함

 

     1번 과정에서 Blur를 통하여 흐려진 Edge에서 잘못된 영역이 선택된 것이기 때문에 다시 Sharp edge 로 변환 필요

     Local Maxima는 남기고 나머지는 모두 제거하는 작업 진행 

 

     45단 간격으로 라운딩하면서 이웃 설정 후 양 음 방향의 에지 강도와 현재 픽셀의 에지 강도 비교 판단

     현재 픽셀 에지가 가장 크면 보존, 아니면 삭제

Non-Maximum Suppression 

 

 

4. Double thresholding

     3단계 non-maximum suppression을 거친 이미지에 나타나는 에지들 중에는 노이즈(Nosie)에 의해 검출된 것들이 존재

     구별을 하기 위해 임계 값 사용

      파랑색 영역은 제거(non-relevant)

     주황색, 빨간색 영역을 각각 구분

     진한 흰색은 빨간색 영역으로 선명한 에지(Strong), 옅은 회색 영역은 주황색 영역(weak)으로 옅은 에지입니다.

 

5. Edge tracking by hysteresis

이제 진한 에지가 되고 옅은 에지 연관성을 판별해야 함

5단계가 연관성의 판별 단계

강한 에지를 기본으로 옅은 에지 중에 강한 에지와 연결될 경우에만 추가 

 

강한 에지 + 연관성있는 옅은 에지

 

Sobel Operator 

1968년 스탠포드 인공지능 연구소에서 어원 소벨이 소안해낸 가장자리 검출 알고리즘

3x3  크기의 행렬을 사용하여 연산을 하였을 때 중심을 기준으로 각 방향의 앞 뒤 값을 비교하여서 변화량을 검출하는 알고리즘

x,y 방향별로 가지는 행렬의 형태 

 

Canny Edge 구현 코드 

구현 코드는 github 참고

github.com/Chung-god/ComputerVision

 

728x90
반응형