我正在尝试注释我的点云数据。我找到了许多工具,但只能通过Supervisely访问3D点云工具的演示版。通过在对象周围绘制3D框完成注释后,输出注释文件将采用JSON文件的形式。其中包含盒子的类和全局位置,方向和尺寸。如何使用此文件为这些3D框内的点分配标签。我想要.pcd文件或.bin文件中的输出格式。JSON文件的输出如下:
[{"id":36698,"name":"vel_1558647824006782.pcd","annotations":[{"className":"Car","geometryType":"cuboid","classId":957,"geometry":{"position":{"x":9.539855967959713,"y":18.342023271012913,"z":0.43944128482454614},"rotation":{"x":0,"y":0,"z":0},"dimensions":{"x":5.691547052392309,"y":1.6625674002633986,"z":1.757779283656416}}},{"className":"ground","geometryType":"cuboid","classId":958,"geometry":{"position":{"x":28.890481890779242,"y":8.463823613489927,"z":-1.0314986175132965},"rotation":{"x":0,"y":0,"z":0},"dimensions":{"x":96.34273328620523,"y":18.714553504372063,"z":1.0544185995045456}}}]}]
我想过使用PCL的crop_box filter。但是还有其他解决方法。如果有人可以将我指向其他能最好地解决问题的点云注释工具,这也将有所帮助?
我能够编写一个c ++脚本来读取json文件,并使用PCL的cropbox过滤器解决该问题。使用的方法如下:
std::ifstream ifs("somepath.json");
json j = json::parse(ifs);
std::vector<float> position {
j[0]["annotations"][i]["geometry"]["position"]["x"].get<float>(),
j[0]["annotations"][i]["geometry"]["position"]["y"].get<float>(),
j[0]["annotations"][i]["geometry"]["position"]["z"].get<float>()};