Beispiel #1
0
        public void Open()
        {
            _DataBuilder = new DataBuilder();
            _DataStruct  = _DataBuilder.NewStructureArray(new[] { "raw" }, 1);

            if (_MatlabFormat.HasFlag(MatlabFormat.Imu0))
            {
                _DataStruct["raw", 0] = AddFieldToStructureArray(_DataStruct["raw", 0], "imu0", 1);

                (_DataStruct["raw", 0] as IStructureArray)["imu0", 0] = AddFieldToStructureArray((_DataStruct["raw", 0] as IStructureArray)["imu0", 0], "time", 1);

                (_DataStruct["raw", 0] as IStructureArray)["imu0", 0] = AddFieldToStructureArray((_DataStruct["raw", 0] as IStructureArray)["imu0", 0], "gyrox", 1);
                (_DataStruct["raw", 0] as IStructureArray)["imu0", 0] = AddFieldToStructureArray((_DataStruct["raw", 0] as IStructureArray)["imu0", 0], "gyroy", 1);
                (_DataStruct["raw", 0] as IStructureArray)["imu0", 0] = AddFieldToStructureArray((_DataStruct["raw", 0] as IStructureArray)["imu0", 0], "gyroz", 1);

                (_DataStruct["raw", 0] as IStructureArray)["imu0", 0] = AddFieldToStructureArray((_DataStruct["raw", 0] as IStructureArray)["imu0", 0], "accx", 1);
                (_DataStruct["raw", 0] as IStructureArray)["imu0", 0] = AddFieldToStructureArray((_DataStruct["raw", 0] as IStructureArray)["imu0", 0], "accy", 1);
                (_DataStruct["raw", 0] as IStructureArray)["imu0", 0] = AddFieldToStructureArray((_DataStruct["raw", 0] as IStructureArray)["imu0", 0], "accz", 1);

                ((_DataStruct["raw", 0] as IStructureArray)["imu0", 0] as IStructureArray)["gyrox", 0] = _DataBuilder.NewArray <double>(1, 0);
                ((_DataStruct["raw", 0] as IStructureArray)["imu0", 0] as IStructureArray)["gyroy", 0] = _DataBuilder.NewArray <double>(1, 0);
                ((_DataStruct["raw", 0] as IStructureArray)["imu0", 0] as IStructureArray)["gyroz", 0] = _DataBuilder.NewArray <double>(1, 0);

                ((_DataStruct["raw", 0] as IStructureArray)["imu0", 0] as IStructureArray)["accx", 0] = _DataBuilder.NewArray <double>(1, 0);
                ((_DataStruct["raw", 0] as IStructureArray)["imu0", 0] as IStructureArray)["accy", 0] = _DataBuilder.NewArray <double>(1, 0);
                ((_DataStruct["raw", 0] as IStructureArray)["imu0", 0] as IStructureArray)["accz", 0] = _DataBuilder.NewArray <double>(1, 0);
            }
            if (_MatlabFormat.HasFlag(MatlabFormat.Camera0))
            {
                _DataStruct["raw", 0] = AddFieldToStructureArray(_DataStruct["raw", 0], "cam0", 1);

                (_DataStruct["raw", 0] as IStructureArray)["cam0", 0] = AddFieldToStructureArray((_DataStruct["raw", 0] as IStructureArray)["cam0", 0], "time", 1);
            }
        }
        public void Write(Dictionary <string, List <List <double> > > data, string name)
        {
            _DataBuilder = new DataBuilder();
            _DataStruct  = _DataBuilder.NewStructureArray(new[] { name }, 1);

            foreach (string var in data.Keys)
            {
                List <List <double> > values = data[var];

                int n = values.Count;
                int m = values.Max(c => c.Count);

                _DataStruct[name, 0] = MatlabUtilities.AddFieldToStructureArray(_DataBuilder, _DataStruct[name, 0], var, 1);
                (_DataStruct[name, 0] as IStructureArray)[var, 0] = _DataBuilder.NewArray <double>(n, m);
                IArrayOf <double> array = (IArrayOf <double>)(_DataStruct[name, 0] as IStructureArray)[var, 0];
                for (int i = 0; i < n; i++)
                {
                    for (int j = 0; j < m; j++)
                    {
                        if (values[i] != null && j < values[i].Count)
                        {
                            array[i, j] = values[i][j];
                        }
                    }
                }
            }
        }
Beispiel #3
0
        public List <Frame> GetFrames()
        {
            List <Frame> frames = new List <Frame>();

            IStructureArray dataStruct = _MatFile["data"].Value as IStructureArray;

            IArray timePre = (dataStruct["PreOptimization", 0] as IStructureArray)["time", 0];

            IArray idPre = (dataStruct["PreOptimization", 0] as IStructureArray)["id", 0];

            IArray T_cam_worldPre = (dataStruct["PreOptimization", 0] as IStructureArray)["T_cam_world", 0];

            IArray T_base_worldPre = (dataStruct["PreOptimization", 0] as IStructureArray)["T_base_world", 0];

            IArray velocityPre = (dataStruct["PreOptimization", 0] as IStructureArray)["velocity", 0];

            IArray bgPre = (dataStruct["PreOptimization", 0] as IStructureArray)["bias_gyroscope", 0];
            IArray baPre = (dataStruct["PreOptimization", 0] as IStructureArray)["bias_accelerometer", 0];

            IArray scalePre = (dataStruct["PreOptimization", 0] as IStructureArray)["scale", 0];

            for (int i = 0; i < timePre.Dimensions[1]; i++)
            {
                double[,] matrixTcw = new double[4, 4];
                double[,] matrixTbw = new double[4, 4];
                Vector3 v  = new Vector3();
                Vector3 bg = new Vector3();
                Vector3 ba = new Vector3();

                for (int j = 0; j < 3; j++)
                {
                    v.Vector[j]  = ((IArrayOf <double>)velocityPre)[j, i];
                    bg.Vector[j] = ((IArrayOf <double>)bgPre)[j, i];
                    ba.Vector[j] = ((IArrayOf <double>)baPre)[j, i];
                }

                for (int j = 0; j < 4; j++)
                {
                    for (int k = 0; k < 4; k++)
                    {
                        matrixTcw[j, k] = ((IArrayOf <double>)T_cam_worldPre)[j, k, i];
                        matrixTbw[j, k] = ((IArrayOf <double>)T_base_worldPre)[j, k, i];
                    }
                }

                SE3 Tcw = new SE3(matrixTcw);
                SE3 Tbw = new SE3(matrixTbw);

                Frame frame = new Frame(((IArrayOf <uint>)idPre)[0, i], ((IArrayOf <double>)timePre)[0, i], Tcw, Tbw, v, bg, ba, ((IArrayOf <double>)scalePre)[0, i]);
                frames.Add(frame);
            }

            return(frames);
        }
        public void Open()
        {
            _DataBuilder = new DataBuilder();
            _DataStruct  = _DataBuilder.NewStructureArray(new[] { "PreOptimization", "PostOptimization" }, 1);

            _DataStruct["PreOptimization", 0] = AddFieldToStructureArray(_DataStruct["PreOptimization", 0], "time", 1);
            _DataStruct["PreOptimization", 0] = AddFieldToStructureArray(_DataStruct["PreOptimization", 0], "id", 1);
            _DataStruct["PreOptimization", 0] = AddFieldToStructureArray(_DataStruct["PreOptimization", 0], "T_cam_world", 1);
            _DataStruct["PreOptimization", 0] = AddFieldToStructureArray(_DataStruct["PreOptimization", 0], "T_base_world", 1);
            _DataStruct["PreOptimization", 0] = AddFieldToStructureArray(_DataStruct["PreOptimization", 0], "velocity", 1);
            _DataStruct["PreOptimization", 0] = AddFieldToStructureArray(_DataStruct["PreOptimization", 0], "bias_gyroscope", 1);
            _DataStruct["PreOptimization", 0] = AddFieldToStructureArray(_DataStruct["PreOptimization", 0], "bias_accelerometer", 1);
            _DataStruct["PreOptimization", 0] = AddFieldToStructureArray(_DataStruct["PreOptimization", 0], "scale", 1);

            _DataStruct["PostOptimization", 0] = AddFieldToStructureArray(_DataStruct["PostOptimization", 0], "time", 1);
            _DataStruct["PostOptimization", 0] = AddFieldToStructureArray(_DataStruct["PostOptimization", 0], "id", 1);
            _DataStruct["PostOptimization", 0] = AddFieldToStructureArray(_DataStruct["PostOptimization", 0], "T_cam_world", 1);
            _DataStruct["PostOptimization", 0] = AddFieldToStructureArray(_DataStruct["PostOptimization", 0], "T_base_world", 1);
            _DataStruct["PostOptimization", 0] = AddFieldToStructureArray(_DataStruct["PostOptimization", 0], "kfid", 1);
            _DataStruct["PostOptimization", 0] = AddFieldToStructureArray(_DataStruct["PostOptimization", 0], "velocity", 1);
            _DataStruct["PostOptimization", 0] = AddFieldToStructureArray(_DataStruct["PostOptimization", 0], "bias_gyroscope", 1);
            _DataStruct["PostOptimization", 0] = AddFieldToStructureArray(_DataStruct["PostOptimization", 0], "bias_accelerometer", 1);
            _DataStruct["PostOptimization", 0] = AddFieldToStructureArray(_DataStruct["PostOptimization", 0], "scale", 1);
            _DataStruct["PostOptimization", 0] = AddFieldToStructureArray(_DataStruct["PostOptimization", 0], "fx", 1);
            _DataStruct["PostOptimization", 0] = AddFieldToStructureArray(_DataStruct["PostOptimization", 0], "fy", 1);
            _DataStruct["PostOptimization", 0] = AddFieldToStructureArray(_DataStruct["PostOptimization", 0], "cx", 1);
            _DataStruct["PostOptimization", 0] = AddFieldToStructureArray(_DataStruct["PostOptimization", 0], "cy", 1);
            _DataStruct["PostOptimization", 0] = AddFieldToStructureArray(_DataStruct["PostOptimization", 0], "point_cloud", 1);

            (_DataStruct["PreOptimization", 0] as IStructureArray)["time", 0]               = _DataBuilder.NewArray <double>(1, 0);
            (_DataStruct["PreOptimization", 0] as IStructureArray)["id", 0]                 = _DataBuilder.NewArray <uint>(1, 0);
            (_DataStruct["PreOptimization", 0] as IStructureArray)["T_cam_world", 0]        = _DataBuilder.NewArray <double>(4, 4, 0);
            (_DataStruct["PreOptimization", 0] as IStructureArray)["T_base_world", 0]       = _DataBuilder.NewArray <double>(4, 4, 0);
            (_DataStruct["PreOptimization", 0] as IStructureArray)["velocity", 0]           = _DataBuilder.NewArray <double>(3, 0);
            (_DataStruct["PreOptimization", 0] as IStructureArray)["bias_gyroscope", 0]     = _DataBuilder.NewArray <double>(3, 0);
            (_DataStruct["PreOptimization", 0] as IStructureArray)["bias_accelerometer", 0] = _DataBuilder.NewArray <double>(3, 0);
            (_DataStruct["PreOptimization", 0] as IStructureArray)["scale", 0]              = _DataBuilder.NewArray <double>(1, 0);

            (_DataStruct["PostOptimization", 0] as IStructureArray)["time", 0]               = _DataBuilder.NewArray <double>(1, 0);
            (_DataStruct["PostOptimization", 0] as IStructureArray)["id", 0]                 = _DataBuilder.NewArray <uint>(1, 0);
            (_DataStruct["PostOptimization", 0] as IStructureArray)["kfid", 0]               = _DataBuilder.NewArray <uint>(1, 0);
            (_DataStruct["PostOptimization", 0] as IStructureArray)["T_cam_world", 0]        = _DataBuilder.NewArray <double>(4, 4, 0);
            (_DataStruct["PostOptimization", 0] as IStructureArray)["T_base_world", 0]       = _DataBuilder.NewArray <double>(4, 4, 0);
            (_DataStruct["PostOptimization", 0] as IStructureArray)["velocity", 0]           = _DataBuilder.NewArray <double>(3, 0);
            (_DataStruct["PostOptimization", 0] as IStructureArray)["bias_gyroscope", 0]     = _DataBuilder.NewArray <double>(3, 0);
            (_DataStruct["PostOptimization", 0] as IStructureArray)["bias_accelerometer", 0] = _DataBuilder.NewArray <double>(3, 0);
            (_DataStruct["PostOptimization", 0] as IStructureArray)["scale", 0]              = _DataBuilder.NewArray <double>(1, 0);
            (_DataStruct["PostOptimization", 0] as IStructureArray)["fx", 0]                 = _DataBuilder.NewArray <double>(1, 0);
            (_DataStruct["PostOptimization", 0] as IStructureArray)["fy", 0]                 = _DataBuilder.NewArray <double>(1, 0);
            (_DataStruct["PostOptimization", 0] as IStructureArray)["cx", 0]                 = _DataBuilder.NewArray <double>(1, 0);
            (_DataStruct["PostOptimization", 0] as IStructureArray)["cy", 0]                 = _DataBuilder.NewArray <double>(1, 0);
        }
 private void CompareStructureArrays(IStructureArray expected, IStructureArray actual)
 {
     Assert.That(actual, Is.Not.Null);
     Assert.That(expected.Dimensions, Is.EqualTo(actual.Dimensions));
     Assert.That(expected.FieldNames, Is.EquivalentTo(actual.FieldNames));
     foreach (var name in expected.FieldNames)
     {
         for (var i = 0; i < expected.Count; i++)
         {
             CompareMatArrays(expected[name, i], actual[name, i]);
         }
     }
 }
        public void ExportMap(Map map)
        {
            List <KeyFrame> keyFrames = map.KeyFrames;
            List <Frame>    frames    = map.Frames;

            IArray timePre  = (_DataStruct["PreOptimization", 0] as IStructureArray)["time", 0];
            IArray timePost = (_DataStruct["PostOptimization", 0] as IStructureArray)["time", 0];

            IArray idPre  = (_DataStruct["PreOptimization", 0] as IStructureArray)["id", 0];
            IArray idPost = (_DataStruct["PostOptimization", 0] as IStructureArray)["id", 0];

            IArray T_cam_worldPre  = (_DataStruct["PreOptimization", 0] as IStructureArray)["T_cam_world", 0];
            IArray T_cam_worldPost = (_DataStruct["PostOptimization", 0] as IStructureArray)["T_cam_world", 0];

            IArray T_base_worldPre  = (_DataStruct["PreOptimization", 0] as IStructureArray)["T_base_world", 0];
            IArray T_base_worldPost = (_DataStruct["PostOptimization", 0] as IStructureArray)["T_base_world", 0];

            IArray velocityPre  = (_DataStruct["PreOptimization", 0] as IStructureArray)["velocity", 0];
            IArray velocityPost = (_DataStruct["PostOptimization", 0] as IStructureArray)["velocity", 0];

            IArray bgPre = (_DataStruct["PreOptimization", 0] as IStructureArray)["bias_gyroscope", 0];
            IArray baPre = (_DataStruct["PreOptimization", 0] as IStructureArray)["bias_accelerometer", 0];

            IArray bgPost = (_DataStruct["PostOptimization", 0] as IStructureArray)["bias_gyroscope", 0];
            IArray baPost = (_DataStruct["PostOptimization", 0] as IStructureArray)["bias_accelerometer", 0];

            IArray kfidPost = (_DataStruct["PostOptimization", 0] as IStructureArray)["kfid", 0];

            IArray fxPost = (_DataStruct["PostOptimization", 0] as IStructureArray)["fx", 0];
            IArray fyPost = (_DataStruct["PostOptimization", 0] as IStructureArray)["fy", 0];
            IArray cxPost = (_DataStruct["PostOptimization", 0] as IStructureArray)["cx", 0];
            IArray cyPost = (_DataStruct["PostOptimization", 0] as IStructureArray)["cy", 0];

            IArray scalePre  = (_DataStruct["PreOptimization", 0] as IStructureArray)["scale", 0];
            IArray scalePost = (_DataStruct["PostOptimization", 0] as IStructureArray)["scale", 0];

            (_DataStruct["PostOptimization", 0] as IStructureArray)["point_cloud", 0] = AddFieldToStructureArray(((_DataStruct["PostOptimization", 0] as IStructureArray)["point_cloud", 0] as IStructureArray), "keyframe", keyFrames.Count);

            timePre  = ResizeArray <double>(timePre, 1, frames.Count);
            timePost = ResizeArray <double>(timePost, 1, keyFrames.Count);

            idPre  = ResizeArray <uint>(idPre, 1, frames.Count);
            idPost = ResizeArray <uint>(idPost, 1, keyFrames.Count);

            T_cam_worldPre  = ResizeArray <double>(T_cam_worldPre, 4, 4, frames.Count);
            T_cam_worldPost = ResizeArray <double>(T_cam_worldPost, 4, 4, keyFrames.Count);

            T_base_worldPre  = ResizeArray <double>(T_base_worldPre, 4, 4, frames.Count);
            T_base_worldPost = ResizeArray <double>(T_base_worldPost, 4, 4, keyFrames.Count);

            velocityPre  = ResizeArray <double>(timePre, 3, frames.Count);
            velocityPost = ResizeArray <double>(timePost, 3, keyFrames.Count);

            bgPre = ResizeArray <double>(timePre, 3, frames.Count);
            baPre = ResizeArray <double>(timePost, 3, frames.Count);

            bgPost = ResizeArray <double>(timePre, 3, keyFrames.Count);
            baPost = ResizeArray <double>(timePost, 3, keyFrames.Count);

            kfidPost = ResizeArray <uint>(kfidPost, 1, keyFrames.Count);

            fxPost = ResizeArray <double>(fxPost, 1, keyFrames.Count);
            fyPost = ResizeArray <double>(fyPost, 1, keyFrames.Count);
            cxPost = ResizeArray <double>(cxPost, 1, keyFrames.Count);
            cyPost = ResizeArray <double>(cyPost, 1, keyFrames.Count);

            scalePre  = ResizeArray <double>(scalePre, 1, frames.Count);
            scalePost = ResizeArray <double>(scalePost, 1, keyFrames.Count);

            for (int i = 0; i < frames.Count; i++)
            {
                if (frames[i] != null)
                {
                    ((IArrayOf <double>)timePre)[0, i]  = frames[i].Time;
                    ((IArrayOf <uint>)idPre)[0, i]      = frames[i].Id;
                    ((IArrayOf <double>)scalePre)[0, i] = frames[i].Scale;

                    for (int j = 0; j < 3; j++)
                    {
                        ((IArrayOf <double>)velocityPre)[j, i] = frames[i].Velocity.Vector[j];
                        ((IArrayOf <double>)bgPre)[j, i]       = frames[i].BiasGyroscope.Vector[j];
                        ((IArrayOf <double>)baPre)[j, i]       = frames[i].BiasAccelerometer.Vector[j];
                    }

                    for (int j = 0; j < 4; j++)
                    {
                        for (int k = 0; k < 4; k++)
                        {
                            ((IArrayOf <double>)T_cam_worldPre)[j, k, i]  = frames[i].T_cam_world.Matrix[j, k];
                            ((IArrayOf <double>)T_base_worldPre)[j, k, i] = frames[i].T_base_world.Matrix[j, k];
                        }
                    }
                }
            }

            for (int i = 0; i < keyFrames.Count; i++)
            {
                if (keyFrames[i] != null && keyFrames[i].Frame != null)
                {
                    IStructureArray kfstruct = ((_DataStruct["PostOptimization", 0] as IStructureArray)["point_cloud", 0] as IStructureArray)["keyframe", i] as IStructureArray;

                    kfstruct = AddFieldToStructureArray(kfstruct, "u", 1);
                    kfstruct = AddFieldToStructureArray(kfstruct, "v", 1);
                    kfstruct = AddFieldToStructureArray(kfstruct, "inverse_depth", 1);
                    kfstruct = AddFieldToStructureArray(kfstruct, "colors", 1);

                    kfstruct["u", 0]             = _DataBuilder.NewArray <double>(1, keyFrames[i].Points.Count);
                    kfstruct["v", 0]             = _DataBuilder.NewArray <double>(1, keyFrames[i].Points.Count);
                    kfstruct["inverse_depth", 0] = _DataBuilder.NewArray <double>(1, keyFrames[i].Points.Count);
                    kfstruct["colors", 0]        = _DataBuilder.NewArray <byte>(8, keyFrames[i].Points.Count);

                    for (int j = 0; j < keyFrames[i].Points.Count; j++)
                    {
                        (kfstruct["u", 0] as IArrayOf <double>)[0, j]             = keyFrames[i].Points[j].U;
                        (kfstruct["v", 0] as IArrayOf <double>)[0, j]             = keyFrames[i].Points[j].V;
                        (kfstruct["inverse_depth", 0] as IArrayOf <double>)[0, j] = keyFrames[i].Points[j].InverseDepth;
                        for (int k = 0; k < 8; k++)
                        {
                            (kfstruct["colors", 0] as IArrayOf <byte>)[k, j] = keyFrames[i].Points[j].Colors[k];
                        }
                    }

                    ((IArrayOf <double>)timePost)[0, i]  = keyFrames[i].Frame.Time;
                    ((IArrayOf <uint>)idPost)[0, i]      = keyFrames[i].Frame.Id;
                    ((IArrayOf <uint>)kfidPost)[0, i]    = keyFrames[i].Id;
                    ((IArrayOf <double>)scalePost)[0, i] = keyFrames[i].Frame.Scale;

                    ((IArrayOf <double>)fxPost)[0, i] = keyFrames[i].Fx;
                    ((IArrayOf <double>)fyPost)[0, i] = keyFrames[i].Fy;
                    ((IArrayOf <double>)cxPost)[0, i] = keyFrames[i].Cx;
                    ((IArrayOf <double>)cyPost)[0, i] = keyFrames[i].Cy;

                    for (int j = 0; j < 3; j++)
                    {
                        ((IArrayOf <double>)velocityPost)[j, i] = keyFrames[i].Frame.Velocity.Vector[j];
                        ((IArrayOf <double>)bgPost)[j, i]       = keyFrames[i].Frame.BiasGyroscope.Vector[j];
                        ((IArrayOf <double>)baPost)[j, i]       = keyFrames[i].Frame.BiasAccelerometer.Vector[j];
                    }

                    for (int j = 0; j < 4; j++)
                    {
                        for (int k = 0; k < 4; k++)
                        {
                            ((IArrayOf <double>)T_cam_worldPost)[j, k, i]  = keyFrames[i].Frame.T_cam_world.Matrix[j, k];
                            ((IArrayOf <double>)T_base_worldPost)[j, k, i] = keyFrames[i].Frame.T_base_world.Matrix[j, k];
                        }
                    }

                    ((_DataStruct["PostOptimization", 0] as IStructureArray)["point_cloud", 0] as IStructureArray)["keyframe", i] = kfstruct;
                }
            }

            (_DataStruct["PreOptimization", 0] as IStructureArray)["time", 0]               = timePre;
            (_DataStruct["PreOptimization", 0] as IStructureArray)["id", 0]                 = idPre;
            (_DataStruct["PreOptimization", 0] as IStructureArray)["T_cam_world", 0]        = T_cam_worldPre;
            (_DataStruct["PreOptimization", 0] as IStructureArray)["T_base_world", 0]       = T_base_worldPre;
            (_DataStruct["PreOptimization", 0] as IStructureArray)["velocity", 0]           = velocityPre;
            (_DataStruct["PreOptimization", 0] as IStructureArray)["bias_gyroscope", 0]     = bgPre;
            (_DataStruct["PreOptimization", 0] as IStructureArray)["bias_accelerometer", 0] = baPre;
            (_DataStruct["PreOptimization", 0] as IStructureArray)["scale", 0]              = scalePre;

            (_DataStruct["PostOptimization", 0] as IStructureArray)["time", 0]               = timePost;
            (_DataStruct["PostOptimization", 0] as IStructureArray)["id", 0]                 = idPost;
            (_DataStruct["PostOptimization", 0] as IStructureArray)["T_cam_world", 0]        = T_cam_worldPost;
            (_DataStruct["PostOptimization", 0] as IStructureArray)["T_base_world", 0]       = T_base_worldPost;
            (_DataStruct["PostOptimization", 0] as IStructureArray)["kfid", 0]               = kfidPost;
            (_DataStruct["PostOptimization", 0] as IStructureArray)["velocity", 0]           = velocityPost;
            (_DataStruct["PostOptimization", 0] as IStructureArray)["bias_gyroscope", 0]     = bgPost;
            (_DataStruct["PostOptimization", 0] as IStructureArray)["bias_accelerometer", 0] = baPost;
            (_DataStruct["PostOptimization", 0] as IStructureArray)["scale", 0]              = scalePost;
            (_DataStruct["PostOptimization", 0] as IStructureArray)["fx", 0]                 = fxPost;
            (_DataStruct["PostOptimization", 0] as IStructureArray)["fy", 0]                 = fyPost;
            (_DataStruct["PostOptimization", 0] as IStructureArray)["cx", 0]                 = cxPost;
            (_DataStruct["PostOptimization", 0] as IStructureArray)["cy", 0]                 = cyPost;
        }
Beispiel #7
0
        public List <KeyFrame> GetKeyFrames()
        {
            List <KeyFrame> keyFrames = new List <KeyFrame>();

            IStructureArray dataStruct = _MatFile["data"].Value as IStructureArray;

            IArray timePost = (dataStruct["PostOptimization", 0] as IStructureArray)["time", 0];

            IArray idPost = (dataStruct["PostOptimization", 0] as IStructureArray)["id", 0];

            IArray T_cam_worldPost = (dataStruct["PostOptimization", 0] as IStructureArray)["T_cam_world", 0];

            IArray T_base_worldPost = (dataStruct["PostOptimization", 0] as IStructureArray)["T_base_world", 0];

            IArray velocityPost = (dataStruct["PostOptimization", 0] as IStructureArray)["velocity", 0];

            IArray bgPost = (dataStruct["PostOptimization", 0] as IStructureArray)["bias_gyroscope", 0];
            IArray baPost = (dataStruct["PostOptimization", 0] as IStructureArray)["bias_accelerometer", 0];

            IArray kfidPost = (dataStruct["PostOptimization", 0] as IStructureArray)["kfid", 0];

            IArray scalePost = (dataStruct["PostOptimization", 0] as IStructureArray)["scale", 0];

            IArray fxPost = (dataStruct["PostOptimization", 0] as IStructureArray)["fx", 0];
            IArray fyPost = (dataStruct["PostOptimization", 0] as IStructureArray)["fy", 0];
            IArray cxPost = (dataStruct["PostOptimization", 0] as IStructureArray)["cx", 0];
            IArray cyPost = (dataStruct["PostOptimization", 0] as IStructureArray)["cy", 0];

            for (int i = 0; i < timePost.Dimensions[1]; i++)
            {
                IStructureArray kfstruct = ((dataStruct["PostOptimization", 0] as IStructureArray)["point_cloud", 0] as IStructureArray)["keyframe", i] as IStructureArray;

                int points = (kfstruct["u", 0] as IArrayOf <double>).Dimensions[1];

                double[,] matrixTcw = new double[4, 4];
                double[,] matrixTbw = new double[4, 4];
                Vector3 v  = new Vector3();
                Vector3 bg = new Vector3();
                Vector3 ba = new Vector3();

                for (int j = 0; j < 3; j++)
                {
                    v.Vector[j]  = ((IArrayOf <double>)velocityPost)[j, i];
                    bg.Vector[j] = ((IArrayOf <double>)bgPost)[j, i];
                    ba.Vector[j] = ((IArrayOf <double>)baPost)[j, i];
                }

                for (int j = 0; j < 4; j++)
                {
                    for (int k = 0; k < 4; k++)
                    {
                        matrixTcw[j, k] = ((IArrayOf <double>)T_cam_worldPost)[j, k, i];
                        matrixTbw[j, k] = ((IArrayOf <double>)T_base_worldPost)[j, k, i];
                    }
                }

                SE3 Tcw = new SE3(matrixTcw);
                SE3 Tbw = new SE3(matrixTbw);

                Frame    frame    = new Frame(((IArrayOf <uint>)idPost)[0, i], ((IArrayOf <double>)timePost)[0, i], Tcw, Tbw, v, bg, ba, ((IArrayOf <double>)scalePost)[0, i]);
                KeyFrame keyFrame = new KeyFrame(((IArrayOf <uint>)kfidPost)[0, i], ((IArrayOf <double>)fxPost)[0, i], ((IArrayOf <double>)fyPost)[0, i], ((IArrayOf <double>)cxPost)[0, i], ((IArrayOf <double>)cyPost)[0, i], points, frame);

                for (int j = 0; j < points; j++)
                {
                    keyFrame.Points[j]              = new Point();
                    keyFrame.Points[j].U            = (kfstruct["u", 0] as IArrayOf <double>)[0, j];
                    keyFrame.Points[j].V            = (kfstruct["v", 0] as IArrayOf <double>)[0, j];
                    keyFrame.Points[j].InverseDepth = (kfstruct["inverse_depth", 0] as IArrayOf <double>)[0, j];
                    for (int k = 0; k < 8; k++)
                    {
                        keyFrame.Points[j].Colors[k] = (kfstruct["colors", 0] as IArrayOf <byte>)[k, j];
                    }
                }

                keyFrames.Add(keyFrame);
            }

            return(keyFrames);
        }