0

この例を使用して、点群の視覚化を追加しようとしています。

基本的に、私のコードはリンクされた例から変更されたコードです:

PointTrackerTwoPass<GrayU8> tracker = FactoryPointTrackerTwoPass.klt(configKlt,
            new ConfigGeneralDetector(600, 3, 1), GrayU8.class, GrayS16.class);
visualOdometry = FactoryVisualOdometry.depthDepthPnP(-1, 120, 2, 150, 100, true, sparseDepth, tracker,
            GrayU8.class, GrayU16.class);
<...>
visualOdometry.process(grayScaleImage, depth));
Se3_F64 leftToWorld = visualOdometry.getCameraToWorld();
AccessPointTracks3D access = (AccessPointTracks3D) visualOdometry;
int N = access.getAllTracks().size();
for (int i = 0; i < N; i++) {
    if (access.isInlier(i)) {
        Point3D_F64 inlierWorld = new Point3D_F64();
        Point3D_F64 inlierCamera = access.getTrackLocation(i);
        georegression.transform.se.SePointOps_F64.transform(leftToWorld, inlierCamera, inlierWorld);
        if (tree.add(new My3DPoint(inlierWorld.x, inlierWorld.y, inlierWorld.z)))
          totalElementsInTree++;

点群が生成されますが、私のシーンにはあまり似ていません。これは、アップベクターを中心に kinect カメラを回転させることによって得られる、雲の上から下へのビューです。写真は部屋の一角。ご覧のとおり、直角に接続された 2 つの直線の壁の代わりに、上記のコードは一連の円弧または曲線を生成します。FactoryVisualOdometry.depthDepthPnPの最初のパラメーターを正の整数 に設定すると、効果がさらに顕著になります。ここに画像の説明を入力

4

0 に答える 0