본문 바로가기
Image Processing (Python)

Edge Detection (윤곽선 검출)

by HanByol Jang 2021. 12. 1.
728x90

함수 설명

이미지에서 다른 명암을 지닌 두 영역 사이의 경계선(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()

이미지의 경계 부분만 추출된것을 확인 할 수 있습니다.

728x90

댓글