запазване на реконструиран 3d изглед на Kinect във файл

Ще стартирам проект; да реконструирам стаята си с kinect.

В какъв формат ще бъде записан 3D реконструираният изглед?

може ли да се запази или конвертира в 3dm, 3ds, max, obj и т.н.?

Благодаря!


person prgbenz    schedule 21.05.2013    source източник


Отговори (2)


Можете лесно да запазите 3d координати във PLY формат. Ето основен пример за използване на 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 експорт в този работилница.

Запазването в PLY ще реши част от проблема и ще трябва да зашиете ръчно, което може да отнеме много време. Ще ви трябва нещо като SLAM (едновременна локализация и картографиране) или други алгоритми за реконструкция, които да помогнат за свързването на нещата. Можете да намерите хубава колекция от алгоритъм на OpenSLAM.

Сега в зависимост от вашето ниво на комфорт с кодирането има няколко опции, които да ви помогнат с това. Също така препоръчвам да разгледате вградения софтуер RGBDemo, който има функция за реконструкция. Това не изисква кодиране, освен ако не искате (тъй като е с отворен код).

С малко кодиране можете също да направите реконструкция с помощта на PointCloudsLibrary(PCL). Ако включва и имплементация на KinectFusion

PCL Kinfu преглед 1PCL Kinfu преглед 2

Ако използвате Microsoft Kinect SDK, Kinect Fusion е интегриран в Kinect SDK 1.7

KinectFusion в Kinect SDK 1.7

Може също да намерите тази публикация за интересна: Kinect Fusion в AutoCAD.

person George Profenza    schedule 22.05.2013
comment
Човече, това е страхотно! Наистина благодаря за това решение, търся нещо подобно от известно време. :) - person VVZen; 30.06.2017

Kinect ви дава изображение с дълбочина. Това е изображение с различни нюанси на сивото, за да покаже колко далеч е нещо от сензора.
Всеки пиксел в изображението използва 16 или 13 бита за стойност на дълбочината (когато се използват само 13 бита, последните 3 бита са използва се за ID на играча).
Можете просто да запазите изображението като .bmp например... или да го конвертирате във всеки друг формат, който ви харесва повече.

Не съм напълно сигурен как искате да реконструирате стаята си.
Kinect не може да улови цялата стая наведнъж, така че ще трябва поне да завъртите kinect, за да заснемете цялата стая.

Каква реконструкция искате да постигнете? Дали това е само изображение в сива скала или искате разстояния до стени и обекти, както и техните размери?
Ако е второто, трябва да обработите изображенията.
Ако е първото, можете просто да залепите единичните снимки заедно, за да образуват или панорама, или куб, каквото искате.

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

person MentholBonbon    schedule 21.05.2013
comment
Опитвам се да реконструирам стаята, като завъртя kinect. В крайна сметка искам да измеря размерите на моята стая. Затова питам дали може да се конвертира в общ 3d формат. Благодаря. - person prgbenz; 22.05.2013