Files
remote-sensing/NDVI_VS_LAND_CLASSIFICATION.md

117 lines
3.1 KiB
Markdown

# QUAN TRỌNG: Làm rõ về NDVI và Phân loại Đất
## Mục tiêu chính: PHÂN LOẠI SỬ DỤNG ĐẤT
Hệ thống phân loại 8 loại đất:
1. **Lua tom** (0): Lúa tôm
2. **Lua** (1): Lúa
3. **CHN** (2): Cây hàng năm
4. **CLN** (3): Cây lâu năm
5. **TS** (4): Thủy sản
6. **Song** (5): Sông
7. **Dat xay dung** (6): Đất xây dựng
8. **Rung** (7): Rừng
## Workflow Đúng
### Training:
```
Sentinel-2 Data (nhiều bands)
→ Extract Features (spectral bands, indices, temporal)
→ Train Model (RandomForest/XGBoost/CNN)
→ Model dự đoán loại đất (0-7)
```
### Prediction:
```
Sentinel-2 Data (khu vực mới)
→ Extract Features (giống training)
→ Model.predict()
→ Kết quả: Bản đồ phân loại đất (0-7)
→ [OPTIONAL] Tính NDVI để visualization/analysis
```
## NDVI là gì?
**NDVI (Normalized Difference Vegetation Index)** là chỉ số thực vật:
- Formula: `NDVI = (NIR - Red) / (NIR + Red)`
- Giá trị: -1 đến +1
- Ý nghĩa:
- Cao (>0.6): Thực vật xanh tươi (rừng, lúa)
- Trung (0.2-0.6): Thực vật thưa, cỏ
- Thấp (<0.2): Đất trống, nước, xây dựng
## Vai trò của NDVI
### ❌ KHÔNG PHẢI: Input duy nhất cho model
```python
# SAI - Chỉ dùng NDVI để predict loại đất
X = [ndvi_value] # 1 feature
model.predict(X) # Accuracy thấp!
```
### ✅ ĐÚNG: Một trong nhiều features
```python
# ĐÚNG - Dùng nhiều features
X = [ndvi, ndwi, ndbi, blue, green, red, nir, swir1, swir2, ...] # 39 features
model.predict(X) # Accuracy cao!
```
### ✅ ĐÚNG: Chỉ số phụ sau prediction
```python
# 1. Predict land use
predictions = model.predict(features) # → [0,1,2,3,4,5,6,7]
# 2. Calculate NDVI for visualization
ndvi = (nir - red) / (nir + red)
# 3. Export both
save_geotiff("land_classification.tif", predictions)
save_geotiff("ndvi.tif", ndvi) # Chỉ số phụ để xem thêm
```
## Model hiện tại: model_odc.joblib
```json
{
"n_features": 39,
"model_type": "random_forest (GridSearchCV)",
"purpose": "Phân loại sử dụng đất (8 classes)",
"features": [
"Spectral bands từ nhiều time steps",
"Spectral indices (NDVI, NDWI, NDBI, EVI, ...)",
"Temporal features (min, max, mean, std, range)"
]
}
```
## So sánh với Notebook 01.train_ODC.ipynb
Notebook này train model **ĐƠN GIẢN HÓA** chỉ để demo:
- Chỉ dùng 1 feature (NDVI)
- Accuracy thấp
- **KHÔNG phải** model production
Model thực tế (model_odc.joblib):
- Dùng 39 features
- Accuracy cao hơn
- Production-ready
## Kết luận
**Prediction workflow**:
1. Load Sentinel-2 data
2. Extract 39 features (bands + indices + temporal)
3. Model.predict() → Land classification map
4. [Optional] Calculate NDVI for additional analysis
**NDVI role**:
- Là MỘT trong các features (không phải duy nhất)
- Hoặc là output phụ để visualization
- KHÔNG phải mục tiêu chính
**Sai lầm thường gặp**:
- Nghĩ NDVI là input duy nhất
- Train model chỉ với NDVI → accuracy thấp
- Bỏ qua các features khác (NDWI, NDBI, temporal, ...)