| |
| """ |
| Test script for radar reclassification functionality. |
| """ |
|
|
| import numpy as np |
| from radar_processor import RadarImageProcessor, RadarColorScale |
| import matplotlib.pyplot as plt |
|
|
| def test_color_detection(): |
| """Test the color detection functionality with a synthetic radar image.""" |
| print("Testing color detection...") |
| |
| |
| height, width = 100, 100 |
| synthetic_image = np.zeros((height, width, 4), dtype=np.uint8) |
| |
| |
| canadian_colors = [ |
| (0, 255, 255), |
| (0, 200, 0), |
| (255, 255, 0), |
| (255, 0, 0), |
| ] |
| |
| |
| synthetic_image[0:50, 0:50] = [*canadian_colors[0], 255] |
| synthetic_image[0:50, 50:100] = [*canadian_colors[1], 255] |
| synthetic_image[50:100, 0:50] = [*canadian_colors[2], 255] |
| synthetic_image[50:100, 50:100] = [*canadian_colors[3], 255] |
| |
| processor = RadarImageProcessor() |
| |
| |
| detected_colors = processor.detect_unique_colors(synthetic_image, max_colors=10) |
| print(f"Detected {len(detected_colors)} unique colors:") |
| for i, color in enumerate(detected_colors): |
| print(f" Color {i+1}: RGB{color}") |
| |
| |
| color_to_dbz = processor.create_color_mapping(detected_colors) |
| print("\nColor to DBZ mappings:") |
| for color, dbz in color_to_dbz.items(): |
| print(f" RGB{color} → {dbz:.1f} dBZ") |
| |
| |
| reclassified = processor.reclassify_image(synthetic_image) |
| print(f"\nReclassified image shape: {reclassified.shape}") |
| |
| return True |
|
|
| def test_color_scales(): |
| """Test the predefined color scales.""" |
| print("\nTesting color scales...") |
| |
| canadian_scale = RadarColorScale.CANADIAN_SCALE |
| american_scale = RadarColorScale.AMERICAN_SCALE |
| |
| print(f"Canadian scale has {len(canadian_scale)} color levels") |
| print(f"American scale has {len(american_scale)} color levels") |
| |
| |
| canadian_dbz = [mapping.dbz_value for mapping in canadian_scale] |
| american_dbz = [mapping.dbz_value for mapping in american_scale] |
| |
| print(f"Canadian DBZ range: {min(canadian_dbz)} to {max(canadian_dbz)}") |
| print(f"American DBZ range: {min(american_dbz)} to {max(american_dbz)}") |
| |
| return True |
|
|
| def test_color_legend(): |
| """Test the color legend generation.""" |
| print("\nTesting color legend generation...") |
| |
| processor = RadarImageProcessor() |
| |
| try: |
| fig = processor.create_color_legend("test_color_legend.png") |
| print("Color legend generated successfully: test_color_legend.png") |
| plt.close(fig) |
| return True |
| except Exception as e: |
| print(f"Error generating color legend: {e}") |
| return False |
|
|
| def test_dbz_mapping(): |
| """Test DBZ to color mapping accuracy.""" |
| print("\nTesting DBZ mapping accuracy...") |
| |
| processor = RadarImageProcessor() |
| |
| |
| test_dbz_values = [-20, -10, 0, 10, 20, 30, 40, 50, 60, 70] |
| |
| print("DBZ → American Color mappings:") |
| for dbz in test_dbz_values: |
| color = processor.get_american_color_for_dbz(dbz) |
| print(f" {dbz:3d} dBZ → RGB{color}") |
| |
| return True |
|
|
| def run_all_tests(): |
| """Run all tests.""" |
| print("=" * 60) |
| print("RADAR RECLASSIFICATION SYSTEM TESTS") |
| print("=" * 60) |
| |
| tests = [ |
| ("Color Detection", test_color_detection), |
| ("Color Scales", test_color_scales), |
| ("Color Legend", test_color_legend), |
| ("DBZ Mapping", test_dbz_mapping), |
| ] |
| |
| results = [] |
| for test_name, test_func in tests: |
| try: |
| result = test_func() |
| results.append((test_name, result)) |
| status = "PASS" if result else "FAIL" |
| print(f"\n[{status}] {test_name}") |
| except Exception as e: |
| results.append((test_name, False)) |
| print(f"\n[ERROR] {test_name}: {e}") |
| |
| print("\n" + "=" * 60) |
| print("TEST SUMMARY") |
| print("=" * 60) |
| |
| passed = sum(1 for _, result in results if result) |
| total = len(results) |
| |
| for test_name, result in results: |
| status = "✅ PASS" if result else "❌ FAIL" |
| print(f"{status} {test_name}") |
| |
| print(f"\nTotal: {passed}/{total} tests passed") |
| |
| if passed == total: |
| print("\n🎉 All tests passed! The radar reclassification system is ready.") |
| else: |
| print(f"\n⚠️ {total - passed} test(s) failed. Please check the implementation.") |
| |
| return passed == total |
|
|
| if __name__ == "__main__": |
| run_all_tests() |