728x90

목표

- 캐닝 에지 컨샙 배우기

- cv2.Canny()함수 배우기

 

 

 

이론

- 캐니 에지 검출기는 많이 사용하는 에지 검출 알고리즘으로 196년 존 F 캐니가 만들었습니다. 이 캐니 에지 알고리즘은 여러 단계로 구성된 알고리즘으로 다음과 같습니다.

 

1. 노이즈 제거

- 에지 검출기는 어느정도 노이즈에 강인해야 하기때문에 첫 단계에서는 5 x 5크기의 가우시안 필터로 노이즈를 제거합니다. 이에 대해서 이전에 봤으니 넘어가겠습니다.

 

2. 이미지의 그라디언트 강도 계산하기

- 노이즈가 제거된 이미지는 그 다음에 소벨 커널로 수평과 수직 방향으로 필터를 적용하고 수평 방향에 대한 1차 미분 영상과 수직 방향에 대한 1차 미분 영상을 얻습니다.

- 이 두 영상을 가지고 에지 그라디언트와 방향을 얻을수 있게 됩니다

- 그라디언트 방향은 항상 에지에 수직이며, 수직, 수평 그리고 두 대각 방향 중 하나를 의미하는 값이라 할수 있겠습니다.

 

3. 비최대 억제 - non-maximum suppression

 그라디언트의 크기와 방향에 대한 정보를 얻으면 이제, 에지가 아닌 픽셀들을 제거하여야 합니다.

- 이 때, 모든 픽셀들은 그라디언트의 방향에 존재하는 이웃 점들과 비교하여 지역 최대점인지 확인하여야 합니다.

- 아래의 그림에서 A는 에지로(수직 방향에 대한), 그라디언트 방향은 에지와 돌일 합니다. 

- B,C는 그라디언트 방향에 존재하는데, 점 B, C가 지역 최대점인지 확인여야 하고 아닌 경우들은 0으로 놓습니다.

 

 

4. 가정 임계화 hysteresis Thresholding

- 이번 단계에서는 모든 에지가 실제 에지인지 아닌지 판단하여야 합니다. 여기서는 최소, 최대를 나타내는 임계값을 사용하겠습니다. 어느 에지가 maxVal보다 크면 에지, minVal보다 작으면 에지가 아니므로 버립니다.

- 이 두 임계치 사이에는 연결성을 이용해서 에지 여부를 판단하는데요. 사이에 존재하는 픽셀들이 확실히 에지인 것과 연결되어있다면 에지의 일부분으로 판단하고, 연결되지 않았다면 버리게 됩니다.

 

 

 

 

- 위 그림의 경우 에지 A는 최대값을 넘어가므로 확실한 에지가 됩니다. 에지 C의 경우에는 최대 값보다 밑에있으나 A에 연결되어 있으므로 이 또한 에지라고 판단합니다. 

- 하지만 에지 B의 경우 최소값은 넘어가지만 확실히 에지인것과 연결되어있지 않으므로 버립니다. 그래서 최대 최소 임계치를 잘 결정해야 올바른 결과를 얻을수가 있겠습니다.

 

 

 

 

 

 

케니 에지 검출기

 

 

import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread("C:/Users/do/Documents/github/opencv_python/res/kimheungkook.jpg",0)
edges = cv2.Canny(img,100,200)

plt.subplot(121),plt.imshow(img,cmap = 'gray')
plt.title('Original Image'), plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(edges,cmap = 'gray')
plt.title('Edge Image'), plt.xticks([]), plt.yticks([])

plt.show()

 

300x250

+ Recent posts