2014-10-27 18 views
5

koordinatları itibaren ben Kinect gelen rgb verilerini kullanarak bir top izleme yapıyorum. Bundan sonra ilgili derinlik verisine bakıyorum. Her ikisi de muhteşem çalışıyor. Şimdi x_screen, y_screen ve derinlik değerleri yerine gerçek x, y, z dünya koordinatlarına (yani iskelet uzayına) sahip olmak istiyorum. Ne yazık ki kinect sdk (http://msdn.microsoft.com/en-us/library/hh973078.aspx) tarafından verilen yöntemler bana yardım etmiyor. Temelde "NuiImageGetSkeletonCoordinatesFromColorPixel" fonksiyonuna ihtiyacım var ama mevcut değil. Tüm fonksiyonlar temelde ben bu muhtemelen openNI ile yapılabilir biliyorum ters yöndeKinect: dünyaya Renk Alanı

gitmek ama başka nedenlerle kullanamazsınız.

benim için bunu yapar veya i dönüşüme kendim yapmak zorundayım bir işlevi var mı? Eğer bunu kendim yapmak zorunda kalırsam, bunu nasıl yapardım? Küçük bir diyagram çizdim http://i.imgur.com/ROBJW8Q.png - bunun işe yarayacağını düşünüyor musunuz?

+0

Neden [ 'NuiTransformDepthImageToSkeleton'] (http://msdn.microsoft.com/en-us/library/jj663871.aspx) sizin için çalışmıyor? –

+0

Renk kullanarak izliyorum. Yani "rgb-space" içinde x, y var. Sonra derinlik verisini başka bir sdk işlevini kullanarak rgb alanına dönüştürürüm: NuiImageGetColorPixelCoordinatesFromDepthPixelAtResolution karşılık gelen derinlik değerini aramak için. Ne yazık ki, bu fonksiyonun tersi yoktur, bu yüzden derinlik alanına geri dönmenin hiçbir yolu yoktur. Ama NuiTransformDepthImageToSkeleton için x, y derinlik uzayında ihtiyacım var :( [DÜZENLE]: Veya aslında bu sadece benim bir yanlış anlamadır? Belgelerindeki "derinlik pikselinin x-koordinatı" deyince, aslında RGB uzayda x, y demek? – AnonEnginerd

+1

Ah ben yanlış üzgün ... Ben [Bu soruya] görecekti (http://stackoverflow.com/questions/11902593/get-depth-at-color-position-kinect-sdk) tam istediğin gibi geliyor –

cevap

3

Kontrol CameraIntrinsics.

ICoordinateMapper::GetDepthCameraIntrinsics'dan edinebilirsiniz.

Ardından, derinlik uzayda her pikselin (u,v,d) için, bunu yaparak, dünya uzayda koordinat alabilirsiniz: öncelikle ilişkili derinlik uzay pikseli, bulmalıyız renk alanı piksel için

x = (u - principalPointX)/focalLengthX * d; 
y = (v - principalPointY)/focalLengthY * d; 
z = d; 

hangi ICoordinateMapper::MapCameraPointTodepthSpace kullanmalısınız. Tüm renk piksellerinin ilişkili derinlik pikseline (1920x1080 vs 512x424) sahip olmadığından tam HD renk noktası bulutuna sahip olamazsınız.

İlgili konular