//private static void MainForDualDecomposition() //{ // ShapeModel shapeModel = CreateSimpleShapeModel1(); // ShapeConstraints constraints = ShapeConstraints.CreateFromConstraints( // shapeModel, // new[] { new VertexConstraints(new Vector(3, 0), new Vector(40, 40)), new VertexConstraints(new Vector(60, 10), new Vector(100, 50)) }, // new[] { new EdgeConstraints(10, 20) }, // 1, // 1); // Image2D<Color> image = Image2D.LoadFromFile("../../../images/simple_1.png", 0.2); // Rectangle objectLocation = new Rectangle(30, 24, 159, 96); // ImageSegmentator segmentator = new ImageSegmentator(image, objectLocation, 0.01, 0, 1, 0.05, 3); // LowerBoundCalculator lowerBoundCalculator = new LowerBoundCalculator(segmentator); // lowerBoundCalculator.CalculateLowerBound(constraints); //} static void Main() { Random.SetSeed(666); //MainForGiraffeAdjustSave(); MainForLetterSave(); //PrintColorModels(); //MainForDualDecomposition(); //MainForPointIsClosestExperiment(); //MainForLengthAngleDependenceExperiment(); //MainForGiraffeSave(); //GenerateMeanShape(); //DrawLengthAngleDependence(); //MainForUnaryPotentialsCheck(); //MainForSegmentation(); //MainForConvexHull(); //MainForShapeEnergyCheck(); }
private void DoSegmentation(object sender, DoWorkEventArgs e) { Random.SetSeed(666); // Load and downscale image Image2D <Color> originalImage = Image2D.LoadFromFile(this.segmentationProperties.ImageToSegment); double scale = this.segmentationProperties.DownscaledImageSize / (double)Math.Max(originalImage.Width, originalImage.Height); Image2D <Color> downscaledImage = Image2D.LoadFromFile(this.segmentationProperties.ImageToSegment, scale); this.segmentedImage = Image2D.ToRegularImage(downscaledImage); // Load color models ObjectBackgroundColorModels colorModels = ObjectBackgroundColorModels.LoadFromFile(this.segmentationProperties.ColorModel); // Setup shape model ShapeModel model = ShapeModel.LoadFromFile(this.segmentationProperties.ShapeModel); this.segmentator.ShapeModel = model; // Common settings segmentator.ObjectColorUnaryTermWeight = this.segmentationProperties.ObjectColorUnaryTermWeight; segmentator.BackgroundColorUnaryTermWeight = this.segmentationProperties.BackgroundColorUnaryTermWeight; segmentator.ObjectShapeUnaryTermWeight = this.segmentationProperties.ObjectShapeUnaryTermWeight; segmentator.BackgroundShapeUnaryTermWeight = this.segmentationProperties.BackgroundShapeUnaryTermWeight; segmentator.ColorDifferencePairwiseTermWeight = this.segmentationProperties.ColorDifferencePairwiseTermWeight; segmentator.ColorDifferencePairwiseTermCutoff = this.segmentationProperties.ColorDifferencePairwiseTermCutoff; segmentator.ConstantPairwiseTermWeight = this.segmentationProperties.ConstantPairwiseTermWeight; segmentator.ShapeEnergyWeight = this.segmentationProperties.ShapeEnergyWeight; // Custom setup if (this.segmentator is BranchAndBoundSegmentationAlgorithm) { this.SetupBranchAndBoundSegmentationAlgorithm((BranchAndBoundSegmentationAlgorithm)this.segmentator); } else if (this.segmentator is CoordinateDescentSegmentationAlgorithm) { this.SetupCoordinateDescentSegmentationAlgorithm((CoordinateDescentSegmentationAlgorithm)this.segmentator); } else if (this.segmentator is AnnealingSegmentationAlgorithm) { this.SetupAnnealingSegmentationAlgorithm((AnnealingSegmentationAlgorithm)this.segmentator); } else if (this.segmentator is SimpleSegmentationAlgorithm) { this.SetupSimpleSegmentationAlgorithm((SimpleSegmentationAlgorithm)this.segmentator); } // Show original image in status window) this.currentImage.Image = (Image)this.segmentedImage.Clone(); // Run segmentation SegmentationSolution solution = segmentator.SegmentImage(downscaledImage, colorModels); // Re-run B&B segmentation with reduced constraints in two-step mode if (this.segmentator is BranchAndBoundSegmentationAlgorithm && this.segmentationProperties.UseTwoStepApproach && !this.segmentator.WasStopped) { BranchAndBoundSegmentationAlgorithm branchAndBoundSegmentator = (BranchAndBoundSegmentationAlgorithm)this.segmentator; branchAndBoundSegmentator.MaxCoordFreedom = this.segmentationProperties.MaxCoordFreedom; branchAndBoundSegmentator.MaxWidthFreedom = this.segmentationProperties.MaxWidthFreedom; branchAndBoundSegmentator.StartConstraints = this.bestConstraints; branchAndBoundSegmentator.ShapeEnergyLowerBoundCalculator = new ShapeEnergyLowerBoundCalculator( this.segmentationProperties.LengthGridSize, this.segmentationProperties.AngleGridSize); Console.WriteLine("Performing second pass..."); solution = segmentator.SegmentImage(downscaledImage, colorModels); } // Save mask as worker result e.Result = solution; }