[Vision] 3D Object Localization (1)

JeongMin·2024년 4월 18일
0

ComputerVision

목록 보기
8/9

센서로부터 센싱한 포인트 클라우드 데이터가 있고, 원하는 물체의 모델 데이터가 있을 때, 포인트 클라우드 데이터로 부터 물체의 위치, 방향을 찾는 과정.

Algorithm

입력: 포인트클라우드 쌍 (P, Q), (P: 모델, Q: 가진 데이터)

출력: Q를 P로 정렬하는 transformation T

1. P와 Q의 모든점에 대해 normal vector {n_p}, {n_q} 계산;
2. FPFH 특징 계산 F(P), F(Q);
3. K_I, K_II;
4. K_III;
5. T = I, mu = D^2;

while mu > delta^2 do
    Jr = 0, r = 0;

    for (p, q) in K_III do
        l_(p,q) 계산;
        Jr, r 업데이트;
    end for

    T 업데이트;
    4 iteration 마다 mu = mu/2;
end while

Output T

1. Normal vector 계산

P와 Q에 존재하는 모든 점에 대해 normal vector를 계산한다.

1) 특정 점과 그 주변점의 공분산 행렬을 만듦.
2) 공분산행렬에 SVD를 적용.
3) normal vector는 가장 작은 고유값에 대응되는 고유벡터.

X=[x1xNy1yNz1zN]X = \begin{bmatrix} x_1 & \dots & x_N\\ y_1 & \dots & y_N\\ z_1 & \dots & z_N \end{bmatrix}

어떤 점과 그 주변 점들의 집합의 주축을 a,b,c라고 하면, XXTXX^T의 eigen value는 λ1(=a2),λ2(=b2),λ3(=c2)\lambda_1(=a^2), \lambda_2(=b^2), \lambda_3(=c^2).

2. Fast Point Feature Histogram (FPFH)

1) 한 점 psp_s와 이웃한 점 ptp_t를 가지고 Darboux frame을 정의한다.

{u=nsv=u×(ptps)ptpsw=u×v\begin{cases} u = n_s\\ v = u\times\frac{(p_t-p_s)}{||p_t-p_s||}\\ w = u\times v \end{cases}

2) Darboux frame이 정의되고 나면, 두 점 psp_sptp_t의 normal vector의 차이를 가지고 세 가지 feature를 만들게 된다.

{α=vntϕ=u(ptps)ptpsθ=atan2(wnt,unt)\begin{cases} \alpha = v\cdot n_t\\ \phi = u\cdot\frac{(p_t-p_s)}{||p_t-p_s||}\\ \theta = atan2(w\cdot n_t, u\cdot n_t) \end{cases}

3) SPFH (Simple Point Feature Histogram) 계산

SPFH(ps)=<(tN(s))Qtm[α]  (tN(s))Qtm[ϕ]  (tN(s))Qtm[θ]>SPFH(p_s) = <\sum_{(t\in N(s))}Qtm[\alpha]\ |\ \sum_{(t\in N(s))}Qtm[\phi]\ |\ \sum_{(t\in N(s))}Qtm[\theta] >

Qtm[*] 은 Quantum number로 Qtm이 5라면 bin을 5로하여 히스토그램을 생성한다.
각도를 5개 구간으로 나누어 [0~71:1, 72~143:2, ... , 288~359: 5] 히스토그램을 만드는 것.

5로 했을때는 각 각도에 대한 히스토그램이 5차원 데이터로 만들어지기 때문에, SPFH는 15차원이 된다.

4) FPFH 계산

FPFH(ps)=SPFH(ps)+1Tt=1T1wtSPFH(pt)FPFH(p_s) = SPFH(p_s) + \frac{1}{T}\sum_{t=1}^T \frac{1}{w_t}SPFH(p_t)

TT: psp_s의 이웃점 개수

wtw_t: psp_sptp_t 사이의 거리

3. KI,KIIK_I, K_{II}

K1

K-d tree를 이용해 각 pPp \in P에 대해 FPFH(Q) 중에 FPFH(p)와 가까운 feature들을 찾고, 각 qQq \in Q에 대해서도 FPFH(P) 중에 FPFH(q)와 가까운 feature들을 찾아서 (p, q) 쌍들을 KIK_I에 저장해둔다.

K2

KIK_I에서 선택된 (p,q) 쌍들로 부터 F(p)의 가장 가까운 피처가 F(q)이고, F(q)의 가장 가까운 피처가 F(p)인 쌍들만 선택하여 KIIK_{II}에 저장.

4. KIIIK_{III}

KIIK_{II} 에서 아래 조건을 만족하는 세 쌍만 선택해 KIIIK_{III}에 저장한다.

ij,τ<pipjqiqj<1τ, where τ=0.9\forall i \not ={j}, \tau \lt \frac{||p_i - p_j||}{||q_i - q_j||} \lt \frac{1}{\tau},\ where\ \tau = 0.9

KIKIIIK_I \sim K_{III}의 과정을 살펴보면 모델과 센싱 클라우드 포인트 데이터에서 feature 계산하고 두 군집 속에서 특징이 가장 비슷한 같은 포인트 쌍 세 개를 keypoint로 사용하겠다는 것이다.

profile
영상처리와 AI에 관심이 있는 학생입니다.

0개의 댓글