Vision – 영상 특징 검출

영상 특징

영상으로부터 추출한 유용한 정보 ‘영상 특징’이라고 합니다.

예를 들어 (밝기 평균, 히스토그램, 에지, 코너) 등이 있습니다.

특징은 전역 특징과 지역 특징으로 나눠 집니다.

전역 특징은 ‘영상의 전체 데이터(글로벌 데이터)를 이용해서 찾은 특징’입니다.

지역 특징은 ‘영상의 일부 데이터(로컬 데이터)를 이용해서 찾은 특징’입니다.


코너 검출

코너영상 안의 물체를 특징지을 수 있는 점입니다.

에지 방향이 급격하게 변하는 부분이며, 꼭짓점이라고 생각해도 됩니다.

이 코너 정보만 잘 찾아도 물체가 어떤 것인지 알 수 있습니다.

바다 그림을 A,B,C 구간으로 나누어 보았습니다.

A는 평탄한 영역입니다.
B는 수평선(에지)입니다.
C는 수평선+코너입니다.

C처럼 에지 방향이 급격하게 변한 부분이 코너이고, 이 코너를 보고 ‘어떤 건물이 있네?’ 라는 것을 알 수가 있습니다.

코너를 구하는 방법은 여러 가지가 있습니다.


1. 미분 연산자를 이용한 에지 방향 이용

-> 에지의 방향이 확 틀어지면 코너라고 보는 방법입니다.

함수는 preCornerDetect를 이용합니다.


2. 공분산 행렬을 이용한 코너점 검출

-> covariance matix M의 eigenvalue와 eigenvector값을 계산해서 코너를 검출합니다.

함수는 preCornerEigenValsAndVecs를 이용합니다.


3. 해리스 코너 검출 방법

-> 영상의 특정 위치(x,y)에서 Δx와 Δy만큼 떨어진 픽셀과의 밝기 차이를 E(Δx,Δy) 함수로 나타냈을 때,
E(Δx,Δy) 함수가 모든 방향으로 값이 크게 나타난다면 점(x,y)는 코너라고 간주합니다.

해리스는 수학적 기법을 적용하여 코너 응답 함수 R을 유도하는데, R이 0보다 충분히 큰 양수이면 코너라고 간주합니다. 그렇지 않고 0보다 작으면 에지라고 간주합니다.

4. FAST 코너 검출 방법

-> 16개의 주변 픽셀과 밝기를 비교하여 코너 여부를 판별합니다. 주변 픽셀들이 연속적으로 충분히 밝거나 충분히 어두운 경우 현재 픽셀 p를 코너로 선정합니다. (9개 정도가 연속적으로 밝거나 어두우면 p를 코너로 선정함)

현재 픽셀=p, 점 p의 밝기를 Ip라고 표현하겠습니다.

주변 16개의 픽셀 중에서 값이 Ip+t보다 큰 픽셀이 9개 이상 연속으로 나타나면 점 p는 어두운 영역이 돌출되어 있는 코너입니다.

주변부의 픽셀 값이 일정 수준(t) 이상 더 크기 때문 p를 어두운 영역이 돌출된 코너라고 보는 것입니다.

(1) 주변이 Ip-t보다 작은 밝기 값이다. -> 주변이 어둡고 코너는 밝은 영역이 튀어나온 형태
(3) 주변이 IP+t보다 큰 밝기 값이다. -> 주변이 밝고 코너는 어두운 영역이 튀어나온 형태

함수는 FastFeatureDetector를 이용합니다.

이 함수는 Non-maximal suppression기능을 지원합니다.
이것은 Maximum이 아니라고 판단되는 점들을 지워서 뭉탱이로 나올 수 있는 코너를 없앱니다.


5. 체스보드 패턴 코너점 검출

-> 카메라 캘리브레이션에 자주 사용되는 체스보드 패턴을 검출하는 함수도 존재합니다.

drawChessboardCorners 함수를 이용하면 됩니다.


모멘트

‘모멘트’픽셀의 가중 평균을 이용해서 물체를 인식하려는 Descriptor입니다.

Descriptor영상 내의 객체에 대한 Feature Vector, 쉽게 말해 숫자 배열을 의미합니다.

이 Descriptor를 이용하면 (모양,면적,무게 중심, 방향 정보 등)을 확인할 수 있습니다.

특히 모멘트를 이용하면 ‘같은 모양의 객체’를 찾을 수 있습니다.

모멘트는 ‘픽셀의 가중 평균’과 ‘공간 모멘트 M 행렬’을 이용해서 구합니다.

M행렬을 이용해서 만약 영상의 전체 합을 구하고 싶으면 (i,j)=(0,0)으로 설정합니다.
x축의 합을 구하고 싶으면 (i,j)=(1,0)으로 설정합니다.
y축의 합을 구하고 싶으면 (i,j)=(0,1)으로 설정합니다.

공간 모멘트 M말고 중심 모멘트도 존재하는데, 이것은 단순히 공간 모멘트의 데이터를 중심으로 옮겨준 것입니다.
정규 중심 모멘트는 중심 모멘트를 normalize한 것입니다.

이 정규 중심 모멘트는 ‘Hu의 불변 모멘트’를 구하는 용도로 쓰입니다.


Hu의 불변 모멘트

Hu의 불변 모멘트는 아주 특별한 Feature Vector라고 볼 수 있습니다.

영상을 이동했거나 확장했거나 회전했어도 Feature Vector의 값들은 비슷하다는 점입니다.

정규 중심 모멘트를 이용해서 구한 Hu의 7개의 불변 모멘트로 같은 모양인지 판단해보겠습니다.

영상1에 객체A가 있다고 가정하겠습니다.
영상2와 영상3에는 각각 객체1, 객체2가 있습니다.

영상1-객체 A에 대한 Hu 모멘트는 (0,0,0,0,0,0,0)로 나타납니다.
영상2-객체 1에 대한 Hu 모멘트는 (0,0,0,0,0,0,1)로 나타납니다.
영상3-객체 2에 대한 Hu 모멘트는 (0,0,0,0,0,0,2)로 나타납니다.

세 Hu 모멘트 값이 비슷하니 모두 같은 객체 A라고 판정할 수가 있습니다.

함수는 matchShapes를 이용합니다.
객체와 유사할 수록 0에 가까운 수를 반환합니다.


GitHub에 파이썬 코드를 제공하겠습니다.
필자의 GitHub는 메인 화면 배너에 있습니다.

Leave a Reply

Your email address will not be published. Required fields are marked *