17. 경계선
가장자리(Edge)는 가장 바깥 부분의 둘레를 의미하며, 객체의 테두리로 볼 수 있다.
이미지 상에서 가장자리는 전경과 배경이 구분되는 지점이며, 전경과 배경 사이에서 밝기가 큰 폭으로 변하는 지점이 객체의 가장자리가 된다. 때문에 가장자리는 픽셀의 밝기가 급격하게 변하는 부분으로 간주할 수 있다.
가장 유명한 경계선을 감지하는 방법으로 Canny Edge Detection이 있고, 이 외에도 Sobel, Laplacian 방법이 있다. 이와 같은 경계선을 찾는 방법들은 아래와 같은 여러 단계의 알고리즘을 통해 경계를 찾아낸다.
1. Noise Reduction
이미지의 Noise를 제거한다. 이때 5X5의 가우시안 필터를 사용한다.
2. Edge Gradient Detection
이미지에서 기울기의 방향과 강도를 확인한다. 경계값에서는 주변과 색이 다르기 때문에 미분 값이 급속도로 변하게 된다. 이를 통해 경계값 후보군을 선별한다.
3. Non-maximum Supperession
이미지의 픽셀을 Full scan하여 Edge가 아닌 픽셀은 제거한다.
4. Hysteresis Thresholding
이전 과정까지 Edge로 판단된 픽셀이 진짜 Edge인지 판별하는 작업을 한다. max val과 min val을 설정하여 max val이상은 강한 Edge, min과 max 사이는 약한 Edge로 설정한다. 약한 Edge가 진짜 Edge인지 확인하기 위해 강한 Edge와 연결되어 있으면 Edge로 판단하고, 그러지 않으면 제거한다.
이와 같은 일련의 작업을 통해 경계값만을 남겨두고 제거한다.
대표적으로 Canny Edge Detection은 cv2.Canny함수를 사용한다.
cv2.Canny(image, threshold1, threshold2)
threshold1의 자리에는 Hysteresis Thresholding 작업에서의 min값을, threshold2 자리에는 max값을 입력한다.
이를 이용해 경계선을 찾는 방법은 다음과 같다.
import cv2
img = cv2.imread("snowman.png")
canny = cv2.Canny(img, 150, 200)
cv2.imshow("image", img)
cv2.imshow("canny", canny)
cv2.waitKey(0)
cv2.destroyAllWindows()
임의의 minVal과 maxVal을 입력하여 경계값을 찾으면 위와 같은 결과가 나온다. Trackbar를 이용하면 적절한 임계값을 더 쉽게 찾을 수 있다.
# Trackbar를 이용한 임계값 찾기
import cv2
def empty(pos):
pass
img = cv2.imread("snowman.png")
name = "Trackbar"
cv2.namedWindow(name)
cv2.createTrackbar("minVal", name, 0, 255, empty)
cv2.createTrackbar("maxVal", name, 0, 255, empty)
while True:
minVal = cv2.getTrackbarPos("minVal", name)
maxVal = cv2.getTrackbarPos("maxVal", name)
canny = cv2.Canny(img, minVal, maxVal)
cv2.imshow("image", img)
cv2.imshow(name, canny)
if cv2.waitKey(1) == ord("q"):
break
cv2.destroyAllWindows()
'Study > ML | DL' 카테고리의 다른 글
[혼공머신]0주차_일단 저지르고 수습하는 사람의 인생 (0) | 2024.07.07 |
---|---|
[Python] OpenCV를 이용한 이미지/영상 처리 - 이미지 윤곽선(Image Contours) (0) | 2023.06.27 |
[Python] OpenCV를 이용한 이미지/영상 처리 - 모폴로지 변환(Opening & Closing) (0) | 2023.06.14 |
[Python] OpenCV를 이용한 이미지/영상 처리 - 모폴로지 변환(dilate, erode) (1) | 2023.06.13 |
[Python] OpenCV를 이용한 이미지/영상 처리 - Adaptive Threshold, otsu algorithm Threshold (0) | 2023.06.08 |