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
ImageComparer
- Comprehensive image comparison with multiple metricsContourExtractor
- Extracts and analyzes object contours from imagesSizeComparator
- Compares dimensions and sizes of visual elements
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:
-
ClassesClassDescriptionExtracts 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.