Пример #1
0
        private StereoImage <Bgr, byte> RemapImage(StereoImage <Bgr, byte> stereoImage)
        {
            StereoImage <Bgr, byte> copy = stereoImage.Copy();

            StereoCalibration.RemapStereoImage(copy, _viewModel.CalibrationResult);
            return(copy);
        }
Пример #2
0
        private void OpenClick(object sender, RoutedEventArgs e)
        {
            var infos = Controller.LoadStereoImageFileInfos();

            if (infos != null)
            {
                Model.Image = StereoImage <Bgr, byte> .Load(infos.First());
            }
        }
Пример #3
0
 private void DrawImage(StereoImage <Bgr, byte> image)
 {
     SourceImage.ViewModel.Image = image;
     if (ResultImage.Visibility == Visibility.Visible)
     {
         StereoImage <Bgr, byte> calibratedImage = RemapImage(image);
         ResultImage.ViewModel.Image = calibratedImage;
     }
 }
Пример #4
0
        private static StereoImage ProcessPair(string path1, string path2, string name)
        {
            var imageData = StereoscopyVR.ImageApp.Program.ProcessPair(path1, path2, name);
            var post      = new StereoImage(default(Uri), default(Uri), name, name, DateTime.Now);

            post.W = imageData.Width;
            post.H = imageData.Height;
            return(post);
        }
Пример #5
0
        private static async Task DownloadAsync(StereoImage post, string filePath)
        {
            using (var client = new HttpClient())
            {
                var request = new HttpRequestMessage(HttpMethod.Get, post.ImageUrl);
                using (var response = await client.SendAsync(request, new CancellationToken()))
                    using (var fileStream = new FileStream(filePath, FileMode.Create))
                    {
                        var dataStream = await response.Content.ReadAsStreamAsync();

                        await dataStream.CopyToAsync(fileStream);
                    }
            }
        }
Пример #6
0
        private void ProcessImages(object sender, EventArgs e)
        {
            if (Controller.CameraIsEnabled())
            {
                StereoImage <Bgr, byte> stereoImage = Model.StereoCamera.GetStereoImage();

                if (_viewModel.Mode != CalibrationMode.ShowNotCalibrated)
                {
                    CalibrationCorners corners = StereoCalibration.FindChessboardCorners(stereoImage,
                                                                                         _viewModel.PatternSize);
                    if (corners != null)
                    {
                        StereoCalibration.DrawChessboardCorners(stereoImage, corners);
                    }

                    DrawImage(stereoImage);

                    if (_viewModel.Mode == CalibrationMode.CollectingSamples && corners != null)
                    {
                        CollectedCount.Content = string.Format("Collected: {0}/{1}", _viewModel.Samples.Count,
                                                               _viewModel.Count);
                        if (_viewModel.AllowSaveCorners)
                        {
                            _viewModel.Samples.Add(new CalibrationSample(stereoImage, corners));
                            _viewModel.InvalidateSamples = true;
                            if (_viewModel.Count == _viewModel.Samples.Count)
                            {
                                CollectedCount.Content = string.Empty;
                                SetCameraWindowMode(CalibrationMode.ReadyCalibrating);
                            }
                            SampleList.Items.Refresh();
                        }
                    }
                }
                else
                {
                    DrawImage(stereoImage);
                }
            }
        }
Пример #7
0
 public CalibrationSample(StereoImage <Bgr, byte> image, CalibrationCorners corners)
 {
     StereoImage          = image;
     Corners              = corners;
     IsCornersInitialized = true;
 }
Пример #8
0
 public CalibrationSample(StereoImageFileInfo fileInfo)
 {
     StereoImage = StereoImage <Bgr, byte> .Load(fileInfo);
 }
Пример #9
0
        public static void RemapStereoImage(StereoImage<Bgr, byte> image, CalibrationStereoResult calibrationStereoResult)
        {
            Matrix<float> mapX;
            Matrix<float> mapY;

            InitUndistortRectifyMap(
                calibrationStereoResult.Camera1Result,
                calibrationStereoResult.Settings.ImageSize,
                out mapX, out mapY);
            image.LeftImage = Remap(image.LeftImage, mapX, mapY);

            InitUndistortRectifyMap(
                calibrationStereoResult.Camera2Result,
                calibrationStereoResult.Settings.ImageSize,
                out mapX, out mapY);
            image.RightImage = Remap(image.RightImage, mapX, mapY);
        }
Пример #10
0
 public static CalibrationCorners FindChessboardCorners(StereoImage<Bgr, byte> stereoImage, Size patternSize)
 {
     var grayStereoImage = stereoImage.Convert<Gray, byte>();
     var leftCorners = FindChessboardCorners(grayStereoImage.LeftImage, patternSize);
     var rightCorners = FindChessboardCorners(grayStereoImage.RightImage, patternSize);
     if (leftCorners != null && rightCorners != null)
         return new CalibrationCorners(leftCorners, rightCorners);
     return null;
 }
Пример #11
0
        public static StereoImage<Bgr, byte> DrawChessboardCorners(StereoImage<Bgr, byte> stereoImage, CalibrationCorners corners)
        {
            var colors = new Bgr[corners.LeftCorners.Length];
            var random = new Random();
            for (var i = 0; i < colors.Length; ++i)
            {
                colors[i] = new Bgr(random.Next(0, 255), random.Next(0, 255), random.Next(0, 255));
            }

            DrawChessboardCorners(stereoImage.LeftImage, corners.LeftCorners, colors);
            DrawChessboardCorners(stereoImage.RightImage, corners.RightCorners, colors);

            return stereoImage;
        }
Пример #12
0
 public CalibrationSample(StereoImage<Bgr, byte> image, CalibrationCorners corners)
 {
     StereoImage = image;
     Corners = corners;
     IsCornersInitialized = true;
 }
Пример #13
0
        private void ProcessImages(object sender, EventArgs e)
        {
            StereoImage <Bgr, byte> image = null;

            if (Model.Mode == SourceMode.Camera)
            {
                if (Controller.CameraIsEnabled())
                {
                    //image = Controller.GeatedStereoImage();
                }
            }
            else
            {
                if (Model.Image != null)
                {
                    image = Model.Image;
                }
            }

            if (image == null)
            {
                return;
            }

            SourceImage.ViewModel.Image = image;
            var temp = new StereoImage <Bgr, byte>();

            if (ResultImage.ViewModel.ShowLeft)
            {
                var model = (StereoSgbmModel)_viewModel.SgbmModel.Clone();
                model.Image1 = image.LeftImage.Convert <Gray, byte>();
                model.Image2 = image.RightImage.Convert <Gray, byte>();
                var map  = Stereo.Compute(model);
                var test = map.Convert <Bgr, byte>();
                CvInvoke.ApplyColorMap(test, test, ColorMapType.Rainbow);
                temp.LeftImage  = test;
                test            = test.SmoothGaussian(15);
                temp.RightImage = test;
            }
            if (ResultImage.ViewModel.ShowRight)
            {
                var model = (OpticalFlowModel)_viewModel.FlowModel.Clone();
                model.Image1 = image.LeftImage.Convert <Gray, byte>();
                model.Image2 = image.RightImage.Convert <Gray, byte>();
                var map = OpticalFlow.Compute(model);
                temp.RightImage = map.Convert <Bgr, byte>();
                if (temp.LeftImage == null)
                {
                    temp.LeftImage = temp.RightImage;
                }
            }
            ResultImage.ViewModel.Image = temp.Convert <Bgr, byte>();

            if (_viewModel.SaveImage)
            {
                if (_viewModel.AllowGrabImage)
                {
                    _viewModel.Images.Add(image);
                    ImageListBox.Items.Refresh();
                }
                if (_viewModel.AllowSaveImages)
                {
                    Controller.SaveImages(_viewModel.Images, DateTime.Now.Ticks.ToString());
                    _viewModel.Images.Clear();
                    ImageListBox.Items.Refresh();
                }
            }
        }
Пример #14
0
 private StereoImage<Bgr, byte> RemapImage(StereoImage<Bgr, byte> stereoImage)
 {
     StereoImage<Bgr, byte> copy = stereoImage.Copy();
     StereoCalibration.RemapStereoImage(copy, _viewModel.CalibrationResult);
     return copy;
 }
Пример #15
0
 private void DrawImage(StereoImage<Bgr, byte> image)
 {
     SourceImage.ViewModel.Image = image;
     if (ResultImage.Visibility == Visibility.Visible)
     {
         StereoImage<Bgr, byte> calibratedImage = RemapImage(image);
         ResultImage.ViewModel.Image = calibratedImage;
     }
 }
Пример #16
0
        private void ProcessImages(object sender, EventArgs e)
        {
            StereoImage<Bgr, byte> image = null;
            if (Model.Mode == SourceMode.Camera)
            {
                if (Controller.CameraIsEnabled())
                {
                    //image = Controller.GeatedStereoImage();
                }
            }
            else
            {
                if (Model.Image != null)
                {
                    image = Model.Image;
                }
            }

            if (image == null)
                return;

            SourceImage.ViewModel.Image = image;
            var temp = new StereoImage<Bgr, byte>();

            if (ResultImage.ViewModel.ShowLeft)
            {
                var model = (StereoSgbmModel) _viewModel.SgbmModel.Clone();
                model.Image1 = image.LeftImage.Convert<Gray, byte>();
                model.Image2 = image.RightImage.Convert<Gray, byte>();
                var map = Stereo.Compute(model);
                var test = map.Convert<Bgr, byte>();
                CvInvoke.ApplyColorMap(test, test, ColorMapType.Rainbow);
                temp.LeftImage = test;
                test = test.SmoothGaussian(15);
                temp.RightImage = test;
            }
            if (ResultImage.ViewModel.ShowRight)
            {
                var model = (OpticalFlowModel)_viewModel.FlowModel.Clone();
                model.Image1 = image.LeftImage.Convert<Gray, byte>();
                model.Image2 = image.RightImage.Convert<Gray, byte>();
                var map = OpticalFlow.Compute(model);
                temp.RightImage = map.Convert<Bgr, byte>();
                if (temp.LeftImage == null)
                    temp.LeftImage = temp.RightImage;
            }
            ResultImage.ViewModel.Image = temp.Convert<Bgr, byte>();

            if (_viewModel.SaveImage)
            {
                if (_viewModel.AllowGrabImage)
                {
                    _viewModel.Images.Add(image);
                    ImageListBox.Items.Refresh();
                }
                if (_viewModel.AllowSaveImages)
                {
                    Controller.SaveImages(_viewModel.Images, DateTime.Now.Ticks.ToString());
                    _viewModel.Images.Clear();
                    ImageListBox.Items.Refresh();
                }
            }
        }