캐니 에지 검출
- 1986년 Jhon F. Canny 라는 사람이 개발한 Edge 검출 알고리즘이다. - OpenCV 에 구현되어있어 많은 사람들이 사용하고 있는 방식 중 하나이다.
지난 시간에 구현한 Sobel Filter는 Threshold를 어느 부분에 두는지에 따라 Edge가 두껍게 잡힐지 얇게 잡힐지가
결정되는 단점이 있었는데
CannyEdge는 기본적으로 Sobel Filter를 쓰지만 Edge를 좀 더 정확하게 검출한다. 그 방식으로는
- 정확한 검출 ( Good Detection ) : 에지가 아닌 점을 에지로 찾거나 또는 에지인데 에지로 찾지 못하는 확률을 최소화
- 정확한 위치 ( Good Localization ) : 실제 에지의 중심을 검출
Sobel Filter는 5개의 픽셀을 에지로 잡는데 그 엣지들 중 가장 엣지에 적합한 것을 중심으로 검출한다. - 단일 에지 ( Single Edge ) : 하나의 에지는 하나의 점으로 표현
정확한 위치에 근거하여 하나의 에지를 점으로 표현
Canny Edge 검출 단계
- 1 - 가우시안 필터링 : ( Optional ) 잡음 제거 목적 ( 선택적 적용 )
- 2 - 그래디언트 계산 : 주로 소벨마스크 사용 ( 소벨마스크에도 가우시안 필터개념이 들어가있음 )
Gradient 의 크기과 방향을 계산한다.
전 강의에서 설명했었던 소벨필터는 방향성분은 사용하지 않고 크기성분만을 사용했는데
캐니에지 검출에서는 방향성분을 사용한다.
* Gradient 의 방향을 계산한 값을 다시 4구역으로 단순화시켜 사용한다.
( 0 , 45 , 90 , 135 방향을 사용 )
- 3 - 비최대 억제 ( Non-maximum suppression )
하나의 에지가 여러개의 픽셀로 표현되는 현상을 없애기 위하여 그래디언트 크기가 국지적 최대인
픽셀만을 에지 픽셀로 설정
그래디언트 방향에 위치한 두개의 픽셀을 조사하여 국지적 최대를 검사
non maximum suppression 을 간략히 설명하자만
기존 Sobel Filter에서는 위와같은 픽셀의 분포가 있으면 a - g에 걸쳐지는 Threshold 값 이상의 b , c , d , e, f의 픽셀들을
모두 Edge라고 검출하는 반면
non maximum suppression 에서는 검출된 엣지 a, b, c, d, e, f, g에서 각각 좌우에 있는 픽셀들과 미분값을 비교하여
가장 큰 값을 가지는 픽셀을 Local Maximum 이라고 생각하는 것이다.
여기서 좌 , 우라고 간략하게 설명했지만 결국은 그래디언트 방향을 참고하여 픽셀들을 비교한다.
- 4 - 히스테리시스 에지 트래킹 ( Hysteresis Edge Tracking )
두개의 임계값을 사용 : T_low , T_high
설정해놓은 T_high 보다 높은값을 가진 픽셀은 무조건 엣지라고 판단하고
설정해놓은 T_low 보다 낮은값을 가진 픽셀은 무조건 엣지가 아니라고 판단한다.
그럼 T_hight 와 T_low 중간에 있는 값은 T_high와 이어져있으면 엣지라고 판단하고
끊어져있으면 엣지가 아니라고 판단한다.
cv2.Canny ( image, threshold1, threshold2, edges, apertureSize, L2gradeint )
image : 입력영상
threshold1 : 하단 임계값
threshold2 : 상단 임계값
edges : 에지 영상
apertureSize : 소벨 연산을 위한 커널크기 . ( Default : 3 )
L2gradient : True 이면 L2 norm 사용, False 이면 L1 norm 사용. 기본값은 False
( 속도 향상을 위해서면 L1 norm 사용 추천 )
* 가급적이면 GrayScale로 변환해서 사용하는 것이 좋다.
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
패스트캠퍼스 [직장인 실무교육]
프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.
fastcampus.co.kr
'Program > OPEN_CV' 카테고리의 다른 글
[Open CV] 영상의 특징 추출 _ 허프변환 _ 원 검출 (0) | 2022.06.02 |
---|---|
[Open CV] 영상의 특징 추출 _ 허프변환 _ 직선 검출 (0) | 2022.06.01 |
[Open CV] 영상의 특징 추출 _ 그래디언트와 엣지 검출 (0) | 2022.05.30 |
[Open CV] 영상의 특징 추출 _ 영상의 미분과 소벨 필터 (0) | 2022.05.29 |
[Open CV] 기하학적 변환 _ 실전코딩 ( 문서 스캐너 ) (0) | 2022.05.28 |