0

我要运行一个项目;用 kinect 重建我的房间。

3d 重建视图将以什么格式保存?

它可以保存或转换为 3dm、3ds、max、obj 等吗?

谢谢!

4

2 回答 2

3

您可以轻松地将 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金服预览1 PCL 金福预览 2

如果您使用的是 Microsoft Kinect SDK,Kinect Fusion已集成到Kinect SDK 1.7

Kinect SDK 1.7 中的 KinectFusion

您可能还会发现这篇文章很有趣:AutoCAD 中的 Kinect Fusion

于 2013-05-22T10:50:10.233 回答
0

kinect 为您提供深度图像。这是一张带有不同灰度的图像,表示物体距离传感器有多远。
图像中的任何像素都使用 16 位或 13 位作为深度值(当仅使用 13 位时,最后 3 位用于玩家 ID)。
例如,您可以将图像另存为 .bmp ... 或将其转换为您更喜欢的任何其他格式。

我不完全确定你想如何重建你的房间。
kinect 无法一次捕获整个房间,因此您至少必须转动 kinect 才能捕获整个房间。

你想实现什么样的重建?它只是灰度图像,还是您想要与墙壁和物体的距离以及它们的尺寸?
如果是后者,您应该处理图像。
如果是前者,您可以将单张图片粘合在一起以形成全景或立方体,无论您喜欢什么。

我希望你能得到一些有用的信息。随意询问不确定性。

于 2013-05-21T17:36:55.317 回答