10장. Sobel 과 Laplacian 경계 검출
정리
- 경계는 밝기가 갑자기 바뀌는 곳이고, 옆 칸끼리 빼서 그 변화량(기울기)을 잽니다. [50, 50, 50, 200, 200] 에
[-1, 0, 1]을 걸면 경계 양옆 두 칸이 150 이 됩니다. - 가로 기울기 gx 는 세로로 선 경계를, 세로 기울기 gy 는 가로로 누운 경계를 찾습니다. 빼는 방향과 찾아지는 선의 방향은 직각입니다.
- Sobel 은 빼기
[-1, 0, 1]에 가운데 무게 1-2-1 을 더한 3×3 커널입니다.cv2.Sobel(img, cv2.CV_64F, 1, 0, ksize=3)은 네모의 왼쪽 변에서 600, 오른쪽 변에서 −600 을 돌려줍니다. - 빼면 음수가 나오므로
CV_64F로 계산하고, 볼 때만cv2.convertScaleAbs로 절댓값을 0~255 에 담습니다.uint8로 바로 받으면 도형 그림에서 경계 칸의 0.372(834칸)가 사라졌습니다. - 크기는 피타고라스 정리 √(gx² + gy²) 로 합칩니다(3 과 4 면 5).
cv2.magnitude가 이 계산을 하고, 방향은cv2.phase로 읽습니다.addWeighted어림값은 원의 곧은 테두리에서 크기의 0.500, 45도 비스듬한 곳에서 0.707 로 방향에 따라 달라졌습니다. - Laplacian 은 두 번 빼기라 경계 양옆에 + 와 − 가 나란히 나오고, 0 을 지나는 곳이 경계입니다. 방향이 없고 노이즈에 더 약합니다. 도형 그림에서 0 을 지나는 곳(가로 59~60, 139~140 등)은 밝기가 바뀌는 자리와 똑같았습니다.
- 노이즈가 있으면 Gaussian 블러를 먼저 겁니다. 표준편차 20 의 노이즈에서 바탕을 경계로 잘못 찾은 비율이 Sobel 0.372, Laplacian 0.591 이었고, 5×5 블러 뒤에는 둘 다 0 이 되었습니다. 크기에 기준을 걸어 경계 지도를 만들고, 이 일을 더 똑똑하게 하는 Canny 는 11장에서 봅니다.