2015년 7월 29일 수요일

3차원 비전 기반 객체 인식

이 글은 3차원 기반 객체 인식 과정을 정리한 글이다. 포인트 클라우드를 획득한 상황을 가정한다. 이와 관련된 기본적인 알고리즘은 이미 논문과 관련 PCL과 같은 소스로 오픈되어 있다. 당연하지만, 특정 목적에 맞게 응용하기 위해서는 관련된 이론을 파악하고 있어야 한다.

보통 객체 인식과정은 다음과 같다.

1. 3차원 포인트 클라우드 획득
2. 필터링
포인트 클라우드는 데이터 양이 매우 많다. 그러므로, 불필요한 노이즈 등을 제거한다. 또한, 관심 영역만 필터링한다. 만약, 정밀도 높은 객체 인식이 필요하지 않은 경우, LOD (Level Of Detail)을 줄인다. 이는 Octree와 같은 공간인덱싱 기법을 이용해 빠른 속도로 처리 가능하다.
Octree 처리 모습 (nvidia)

3. 특징점 추출
특징점은 좌표 변환, 스케일 변환에 불변인 고유한 특징을 가진 점이다. 특징점을 획득하면, 여러 위치에서 스캔한 포인트 클라우드를 손쉽게 정합하거나, 포인트 클라우드를 세그먼테이션하거나 하는 등의 작업을 할 수 있다.

특징점을 얻기 위해서는, 반듯이 주어진 포인트 클라우드 PCD={P0...Pn} 의 모든 점 P에 대한 법선 벡터 Np를 계산해야 한다. 이를 위해서는 P 주변을 미소평면 PLN이라 가정하고, 미소평면상에 있는 포인트들 PLNp을 획득해야 한다. 이는 kNN 알고리즘을 통해 계산할 수 있다.

   PLNp = kNN(P)
kNN(Bandwidth Selection and Reconstruction Quality in Point-Based Surfaces. IEEE)

획득한 PLNp 을 다음 PCA 모델을 이용해, 미소평면 PLN을 획득하고, 여기서, 법선벡터 Np를 구한다. PCA는 주어진 포인트 들을 이용해, 공분산을 계산하여, 고유치를 획득한다. 고유치의 주성분이 평면을 구성하는 X, Y, Z축이 된다.

\mathbf{w}_{(1)} = {\operatorname{\arg\,max}}\, \left\{ \frac{\mathbf{w}^T\mathbf{X}^T \mathbf{X w}}{\mathbf{w}^T \mathbf{w}} \right\}

다음은 이렇게 계산된 법선벡터 Np이다.

법선벡터가 계산된 후에, 이 값을 이용해, 특징값들을 계산한다. 예를 들어, Point Feature Histograms (PFH) 와 같이, 두 이웃 포인트 Np1, Np2 간 법선벡터의 변화를 히스토그램화하여, 빈에 그 변화량을 누적하여, 특징으로 사용한다.

이 과정을 전체 포인트에 적용한다.

4. 세그먼테이션
앞서 계산된 법선벡터와 포인트들 간 거리를 이용해, 주어진 포인트 클라우드를 곡률 및 거리에 근거에 분할할 수 있다. 이외에, 다양한 포인트 속성값을 이용할 수 있는 데, 다음 그림은 색상을 이용해, 세그먼테이션한 것이다.

색상 기반 세그먼테이션 (PCL)

또한, 직선, 원, 호, 구, 평면, 실런더 등의 기본 모형을 정의하여, RANSAC알고리즘을 이용해 이 기본 모형에 가장 잘 부합하는 포인트 클라우드를 추출할 수 있다.

RANSAC

5. 객체 인식
객체를 인식한다는 것은, 객체의 형상, 위치, 크기, 치수 및 속성값 등을 추출한다는 것이다. 세그먼테이션을 하였다면, 각 세그먼트마다, 이 속성값들을 추출하기 위해, 다양한 전략을 적용한다.

1) Hough Transformation
허프변환을 통해, 기본 형상의 단면에 대해 가장 잘 부합하는 치수를 찾는다. 허프변환은 2차원 비전에도 활용된 방식으로, 정규분포를 가정하고, 모델 치수의 평균값을 계산한다.

2) PFH Matching
인식하고자 하는 모델의 특징점 히스토그램을 미리 저장해 놓고, 입력되는 PCD에 대해, 이 값과 비교한다. 이는 2차원 비전에서 히스토그램 매칭과 같은 개념이다.

3) RANSAC
모델을 수학적으로 미리 정의해 놓는다. 그리고, 주어진 PCD의 샘플점을 획득해, 수학적 모델을 만들고, 이 모델과 PCD가 얼마정도 부합하지지 inlier 포인트 갯수를 계산한다. 이를 통해, 모델과 유사도를 계산해, 유사도가 미리 정의한 Tolerance 값을 넘으면, 그 모델의 수치가 PCD와 일치한 것으로 가정한다.

4) Curve fitting
커브 피팅은 주어진 PCD에 가장 일치하는 수학 모델의 계수값을 계산하는 방식이다. 예를 들어, 다음과 같은 모델 수식이 있다고 하면,

P(t) = ax + by + c

여기서, 주어진 포인트 P={x, y, z} 의 군 PCD에 대해, 이 모델 수식과 가장 잘 부합하는 a, b, c값을 찾는다. 이는 복잡한 수치해석이 필요하다.

5) ICP (Interactive Iterative Closest Point)
두개의 포인트 클라우드 PCD1, PCD2가 있을 경우, 각 PCD의 특징점 집합을 구해, 서로 위치가 같도록 (서로간의 거리가 가깝도록), 좌표 변환 행렬을 계산해 각 PCD에 적용한다. 그리고, 이 과정을 계산된 거리 편차가 Tolerance이하 일때까지 반복적으로 실행한다.

만약, 두 포인트 클라우드가 같다면, 정확히 위치가 일치된다. 이런 방식이기 때문에, 정합과정에서 기본적으로 사용된다.

ICP (PCL)


6. 객체 생성
이제, 각 알고리즘에서 획득된 값을 이용해, 다음과 같이 객체를 정의할 수 있다.


댓글 없음:

댓글 쓰기