private Task DoUndistortImage(object o)
        {
            return(Task.Factory.StartNew(async() =>
            {
                System.Windows.Forms.OpenFileDialog openFileDialog = null;
                System.Windows.Forms.SaveFileDialog saveFileDialog = null;
                bool open = false;
                bool save = false;

                CameraViewModel cvm = null;

                Parent.SyncContext.Send(c =>
                {
                    cvm = Parent.CameraViewModel;
                    openFileDialog = new System.Windows.Forms.OpenFileDialog();
                    openFileDialog.Filter = "Image (*.png) | *.png";
                    open = openFileDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK;

                    saveFileDialog = new System.Windows.Forms.SaveFileDialog();
                    saveFileDialog.Filter = "Image (*.png) | *.png";
                    save = saveFileDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK;
                }, null);

                if (open && save)
                {
                    MetroDialogSettings settings = new MetroDialogSettings()
                    {
                        AnimateShow = false,
                        AnimateHide = false
                    };

                    var controller = await Parent.DialogCoordinator.ShowProgressAsync(Parent, "Please wait...", "Export undistort image!", settings: Parent.MetroDialogSettings);

                    controller.SetCancelable(false);

                    Mat rawImage = CvInvoke.Imread(openFileDialog.FileName, Emgu.CV.CvEnum.ImreadModes.Grayscale);
                    Mat rawImageUndist = new Mat();

                    Mat map1 = new Mat();
                    Mat map2 = new Mat();

                    Fisheye.InitUndistorRectifyMap(cvm.OrginalCameraMatrix, cvm.DistortionCoefficients, Mat.Eye(3, 3, DepthType.Cv64F, 1), cvm.CenteredCameraMatrix, new System.Drawing.Size(512, 512), DepthType.Cv32F, map1, map2);

                    CvInvoke.Remap(rawImage, rawImageUndist, map1, map2, Inter.Linear, BorderType.Constant);

                    CvInvoke.Imwrite(saveFileDialog.FileName, rawImageUndist);

                    await controller.CloseAsync();
                }
            }));
        }
Ejemplo n.º 2
0
        public MainViewModel()
        {
            _IOProxy = new IOProxy(_SettingContainer);

            _SyncContext = SynchronizationContext.Current;

            CameraViewModel        = new CameraViewModel(this);
            SettingViewModel       = new SettingViewModel(this);
            DataPlotViewModel      = new DataPlotViewModel(this);
            CalibrationViewModel   = new CalibrationViewModel(this);
            RecordViewModel        = new RecordViewModel(this);
            ReplayViewModel        = new ReplayViewModel(this);
            DebugViewModel         = new DebugViewModel(this);
            VisualisationViewModel = new VisualisationViewModel(this);

            _DialogCoordinator = MahApps.Metro.Controls.Dialogs.DialogCoordinator.Instance;
        }
Ejemplo n.º 3
0
        private static void OnPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            CameraViewModel cvm     = (d as CameraViewModel);
            bool            changed = false;

            switch (e.Property.Name)
            {
            case "Enabled":
                changed = cvm.Parent.SettingContainer.Settings.StreamingSettings.CameraRawStreamEnabled != cvm.Enabled;
                cvm.Parent.SettingContainer.Settings.StreamingSettings.CameraRawStreamEnabled = cvm.Enabled;
                try
                {
                    if (cvm.Enabled)
                    {
                        cvm.Parent.IOProxy.Subscribe(cvm, ProxyEventType.CameraEvent);
                    }
                    else
                    {
                        cvm.Parent.IOProxy.Unsubscribe(cvm, ProxyEventType.CameraEvent);
                    }
                }
                catch (Exception) { }
                break;

            case "ExposureTimeSetting":
                cvm.Parent.IOProxy.SetExposure(cvm.ExposureTimeSetting);
                break;

            case "FOVScale":
                changed = cvm.Parent.SettingContainer.Settings.CalibrationSettings.IntrinsicCalibrationSettings.FOVScale != cvm.FOVScale;
                cvm.Parent.SettingContainer.Settings.CalibrationSettings.IntrinsicCalibrationSettings.FOVScale = cvm.FOVScale;
                break;

            default:
                break;
            }
            if (changed)
            {
                cvm.Parent.UpdateSettings(false);
            }
        }
Ejemplo n.º 4
0
        private Task DoExportVideo(object o)
        {
            return(Task.Factory.StartNew(async() =>
            {
                ReplayFile file = o as ReplayFile;
                RawDataReader reader = null;

                string fullPath = null;
                bool isRemote = false;
                System.Windows.Forms.OpenFileDialog openFileDialog = null;
                System.Windows.Forms.SaveFileDialog saveFileDialog = null;
                bool open = false;
                bool save = false;

                CameraViewModel cvm = null;

                Parent.SyncContext.Send(c =>
                {
                    cvm = Parent.CameraViewModel;
                    fullPath = file.FullPath;
                    isRemote = file.IsRemote;
                    openFileDialog = new System.Windows.Forms.OpenFileDialog();
                    openFileDialog.Filter = "Matlab (*.mat) | *.mat";
                    open = openFileDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK;

                    saveFileDialog = new System.Windows.Forms.SaveFileDialog();
                    saveFileDialog.Filter = "Video (*.mp4) | *.mp4";
                    save = saveFileDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK;
                }, null);

                if (open && save && !isRemote)
                {
                    MetroDialogSettings settings = new MetroDialogSettings()
                    {
                        AnimateShow = false,
                        AnimateHide = false
                    };

                    var controller = await Parent.DialogCoordinator.ShowProgressAsync(Parent, "Please wait...", "Export video file!", settings: Parent.MetroDialogSettings);

                    controller.SetCancelable(false);

                    reader = new RawDataReader(fullPath, RawReaderMode.Imu0 | RawReaderMode.Camera0, null, false);
                    controller.SetIndeterminate();
                    reader.Open();

                    VIMatlabImporter matlabImporter = new VIMatlabImporter(openFileDialog.FileName);

                    matlabImporter.Open();

                    VIVideoRenderer renderer = new VIVideoRenderer(saveFileDialog.FileName, 1920, 1080, Parent.SyncContext, cvm.OrginalCameraMatrix, cvm.CenteredCameraMatrix, cvm.DistortionCoefficients);

                    renderer.Open();

                    renderer.Render(matlabImporter, reader, delegate(double percent)
                    {
                        controller.SetProgress(percent);
                    });

                    renderer.Close();
                    matlabImporter.Close();

                    reader.Close();
                    await controller.CloseAsync();
                }
            }));
        }