Edge Detection (윤곽선 검출)
함수 설명
이미지에서 다른 명암을 지닌 두 영역 사이의 경계선(edge)을 추출하는 함수입니다.
Edge를 추출함으로써 물체의 모양, 크기, 방향성 등의 정보를 확인할 수 있습니다.
다양한 Edge Detection 중에서 가장 유명한 Canny Edge Detection을 설명하겠습니다.
Canny Edge Detection은 총 4단계를 거쳐 Edge를 Detection합니다.
1. Noise reduction
정확도를 높이기 위해 이미지 상의 노이즈를 Gaussian filter를 이용해 줄여줍니다.
2. Gradient 높은 지점 찾기
양 방향 미분 값이 급격히 변하는 지점이 주변과 달라지는 경계 값이므로 해당 부분을 선별합니다.
3. 최대값이 아닌 픽셀 제거
Edge에 기여하지 않는 픽셀을 찾아 제거합니다.
4. Hysteresis Thresholding
Max, min임계 값을 설정하여 max 이상인 것은 edge, minimum 이하인 것은 제거합니다.
max와 min 사이에 있는 값들은 maximum 이상인 지점과 연결 유무를 통해 선택합니다.
Max값을 넘은 A는 선택, min값을 넘지 못하는 D 탈락, max와 min 사이에 있는 B와 C중 A와 연결된 B만 선택
코드 설명
python OpenCV 라이브러리를 사용하였습니다.
cv2.Canny(src, min_threshold, max_threshold)
1) src : 바꾸고 싶은 source 이미지
2) min_threshold : 최소 임계값
3) max_threshold : 최대 임계값
예제
이미지의 edge를 추출하는 코드입니다.
import cv2
import matplotlib.pyplot as plt
from skimage import io
# Image Load
image = io.imread('Lenna.png')
# OpenCV
output = cv2.Canny(image, 70, 150)
# view
plt.subplot(1,2,1)
plt.title('Original')
plt.axis('off')
plt.imshow(image, cmap='gray')
plt.subplot(1,2,2)
plt.title('Edge Detection')
plt.axis('off')
plt.imshow(output, cmap='gray')
plt.show()
이미지의 경계 부분만 추출된것을 확인 할 수 있습니다.