我要运行一个项目;用 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) 进行重建。如果还包括KinectFusion 的实现
如果您使用的是 Microsoft Kinect SDK,Kinect Fusion已集成到Kinect SDK 1.7
您可能还会发现这篇文章很有趣:AutoCAD 中的 Kinect Fusion。
kinect 为您提供深度图像。这是一张带有不同灰度的图像,表示物体距离传感器有多远。
图像中的任何像素都使用 16 位或 13 位作为深度值(当仅使用 13 位时,最后 3 位用于玩家 ID)。
例如,您可以将图像另存为 .bmp ... 或将其转换为您更喜欢的任何其他格式。
我不完全确定你想如何重建你的房间。
kinect 无法一次捕获整个房间,因此您至少必须转动 kinect 才能捕获整个房间。
你想实现什么样的重建?它只是灰度图像,还是您想要与墙壁和物体的距离以及它们的尺寸?
如果是后者,您应该处理图像。
如果是前者,您可以将单张图片粘合在一起以形成全景或立方体,无论您喜欢什么。
我希望你能得到一些有用的信息。随意询问不确定性。