Я собираюсь запустить проект; восстановить мою комнату с kinect.
В каком формате будет сохранен реконструированный 3D-вид?
можно ли сохранить или преобразовать в 3dm, 3ds, max, obj и т. д.?
Благодарность!
Я собираюсь запустить проект; восстановить мою комнату с kinect.
В каком формате будет сохранен реконструированный 3D-вид?
можно ли сохранить или преобразовать в 3dm, 3ds, max, obj и т. д.?
Благодарность!
Вы можете легко сохранить 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.
Если вы используете Microsoft Kinect SDK, Kinect Fusion был интегрирован в Kinect SDK 1.7
Вам также может быть интересен этот пост: Kinect Fusion внутри AutoCAD.
Kinect дает вам изображение глубины. Это изображение с различными оттенками серого, чтобы указать, насколько далеко что-то находится от сенсора.
Любой пиксель изображения использует 16 или 13 бит для значения глубины (когда используются только 13 бит, 3 последних бита используются). используется для идентификатора игрока).
Вы можете просто сохранить изображение, например, в формате .bmp... или преобразовать его в любой другой формат, который вам больше нравится.
Я не совсем понимаю, как вы хотите реконструировать свою комнату.
kinect не может захватить всю комнату сразу, поэтому вам придется по крайней мере повернуть kinect, чтобы захватить всю комнату.
Какой реконструкции вы хотите добиться? Это просто изображение в оттенках серого или вам нужны расстояния до стен и объектов, а также их размеры?
В последнем случае вы должны обработать изображения.
В первом случае вы можете просто склеить отдельные изображения вместе, чтобы сформировать панораму или куб, как вам нравится.
Надеюсь, вы смогли почерпнуть полезную информацию. Не стесняйтесь спрашивать о неопределенностях.