Package io.github.jspinak.brobot.analysis.compare


package io.github.jspinak.brobot.analysis.compare
Image comparison and analysis algorithms.

This package provides utilities for comparing images, extracting contours, and analyzing visual differences. These tools support advanced matching operations by enabling detailed comparison of visual elements beyond simple template matching.

Core Components

Comparison Techniques

Pixel-Level Comparison


 // Compare two images pixel by pixel
 ImageComparer comparer = new ImageComparer();
 ComparisonResult result = comparer.compare(image1, image2);

 double similarity = result.getSimilarityScore();
 Mat diffMap = result.getDifferenceMap();
 List<Rect> changedRegions = result.getChangedRegions();
 

Contour-Based Analysis


 // Extract contours from classification results
 ContourExtractor extractor = new ContourExtractor();
 List<MatOfPoint> contours = extractor.extract(binaryImage);

 // Filter by size and shape
 List<MatOfPoint> filtered = extractor.filterContours(
     contours,
     minArea,
     maxArea
 );

 // Convert to bounding boxes
 List<Rect> boundingBoxes = extractor.toBoundingBoxes(filtered);
 

Size-Based Comparison


 // Compare element sizes
 SizeComparator sizeComp = new SizeComparator();

 boolean sameSize = sizeComp.areSimilar(rect1, rect2, tolerance);
 double sizeRatio = sizeComp.getSizeRatio(rect1, rect2);
 boolean aspectMatch = sizeComp.aspectRatiosMatch(rect1, rect2);
 

Comparison Metrics

  • Structural Similarity (SSIM) - Perceptual similarity metric
  • Mean Squared Error (MSE) - Pixel-wise difference measurement
  • Histogram Comparison - Statistical color distribution analysis
  • Edge Comparison - Structural element matching
  • Contour Matching - Shape-based similarity

Use Cases

Change Detection


 // Detect UI changes between states
 ImageComparer comparer = new ImageComparer();
 ComparisonResult changes = comparer.detectChanges(
     previousScreen,
     currentScreen
 );

 if (changes.hasSignificantChanges()) {
     processUIUpdate(changes.getChangedRegions());
 }
 

Element Extraction


 // Extract UI elements from classification
 ContourExtractor extractor = new ContourExtractor();
 Mat classified = classifier.classify(scene);

 List<Match> elements = extractor.extractElements(
     classified,
     targetClassIndex
 );
 

Validation


 // Validate match results
 SizeComparator validator = new SizeComparator();

 boolean validSize = validator.isWithinExpectedSize(
     foundElement,
     expectedSize,
     tolerance
 );
 

Algorithm Options

Comparison Sensitivity

  • High: Detect pixel-level changes
  • Medium: Ignore minor variations
  • Low: Major structural changes only

Contour Extraction

  • External only: Outer boundaries
  • Hierarchical: Nested contours
  • Simple: Compressed contours

Performance Considerations

  • Full image comparison is computationally expensive
  • Consider region-of-interest comparison for speed
  • Contour extraction benefits from binary input
  • Cache comparison results when possible
Since:
1.0
See Also:
  • invalid reference
    io.github.jspinak.brobot.analysis
  • invalid reference
    io.github.jspinak.brobot.imageUtils
  • Classes
    Class
    Description
    Extracts and processes contours from classified image regions to generate Match objects.
    Builder class for constructing ContourExtractor instances with required parameters.
    Compares images to determine similarity and find matches between patterns.
    Determines size relationships between Pattern objects for image comparison operations.