Ejemplo n.º 1
0
        public PointSelect(IImageD_Provider image_provider, IPointsProvider points_provider)
        {
            IImageD_Provider provider = new ImageD_Providers.PlotPoints(image_provider, points_provider);

            image_provider.ImageDChanged  += img => { provider.ResetSelf(); provider.GetImageD(); };
            points_provider.PointsChanged += ps => { this.points = ps; provider.ResetSelf(); provider.GetImageD(); };
            provider.ImageDChanged        += img => { image_width = img.width; image_height = img.height; image.Source = img.ToImage().ToBitmapSource(); };
            InitializeViews();
            RegisterEvents();
        }
Ejemplo n.º 2
0
        private void InitializeViews()
        {
            source_image_panel = new SourceImagePanel();
            IImageD_Provider main_image = source_image_panel.GetImageD_Provider(0);
            IImageD_Provider side_image = source_image_panel.GetImageD_Provider(1);
            IPointsProvider <PointsProviders.MSOP_DescriptorVector.Descriptor> main_feature_points_provider = new PointsProviders.MSOP_DescriptorVector(new PointsProviders.HarrisCornerDetector(main_image), new MatrixProviders.GrayScale(main_image));
            IPointsProvider <PointsProviders.MSOP_DescriptorVector.Descriptor> side_feature_points_provider = new PointsProviders.MSOP_DescriptorVector(new PointsProviders.HarrisCornerDetector(side_image), new MatrixProviders.GrayScale(side_image));
            IImageD_Provider mp_merge_refined = new ImageD_Providers.PlotPoints(
                new ImageD_Providers.GrayImageD(new MatrixProviders.GrayScale(main_image)),
                main_feature_points_provider
                );

            Controls.PointSelect main_features = new Controls.PointSelect(main_image, main_feature_points_provider);
            Controls.PointSelect side_features = new Controls.PointSelect(side_image, side_feature_points_provider);
            main_features.PointSelected += selected_point =>
            {
                var        main_descriptor = (selected_point as ImagePoint <PointsProviders.MSOP_DescriptorVector.Descriptor>).content;
                ImagePoint nearst = null;
                double     first_min = double.MaxValue, second_min = double.MaxValue;
                foreach (var p in side_features.points)
                {
                    double dis = main_descriptor.difference((p as ImagePoint <PointsProviders.MSOP_DescriptorVector.Descriptor>).content);
                    if (dis < first_min)
                    {
                        second_min = first_min;
                        first_min  = dis;
                        nearst     = p;
                    }
                    else if (dis < second_min)
                    {
                        second_min = dis;
                    }
                }
                if (first_min / second_min < 0.8)
                {
                    LogPanel.Log($"nearst feature diff = {main_descriptor.difference((nearst as ImagePoint<PointsProviders.MSOP_DescriptorVector.Descriptor>).content)}");
                    side_features.ShowPoint(nearst.x, nearst.y);
                }
                else
                {
                    LogPanel.Log($"nearst feature too similar, no match!");
                }
            };
            //this.Height = 500;
            //this.Width = 800;
            this.Content = new ScrollViewer
            {
                HorizontalScrollBarVisibility = ScrollBarVisibility.Disabled,
                VerticalScrollBarVisibility   = ScrollBarVisibility.Visible,
                Content = new StackPanel
                {
                    Orientation = Orientation.Vertical,
                    Children    =
                    {
                        source_image_panel,
                        new Grid
                        {
                            ColumnDefinitions =
                            {
                                new ColumnDefinition {
                                    Width = new GridLength(1,GridUnitType.Star)
                                },
                                new ColumnDefinition {
                                    Width = new GridLength(1,GridUnitType.Star)
                                }
                            },
                            Children =
                            {
                                new Button {
                                    Content = "Run"
                                }.Set(async() =>{ await Task.Run(() =>       { mp_merge_refined.GetImageD(); }); LogPanel.Log("done.");    }).Set(0,               0),
                                new Button {
                                    Content = "Reset"
                                }.Set(async() =>{ await Task.Run(() =>       { mp_merge_refined.Reset();     }); LogPanel.Log("reseted."); }).Set(0,                                1)
                            }
                        },
                        //(new ImageViewer(mp_r)),
                        //(new ImageViewer(mp_hr)),
                        //(new ImageViewer(mp_g)),
                        //(new ImageViewer(mp_hg)),
                        //(new ImageViewer(mp_b)),
                        //(new ImageViewer(mp_hb)),
                        new ImageViewer(mp_merge_refined,false),
                        //new ImageViewer(main_image,false),
                        //new Controls.PointSelect(source_image_panel,new PointsProviders.PointsCache(new List<ImagePoint>{ new ImagePoint(10,10,1),new ImagePoint(100,50,5) }))
                        main_features,
                        side_features
                    }
                }
            };
        }