# Xử lý mây (Cloud Processing) — Hệ thống Land Classification Tài liệu chi tiết về các phương pháp xử lý mây cho dữ liệu Sentinel-2. Module độc lập `cloud_removal.py` cung cấp nhiều chiến lược có thể chọn. ## Tổng quan Hệ thống cung cấp **7 phương pháp xử lý mây** khác nhau, từ cổ điển đến hiện đại (ML/DL): 1. **Classic** - 3 bước cổ điển (temporal → median → spatial) - mặc định 2. **Temporal Only** - Chỉ temporal interpolation (nhanh nhất) 3. **Median Composite** - Ưu tiên median composite (giảm nhiễu tốt nhất) 4. **ML KNN** - Machine Learning K-Nearest Neighbors inpainting 5. **ML RF** - Machine Learning Random Forest inpainting 6. **Deep Inpainting** - Deep Learning CNN inpainting (yêu cầu model) 7. **Hybrid** - Kết hợp classical + ML (cân bằng tốc độ và chất lượng) --- ## Cách sử dụng ### API Endpoint Lấy danh sách các methods: ```bash GET /api/cloud-removal/methods ``` Response: ```json { "success": true, "methods": { "classic": "3-step classical: temporal → median → spatial (default, balanced)", "temporal_only": "Temporal interpolation only (fastest, needs many scenes)", "median_composite": "Median composite priority (best noise reduction)", "ml_knn": "ML K-Nearest Neighbors inpainting (good quality, medium speed)", "ml_rf": "ML Random Forest inpainting (high quality, slower)", "deep": "Deep Learning CNN inpainting (best quality, requires model)", "hybrid": "Hybrid classical + ML (balanced speed & quality)" }, "default": "classic" } ``` ### Config trong Prediction Thêm `cloud_removal_method` vào config: ```python config = { "model_filename": "model_odc.joblib", "min_lon": 105.5, "max_lon": 105.6, "min_lat": 10.0, "max_lat": 10.1, "start_date": "2024-01-01", "end_date": "2024-12-31", "max_scenes": 12, "cloud_cover": 30, "resolution": 20, "use_gpu": false, "cloud_removal_method": "hybrid" # Chọn method tại đây } ``` ### Programmatic Usage ```python from cloud_removal import process_cloud_removal # Load Sentinel-2 data with SCL band s2_data = load(...) # Process clouds with selected method cleaned_data, metadata = process_cloud_removal( s2_data=s2_data, method="hybrid", # or "classic", "ml_knn", etc. verbose=True ) print(f"Cloud coverage: {metadata['cloud_coverage_percent']:.1f}%") print(f"Steps applied: {metadata['steps_applied']}") ``` --- ## Chi tiết các phương pháp ### 1. Classic (Mặc định) **Mô tả:** 3 bước cổ điển kết hợp temporal, median, và spatial interpolation. **Quy trình:** 1. Temporal interpolation (ffill + bfill) 2. Median compositing (nếu >= 3 scenes) 3. Spatial interpolation (nearest neighbor) 4. Fallback fillna(0) **Ưu điểm:** - Cân bằng tốc độ và chất lượng - Đã được test kỹ, ổn định - Phù hợp hầu hết trường hợp **Nhược điểm:** - Không tối ưu cho các gaps lớn - Có thể tạo artifacts ở biên **Khi nào dùng:** Default choice, phù hợp cho production --- ### 2. Temporal Only **Mô tả:** Chỉ sử dụng temporal interpolation (ffill + bfill). **Ưu điểm:** - Nhanh nhất - Giữ xu hướng thời gian tốt - Ít tạo artifacts **Nhược điểm:** - Yêu cầu nhiều time steps - Không xử lý được gaps liên tục - Chất lượng kém nếu ít scenes **Khi nào dùng:** Khi có nhiều scenes (>10) và cần tốc độ --- ### 3. Median Composite **Mô tả:** Ưu tiên median composite, sau đó spatial interpolation. **Ưu điểm:** - Giảm nhiễu tốt nhất - Chống outliers hiệu quả - Tạo composite trơn **Nhược điểm:** - Mất thông tin temporal - Yêu cầu >= 3 scenes - Chậm hơn temporal only **Khi nào dùng:** Khi cần giảm nhiễu, không quan tâm temporal dynamics --- ### 4. ML KNN Inpainting **Mô tả:** Sử dụng K-Nearest Neighbors để học từ pixels hợp lệ và dự đoán pixels bị mây. **Quy trình:** 1. Xác định valid pixels (không có mây) 2. Train KNN model với spatial coordinates + spectral values 3. Predict invalid pixels 4. Fill predictions vào dataset **Ưu điểm:** - Chất lượng cao hơn classical - Học spatial patterns - Không cần pretrained model **Nhược điểm:** - Chậm hơn classical - Yêu cầu đủ valid pixels (>10) - Tốn RAM nếu ảnh lớn **Hyperparameters:** - n_neighbors: 5 - weights: 'distance' **Khi nào dùng:** Khi cần chất lượng cao và có đủ valid pixels --- ### 5. ML Random Forest Inpainting **Mô tả:** Sử dụng Random Forest để inpainting, tương tự KNN nhưng phức tạp hơn. **Ưu điểm:** - Chất lượng cao nhất trong ML methods - Xử lý non-linear patterns tốt - Robust với outliers **Nhược điểm:** - Chậm nhất trong ML methods - Tốn nhiều RAM - Có thể overfit với ít data **Hyperparameters:** - n_estimators: 10 - max_depth: 10 - n_jobs: -1 (parallel) **Khi nào dùng:** Khi cần chất lượng tối đa và không quan tâm tốc độ --- ### 6. Deep Inpainting (CNN) **Mô tả:** Sử dụng CNN autoencoder để reconstruct pixels bị mây. **Trạng thái:** **Đang phát triển** - yêu cầu pretrained model **Quy trình (planned):** 1. Stack bands thành multi-channel image 2. Tạo binary mask (1=cloud, 0=valid) 3. Run through CNN autoencoder 4. Blend predictions với valid pixels **Ưu điểm (khi có model):** - Chất lượng tốt nhất - Xử lý large gaps hiệu quả - Học global context **Nhược điểm:** - Yêu cầu pretrained model - Chậm nhất (GPU recommended) - Phức tạp để deploy **Khi nào dùng:** Khi có GPU và pretrained model, cần chất lượng tối đa --- ### 7. Hybrid (Khuyến nghị) **Mô tả:** Kết hợp classical + ML để cân bằng tốc độ và chất lượng. **Quy trình:** 1. Temporal interpolation (nhanh) 2. Check remaining NaN percentage 3. Nếu > 5%: Apply ML KNN inpainting 4. Nếu <= 5%: Apply spatial interpolation 5. Fallback fillna(0) **Ưu điểm:** - Cân bằng tốc độ và chất lượng - Adaptive - chỉ dùng ML khi cần - Hiệu quả với mọi cloud coverage **Nhược điểm:** - Phức tạp hơn classic - Khó debug **Khi nào dùng:** **Khuyến nghị cho production** - tự động chọn strategy phù hợp --- ## So sánh Performance | Method | Tốc độ | Chất lượng | RAM | Yêu cầu | |--------|--------|------------|-----|---------| | classic | ⭐⭐⭐⭐ | ⭐⭐⭐ | Thấp | Không | | temporal_only | ⭐⭐⭐⭐⭐ | ⭐⭐ | Thấp | Nhiều scenes | | median_composite | ⭐⭐⭐ | ⭐⭐⭐⭐ | Thấp | >= 3 scenes | | ml_knn | ⭐⭐ | ⭐⭐⭐⭐ | Trung bình | Đủ valid pixels | | ml_rf | ⭐ | ⭐⭐⭐⭐⭐ | Cao | Đủ valid pixels | | deep | ⭐ | ⭐⭐⭐⭐⭐ | Rất cao | Pretrained model + GPU | | hybrid | ⭐⭐⭐ | ⭐⭐⭐⭐ | Trung bình | Không | --- ## Phát hiện mây (SCL) Tất cả methods đều sử dụng SCL (Scene Classification Layer): ```python # SCL values: # 0: No data, 1: Saturated/Defective, 2: Dark Area Pixels # 3: Cloud shadows, 4: Vegetation, 5: Not vegetated, 6: Water # 7: Unclassified, 8: Cloud medium probability, 9: Cloud high probability # 10: Thin cirrus, 11: Snow/Ice cloud_mask = (scl == 3) | (scl == 8) | (scl == 9) | (scl == 10) | (scl == 11) invalid_mask = (scl == 0) | (scl == 1) full_mask = cloud_mask | invalid_mask ``` --- ## Testing & Comparison So sánh nhiều methods trên cùng dữ liệu: ```python from cloud_removal import compare_methods results = compare_methods( s2_data=s2_data, methods=["classic", "temporal_only", "ml_knn", "hybrid"] ) for method, result in results.items(): print(f"{method}: {result['remaining_nan_percent']:.2f}% NaN remaining") ``` --- ## Khuyến nghị sử dụng ### Production (General) ``` cloud_removal_method: "hybrid" ``` - Cân bằng tốc độ và chất lượng - Adaptive theo cloud coverage ### High Quality (Research) ``` cloud_removal_method: "ml_rf" ``` - Chất lượng tối đa - Chấp nhận tốc độ chậm ### Fast Processing (Monitoring) ``` cloud_removal_method: "temporal_only" ``` - Cần nhiều scenes (>10) - Ưu tiên tốc độ ### Low Cloud Coverage (<10%) ``` cloud_removal_method: "classic" ``` - Đơn giản, hiệu quả - Ổn định, đã test kỹ --- ## Vị trí code - **Module:** `cloud_removal.py` - Standalone cloud removal module - **API Integration:** `api_server.py` - API endpoints và config - **Documentation:** `CLOUD_PROCESSING.md` - Tài liệu này --- ## Phát triển tiếp - [ ] Implement CNN autoencoder cho deep inpainting - [ ] Add quality scoring system - [ ] Optimize ML methods với Dask - [ ] Add weighted temporal interpolation - [ ] Support custom ML models