Sobel 함수를 사용하여 에지를 검출하는 방법을 설명합니다.
마지막 업데이트 - 2018. 10. 16
다음 OpenCV Python 튜토리얼을 참고하여 강좌를 비정기적로 포스팅하고 있습니다. https://docs.opencv.org/3.4.3/d6/d00/tutorial_py_root.html |
에지는 픽셀값이 급격히 변하는 지점입니다.
1차원 그래프로 그려보면 다음처럼 픽셀값이 갑자기 커집니다.
1차 미분해보면 픽셀값이 급격하게 증가한 부분에서 1차 미분값이 큰것을 알 수 있습니다.
주변보다 1차 미분값이 큰 부분을 에지로 검출하게 됩니다.
1차 미분의 근사값을 계산하기 위해 미리 정의한 커널과 이미지를 컨볼루션하여 에지를 검출합니다.
소벨에서는 X 방향 에지 검출과 Y 방향 에지 검출을 위해 별도의 커널을 사용합니다.
Sobel x는 수직선 방향의 에지를 검출합니다.
convertScaleAbs 함수를 사용하여 sobel x 결과에 절대값을 적용하고 값 범위를 8비트 unsigned int로 변경해줘야합니다.
소벨의 커널 크기가 3인 경우에는 Sobel 함수 대신에 Scharr 함수를 사용하는 것이 더 좋은 결과를 얻을 수 있다고 합니다.
img_sobel_x = cv2.Sobel(img_gray, cv2.CV_64F, 1, 0, ksize=3) |
Sobel y는 수평선 방향의 에지를 검출합니다.
convertScaleAbs 함수를 사용하여 sobel y 결과에 절대값을 적용하고 값 범위를 8비트 unsigned int로 변경해줘야합니다.
img_sobel_y = cv2.Sobel(img_gray, cv2.CV_64F, 0, 1, ksize=3) |
sobel x 결과와 sobel y 결과를 결합해야 이미지에 대한 에지 검출이 완료됩니다.
img_sobel = cv2.addWeighted(img_sobel_x, 1, img_sobel_y, 1, 0); |
테스트에 사용한 이미지와 전체 소스 코드입니다.
import cv2 |
'OpenCV > OpenCV 강좌' 카테고리의 다른 글
OpenCV 강좌 - Canny Edge Detector 이론 및 사용 예제 (6) | 2018.11.15 |
---|---|
OpenCV Python 강좌 - 마우스 클릭으로 HSV 색공간에서 특정색 추출하기 (37) | 2018.10.23 |
OpenCV Python 강좌 - 모폴로지 연산 (Morphological Operations) (0) | 2018.10.14 |
OpenCV Python 강좌 - Smoothing(Blurring) (2) | 2018.10.11 |
OpenCV Python 강좌 - 영상 이진화(binarization, thresholding) (2) | 2018.10.05 |
시간날때마다 틈틈이 이것저것 해보며 블로그에 글을 남깁니다.
블로그의 문서는 종종 최신 버전으로 업데이트됩니다.
여유 시간이 날때 진행하는 거라 언제 진행될지는 알 수 없습니다.
영화,책, 생각등을 올리는 블로그도 운영하고 있습니다.
https://freewriting2024.tistory.com
제가 쓴 책도 한번 검토해보세요 ^^
그렇게 천천히 걸으면서도 그렇게 빨리 앞으로 나갈 수 있다는 건.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!