Kinect получить глубину пикселей от произвольного угла?
Можно ли как-нибудь получить глубину пикселей у кинекта под разными углами? Как, скажем, kinect записывает меня сверху, и я хотел бы получить пиксели глубины, которые были видны мне спереди?
Я видел примеры людей, использующих облака точек, которые могут из этих данных вращать созданную сетку (из этих точек), и хотя kinect, скажем, записывает человека сверху, можно с этими облаками точек вращать сетку как это было видно спереди или под ногами (что действительно круто!).
Так можно ли из этого создать собственные пиксели глубины из облака точек? Любые указатели будут с благодарностью.
1 ответ
Хорошо, я вроде решил это очень уродливо. По крайней мере, я так думаю. Если у кого-то есть идея получше, пожалуйста, отправьте ее!
Поэтому я создал сетку из облака точек (как видно из примера ofxKinect), нарисовал ее в FBO и обернул вокруг шейдера, который окрашивал значение глубины для фрагментов. Таким образом, я получаю цветной диапазон от [0-1].
После этого, вернувшись на процессор, я смог извлечь пиксели из FBO, используя readToPixels, и нарисовал эти пиксели в ofImage. Из изображения я мог выбрать цвета для каждого пикселя на изображении (теперь в глубине серого).
Теперь, вздыхая, проходя по каждому пикселю x & y, я проверяю цвет каждого пикселя и собираю это значение и делаю некоторые вычисления, чтобы увидеть, где это цветное значение находится в диапазоне 0-255 (как в обычном kinect.getDepthPixels(...) данные) как:
int size = sizeof(unsigned char) * ( ofGetHeight() * ofGetWidth() );
unsigned char* p = (unsigned char*)malloc(size);
for (int x = 0; x < ofGetWidth(); x++)
{
for (int y = 0; y < ofGetHeight(); y++)
{
ofColor col = sampleImg.getColor(x, y);
float d = 0.0f;
if (col.a != 0)
{
d = (float)(col.r * 3) / 765.0f;
d = d * 255.0f;
}
int id = (y*1) + x;
p[id] = d;
}
}
Из p я получаю массив без знака со значениями в диапазоне [0-255], например, функцию kinect.getDepthPixels(), но вместо этого, основываясь на текстуре глубины, у меня теперь есть данные глубины из облака точек.
Это не полностью проверено, но я думаю, что это шаг в правильном направлении. И я не слишком люблю это решение, но я надеюсь, что оно поможет кому-то еще, так как я весь день безумно гуглял без особой помощи. Я мог бы просто усложнить мне многое, но посмотрим.