Canny Edge detection 검출기에 탑재된 기술을 적용하기 전에 여러분의 스무딩 및 블러링 기술을
적용하는 경우가 많을 것
가우스 필터를 적용하여 이미지를 스무딩하면 이미지의 강도 증감률을 찾을 수 있음.
다음 단계 알고리즘이 가장자리 검출에 대한 가짜 반응을 제거하기 위해
최대치가 아닌 억제를 실행 -> 그런 다음 잠재적 모서리를 선택하기 위해 이중 임계값을 적용 -> 모서리를 히스테리시스(hysteresis, 이력현상)로 추적 , 이때 강한 모서리에 연결되지 않은 다른 약한 모서리는 전부 억제되고 모서리 감지가 종료될 것
즉, 약한 모서리를 없애고 강한 모서리를 찾는 일종의 여과과정, 사용자가 낮은 임계값과 높은 임계값을 정해야 함
import cv2
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
img = cv2.imread('../DATA/sammy_face.jpg')
plt.imshow(img)
다음과 같이 댕댕이 얼굴 사진을 불러옴
edges = cv2.Canny(image=img, threshold1=127, threshold2=127)
plt.imshow(edges)
캐니 모서리 감지기 실행하고, 임계값1, 임계값2 픽셀의 중간값으로 설정 0과 255 중간으로 설정함.
결과가 좋진 않지만 더 강한 모서리를 포착하는 경향이 있음
edges = cv2.Canny(image=img, threshold1=0, threshold2=255)
plt.imshow(edges)
임계치를 0과 255로 바꿨을 때, 위보다는 모서리를 덜 포착하는 경향이 있는듯
med_val = np.median(img)
중앙 픽셀값을 계산했을 때 64가 나옴
lower = int(max(0, 0.7* med_val))
임계값을 감지하는 일반적인 공식은 가능한 최저값과 중위값의 백분율 비교,하한 임계값을0 또는 중앙값의 70%로 설정
upper = int(min(255,1.3 * med_val))
절대 한계값인 255와 중앙값의 1.3배수, 즉 중앙값의 30% 보다 높은 값 사이에 더 작은 값을 설정
edges = cv2.Canny(image=img, threshold1=lower , threshold2=upper)
lower 또는 upper 중 하나를 선택하는 방법 255를 넘어가면 우리가 중앙값의 1.3배의 값을 선택하지 않음
plt.imshow(edges)
더 이상해짐, 테두리가 너무 많이 감지됨
blurred_img = cv2.blur(img,ksize=(5,5))
커널사이즈 지정해서 blur함
edges = cv2.Canny(image=blurred_img, threshold1=lower , threshold2=upper)
임계치는 앞에서 정한 상하한 정함
plt.imshow(edges)
이미지 블러링 한 후 괜찮아짐
edges = cv2.Canny(image=blurred_img, threshold1=lower , threshold2=upper+50)
plt.imshow(edges)
상한 임계치를 높여주거나 커널사이즈를 줄여주면 더 괜찮아짐
출처: Udemy X KMOOC OpenCV 및 딥러닝을 이용한 Computer Vision 파이썬
'Deep Learning > Computer Vision' 카테고리의 다른 글
Contour Detection (0) | 2023.08.09 |
---|---|
그리드 검출 (1) | 2023.08.09 |
코너 검출 (0) | 2023.08.08 |
템플릿 매칭 (0) | 2023.08.08 |
파이썬 카메라에 도형 그리기 (0) | 2023.07.23 |