11장. Canny 와 Edge 비교
정리
- 좋은 경계 검출은 존 캐니가 1986년에 세운 세 기준, 곧 잘 찾기(빠뜨림·헛것 없이), 제자리에, 한 번만(한 줄)을 지킵니다. 세 기준은 서로 당기므로 한쪽만 보고 숫자를 고르지 않습니다.
- Canny 는 블러 → 기울기 크기·방향 → 비최대 억제 → 이력 임계값의 네 단계입니다.
cv2.Canny는 블러를 해 주지 않으므로cv2.GaussianBlur를 먼저 겁니다. - 비최대 억제는 기울기 방향(0·45·90·135도)의 이웃 두 칸보다 큰 칸만 남깁니다. 원 테두리를 가로지르는 칸이 5개에서 1개로 줄었고, 직접 짠 NumPy 결과도
cv2.Canny와 같은 한 칸 두께였습니다. - 이력 임계값은 high 이상은 남기고, low 와 high 사이는 강한 경계와 이어질 때만 남깁니다. 옅어지는 띠에서 low 를 150 에서 10 으로 낮추자 재현율이 0.523 에서 0.739 로 올랐고, 강한 경계가 없는 원은 high 를 80 으로 낮춰야 나타났습니다.
- 기준값은 high : low = 2 : 1 ~ 3 : 1 이 출발점입니다. apertureSize 를 키우면 기준값도 키워야 하고(5 에서 F1 0.116),
L2gradient=True는 노이즈 낀 도형 그림에서 F1 을 0.939 에서 0.990 으로 올렸습니다. - 자동 기준값은 경험 규칙입니다. 노이즈 낀 세 그림의 평균 F1 은 Otsu 규칙 0.983, 고정 50, 150 이 0.979, 중앙값 규칙 0.761 이었고, 중앙값 규칙은 어두운 바탕에서 기준값이 너무 낮아졌습니다.
- 성능은 정답 경계를 팽창으로 1칸 넓혀 정밀도·재현율·F1 로 잽니다. 프로젝트에서 노이즈 0·15 에서는 Canny(F1 0.953, 0.982), 노이즈 30 에서는 Sobel(0.853)이 앞섰지만, Canny 의 기준값을 100, 200 으로 올리면 다시 가장 높았습니다. 다음 12장에서는 Canny 로 얻은 선을 윤곽선으로 묶습니다.