сохранение реконструированного kinect 3D-изображения в файл

Я собираюсь запустить проект; восстановить мою комнату с 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). If также включает реализацию KinectFusion.

PCL Kinfu Preview 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 последних бита используются). используется для идентификатора игрока).
Вы можете просто сохранить изображение, например, в формате .bmp... или преобразовать его в любой другой формат, который вам больше нравится.

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

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

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

person MentholBonbon    schedule 21.05.2013
comment
Я пытаюсь реконструировать комнату, вращая kinect. В конце концов, я хочу измерить размер моей комнаты. Вот поэтому я и спрашиваю, можно ли его конвертировать в обычный формат 3d. Спасибо. - person prgbenz; 22.05.2013