상세 컨텐츠

본문 제목

OpenCV Canny Edge Detection

coding/OpenCV

by golduny_zoo 2021. 4. 19. 11:36

본문

728x90

가장 유명한 Edge Detection방법입니다. 여러 단계의 Algorithm을 통해서 경계를 찾아 냅니다.

 

    1. Noise Reduction

      이미지의 Noise를 제거합니다. 이때 5x5의 Gaussian filter를 이용합니다.

    2. Edge Gradient Detection

      이미지에서 Gradient의 방향과 강도를 확인합니다. 경계값에서는 주변과 색이 다르기 때문에 미분값이 급속도로 변하게 됩니다. 이를 통해 경계값 후보군을 선별합니다.
    3. Non-maximum Suppression

      이미지의 pixel을 Full scan하여 Edge가 아닌 pixel은 제거합니다.
    4. Hysteresis Thresholding

      이제 지금까지 Edge로 판단된 pixel이 진짜 edge인지 판별하는 작업을 합니다.
      max val과 minVal(임계값)을 설정하여 maxVal 이상은 강한 Edge, min과 max사이는 약한 edge로 설정합니다.
      이제 약한 edge가 진짜 edge인지 확인하기 위해서 강한 edge와 연결이 되어 있으면 edge로 판단하고, 그러지 않으면 제거합니다.


      이와 같은 일련의 작업을 통해서 경계값만을 남겨두고 제거합니다.

import cv2 
import numpy as np

img = cv2.imread('data/images/sample.jpg',0)

threshold_1 = 120 # high : 0~255중 설정

threshold_2 = 200 # low : 200

result = cv2.Canny(img, threshold_1, threshold_2)

#화면에 그리자 

combined =np.hstack([img,result])
cv2.imshow("combine",combined)

cv2.waitKey()
cv2.destroyAllWindows()

 

'coding > OpenCV' 카테고리의 다른 글

OpenCV Trackbar를 이용한 Canny  (0) 2021.04.19
OpenCV filter를 이용하여 sharp한 이미지  (0) 2021.04.19
OpenCV Laplacian  (0) 2021.04.19
OpenCV GaussianBlur  (0) 2021.04.19
OpenCV sobel  (0) 2021.04.19

관련글 더보기