Low-Level Vision . 결과가 바로 안나오고 domain에 굉장히 민감.. 어떻게 처리하냐, 어떤 알고리즘을 적용하냐에 따라.
코너는 엣지보다 상위개념.
코너는 엣지가 교차되는 점이다.
QR코드 - 노이즈가 많이 껴도 코너점을 정확히 찾을 수 있다
- (참고)
자바 v.s. 자바스크립트
다른 언어.
- 코너는 기본적으로 고주파 성분에 존재
코너⊃엣지
Harris Corner Detection
해리스 코너 추출 함수 cornerHarris
는 이미지 위에 커널을 이동시키면서 그레디언트의 변화량을 구하고 이 값을 적절한 기준값으로 구별하여 코너점을 찾는다.
src = cv2.imread('../img/building.jpg')
gray = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)
# block 크기, 소벨크기, R=Det() - kTr()
harris = cv2.cornerHarris(gray, 3, 3, 0.04) # R값 반환
harris_norm = cv2.normalize(harris, None, 0, 255, cv2.NORM_MINMAX, cv2.CV_8U)
#min~max 구간으로 scsaling하는 함수
dst = src.copy()
for y in range(harris_norm.shape[0]): #행렬이니까 y먼저->x
for x in range(harris_norm.shape[1]):
if harris_norm[y, x] > 120:
cv2.circle(dst, (x, y), 5, (0, 0, 255), 2) #원점,반지름,색,두께
imshow('gray', gray)
imshow('harris_norm', harris_norm)
print(harris_norm.dtype) #uint8 : numpy type. (파이썬에는 uint8 없음)
imshow('dst', dst)
FAST
FAST(Features from Accelerated Segment Test)도 코너를 찾는 알고리즘이다. 이름처럼 빠른 연산으로 유명하다.
Decision Tree를 이용해서 코너인가 아닌가를 판단한다.
- 한 픽셀 p 를 중심으로하는 3픽셀의 반지름을 가지는 원을 만들고,
- 그 원 위의 16개의 픽셀 값을 보고 코너를 찾는다.
- p보다 기준값 이상 밝거나, 어두운 픽셀들이 n개 이상 연속적으로 존재하면 p를 Corner로 판단한다.
src = cv2.imread('../img/chessboard.jpg', cv2.IMREAD_GRAYSCALE)
fast = cv2.FastFeatureDetector_create(50)
# 작아지면 코너 많이 검출됨, 원에서도 검출되지만 중첨되서 검출될수 있음. like threshold.
keypoints = fast.detect(src) #특징점
dst = cv2.cvtColor(src, cv2.COLOR_GRAY2BGR)
for kp in keypoints:
pt = (int(kp.pt[0]), int(kp.pt[1]))
cv2.circle(dst, pt, 5, (0, 0, 255), 2)
imshow('src', src)
imshow('dst', dst)
참고) ms계열 깔 땐 콘솔창 restart
QR Code가 OCR보다 성능이 훨씬 좋아
OCR 의 문제: 정확도를 확인할 수 없음
QR CODE는 디코딩만 하면 돼.
'Python > Image vision' 카테고리의 다른 글
Corner - 2 (0) | 2020.01.20 |
---|---|
이미지의 기하학적 변형 (0) | 2020.01.20 |
OCR 이미지 문자열 추출 (Tesseract) (0) | 2020.01.20 |
Morphological Transformations (0) | 2020.01.20 |
Contour Feature (0) | 2020.01.20 |