public ShapeModelLearningProgressEventArgs(
     int iterationsCompleted,
     ShapeModel shapeModel,
     ShapeFittingInfo fittingInfo)
 {
     this.IterationsCompleted = iterationsCompleted;
     this.ShapeModel = shapeModel;
     this.FittingInfo = fittingInfo;
 }
        private void OnLoadShapeModelButtonClick(object sender, RoutedEventArgs e)
        {
            OpenFileDialog openDialog = new OpenFileDialog();
            openDialog.InitialDirectory = @"C:\Users\boya\Source\BayesianShapePrior\ShapeModelLearner\bin\Release";
            if (openDialog.ShowDialog().Value)
            {
                try
                {
                    this.shapeModel = ShapeModel.Load(openDialog.FileName);
                }
                catch (Exception)
                {
                    MessageBox.Show("Something went wrong while loading a model from " + openDialog.FileName);
                    return;
                }

                this.loadMaskToCompleteButton.IsEnabled = true;

                this.traitSetupPanel.Children.Clear();
                this.traitSliders.Clear();
                for (int i = 0; i < this.shapeModel.TraitCount; ++i)
                {
                    Slider slider = new Slider();
                    slider.Value = i == this.shapeModel.TraitCount - 1 ? 1 : 0;
                    slider.Minimum = -3;
                    slider.Maximum = 3;
                    slider.TickPlacement = System.Windows.Controls.Primitives.TickPlacement.BottomRight;
                    slider.TickFrequency = 0.25;
                    slider.ValueChanged += OnSliderValueChanged;

                    traitSliders.Add(slider);
                    this.traitSetupPanel.Children.Add(slider);

                    Label sliderValueLabel = new Label();
                    sliderValueLabel.DataContext = slider;
                    sliderValueLabel.SetBinding(Label.ContentProperty, new Binding("Value"));
                    sliderValueLabel.Margin = new Thickness(5, 5, 5, 15);
                    this.traitSetupPanel.Children.Add(sliderValueLabel);
                }

                this.Sample();
            }
        }
        public void SetBeliefs(ShapeModel shapeModel)
        {
            this.SetPriorBeliefs(shapeModel.GridWidth, shapeModel.GridHeight, shapeModel.TraitCount, shapeModel.ShapePartCount, shapeModel.ObservationNoiseProb);

            this.shapeLocationMeanPrior.ObservedValue = shapeModel.ShapeLocationMean;
            this.shapeLocationPrecisionPrior.ObservedValue = shapeModel.ShapeLocationPrecision;
            this.shapePartOffsetWeightPriors.ObservedValue = shapeModel.ShapePartOffsetWeights;
            this.shapePartLogScaleWeightPriors.ObservedValue = shapeModel.ShapePartLogScaleWeights;
            this.shapePartAngleWeightPriors.ObservedValue = shapeModel.ShapePartAngleWeights;
            this.shapePartOffsetPrecisionPriors.ObservedValue = shapeModel.ShapePartOffsetPrecisions;
            this.shapePartLogScalePrecisionPriors.ObservedValue = shapeModel.ShapePartLogScalePrecisions;
            this.shapePartAnglePrecisionPriors.ObservedValue = shapeModel.ShapePartAnglePrecisions;
        }
 private Bitmap GetFittingMask(ShapeModel shapeModel, ShapeFittingInfo fittingInfo)
 {
     Vector[] meanLocations = Util.ArrayInit(fittingInfo.ShapePartLocations[0].Count, i => Vector.FromArray(Util.ArrayInit(2, j => fittingInfo.ShapePartLocations[0][i][j].GetMean())));
     PositiveDefiniteMatrix[] meanOrientations = Util.ArrayInit(fittingInfo.ShapePartOrientations[0].Count, j => fittingInfo.ShapePartOrientations[0][j].GetMean());
     return ImageHelpers.DrawShape(shapeModel.GridWidth, shapeModel.GridHeight, meanLocations, meanOrientations);
 }