ответ

3

Вы можете легко сэкономить 3d координаты на PLY format. Вот простой пример использования ofxKinect:

void exportPlyCloud(string filename, ofMesh& cloud) { 
    ofFile ply; 
    if (ply.open(filename, ofFile::WriteOnly)) {   
     // write the header 
     ply << "ply" << endl; 
     ply << "format binary_little_endian 1.0" << endl; 
     ply << "element vertex " << cloud.getVertices().size() << endl; 
     ply << "property float x" << endl; 
     ply << "property float y" << endl; 
     ply << "property float z" << endl; 
     ply << "end_header" << endl; 

     // write all the vertices 
     vector<ofVec3f>& surface = cloud.getVertices(); 
     for(int i = 0; i < surface.size(); i++) { 
      if (surface[i].z != 0) { 
       // write the raw data as if it were a stream of bytes 
       ply.write((char*) &surface[i], sizeof(ofVec3f)); 
      } 
     } 
    } 
} 

Вы можете использовать MeshLab для обработки/Стич Ply файлов, а затем экспортировать их в другой формат, как OBJ. Что касается openFrameworks, вы можете найти несколько удобных примеров, включая вышеупомянутый экспорт PLY в этом workshop.

Сохранение в PLY решит часть проблемы, и вам нужно будет вручную использовать stich, что может занять много времени. Вам понадобится нечто вроде SLAM (одновременная локализация и сопоставление) или другие алгоритмы восстановления, которые помогут сшить все вместе. Вы можете найти хорошую коллекцию алгоритмов на OpenSLAM.

Теперь в зависимости от вашего уровня комфорта с кодировкой есть несколько вариантов, которые помогут вам в этом. Я также рекомендую взглянуть на построенное программное обеспечение RGBDemo с функцией восстановления. Это не требует кодирования, если вы не хотите (поскольку это open source).

С немного кодированием вы также можете выполнить реконструкцию, используя PointCloudsLibrary (PCL). Если также включает в себя implementation of KinectFusion

PCL Kinfu preview 1 PCL Kinfu preview 2

Если вы используете Microsoft Kinect SDK, Kinect Fusion был интегрирован в Kinect SDK 1.7

KinectFusion in Kinect SDK 1.7

Вы также можете найти этот пост интересным: Kinect Fusion inside AutoCAD ,

+0

Человек, это здорово! На самом деле, спасибо за это решение, я некоторое время искал что-то подобное. :) – VVZen

0

Kinect дает вам изображение глубины. Это изображение с различными оттенками серого, чтобы указать, как далеко что-то от датчика.
Любой пиксель изображения использует 16 или 13 бит для значения глубины (когда используется только 13 бит, для ID игрока используются 3 последних бита).
Вы можете просто сохранить изображение как .bmp например ... или преобразовать его в любой другой формат, который вам больше нравится.

Я не совсем уверен, как вы хотите восстановить свою комнату.
Kinect не может захватить всю комнату сразу, поэтому вам придется по крайней мере превратить ваш киндекс, чтобы захватить всю комнату.

Какую реконструкцию вы хотите достичь? Это просто изображение в сером цвете или вы хотите, чтобы расстояния до стен и объектов, а также их размеры?
Если это так, вы должны обработать изображения.
Если это первый случай, вы можете просто склеить отдельные снимки вместе, чтобы сформировать панораму или куб, что бы вы ни хотели.

Надеюсь, вы могли бы получить полезную информацию. Не стесняйтесь спрашивать о неопределенности.

+0

Я пытаюсь восстановить комнату, повернув кинжет. В конце концов, я хочу измерить размеры моей комнаты. Вот почему я спрашиваю, можно ли его преобразовать в обычный 3d-формат. Благодарю. – prgbenz

Смежные вопросы