2011-11-11 3 views
1

우리는 kinect를 사용하여 증강 현실 어플리케이션을 수행하고 있습니다. 증강 현실 앱을위한 3D 공간에서 Kinect의 위치 찾기

은 몇 가지 문제가 있습니다

scene diagram

우리는 비행기에 휴식 개체의 무리를해야합니다. 다행히 Kinect는 우리에게 비행기의 법선 벡터를 줄 수 있습니다. OpenGL 카메라를 설정할 위치를 알아야합니다 (Kinect가있는 곳이 이상적입니다). 이를 위해서는 두 위치가 일치해야하기 때문에 Kinect가 3D 공간에서 어디에 있는지 알아야합니다.

추가 설명이 필요하면 알려주세요. 나는 나의 설명이 그것이 필요로하는만큼 명확하지 않을지도 모른다는 것을 깨달았다.

답변

1

Kinect를 원점으로 가정합니다. 또한 Kinect로부터의 (평면상의) 점의 거리를 알 수 있습니다. 이것이 바로 Kinect가 당신에게이 점의 거리로주는 것입니다. 당신은 또한 정상을 압니다. 그래서 여러분이해야 할 일은 비행기의 방정식을 찾아 그것을 행렬로 변환하고 역으로하는 것뿐입니다.

점과 법선 벡터를 주어진 평면 방정식은

r = (0, 0, -distance_at(kinect_depth_image_width/2, kinect_depth_image_height/2)) 

지금 비행기가

p(s,t) = r + u * s + v * t 

경우 유를 다음과 같이 표현 될 수 있다는 것을 기억하는

n·(r-r_0) = 0 ; r_0 = 0 
n·r = 0 

우리는 R을 알고있다 , v는 평면의 기본 벡터입니다. 그래서 우리는

u_x v_x n_x r_x 
u_y v_y n_y r_y 
u_z v_z n_z r_z 
    0 0 0 1 

매트릭스 U를이를 다시 작성할 수 V는 임의의 "업"을 선택하여 결정 할 수 있으며, "오른쪽"벡터는, 당신이 사용하는 것이 좋습니다 Y = (0,1,0) 및 X = (1,0,0), 그리고 당신이 알고있는 정상 n에 대해 직교성을 수행하여 u와 v를 생성합니다.

이 행렬을 반전시킴으로써 평면상의 영점에서 kinect로 변환됩니다.