
코너점(Corner) 검출 - cornerEigenValsAndVecs
2018, Aug 01
- Reference : Python으로 배우는 OpenCV 프로그래밍
- Code : https://github.com/gaussian37/Vision/tree/master/OpenCV/corner%20detection
OpenCV를 이용하여 영상에서의 코너점을 검출하는 방법에 대하여 알아보도록 하겠습니다.
코너점
은 단일 채널의 입력 영상의 미분 연산자에 의한 에지 방향
을 이용하여 검출 합니다.
코너점 검출 함수
코너점을 검출할 수 있는 OpenCV의 대표적인 6가지 방법중에 cornerEigenValsAndVecs
에 대하여 알아보도록 하겠습니다.
코너 검출에는 다음 이미지를 사용하겠습니다.
사용할 함수는 cv2.cornerEigenValsAndVecs()
입니다.
- dst = cv2.cornerEigenValsAndVecs(src, blockSize, ksize)
- 코너점 검출 방법 : λ1,λ2
- 상세 내용
- 입력 영상 src에서 각 픽셀의 고유값과 고유벡터를 6 채널 dst에 계산합니다.
- 영상의 모든 픽셀에 대하여 blockSize x blockSize의 이웃에 있는 미분값을 이용하여
2 x 2 크기의 gradient를 이용한 covariance matrix M을 계산하고, M의 eigenvalue λ1,λ2,
eigenvector (x1,y1)과(x2,y2)를 계산하여 dst에 저장합니다.
- eigenvalue λ1,λ2 가
모두 작은 곳
은 평평한 영역에 있는 점 - eigenvalue λ1,λ2 둘 중 하나는 크고 하나는 작으면 에지
- eigenvalue λ1,λ2 두 값이
모드 큰
경우 코너점
- eigenvalue λ1,λ2 가
Covariant Matrix X 은 다음과 같습니다.
[M = \left[ ∑Nbd(x,y)I2x∑Nbd(x,y)IxIy∑Nbd(x,y)IyIx∑Nbd(x,y)I2y \right]]
이 때, Ix=∂I(x,y)∂x,Iy=∂I(x,y)∂y 입니다.