# `analyze/` — анализ структуры UAV-GeoLoc (World-UAV)
Папка содержит скрипты “dataset forensics”: они проверяют, что лежит в датасете, какие размеры/распределения, и как именно нарезаны спутниковые карты в `DB/img/`.
Все скрипты рассчитаны на локальный датасет и обычно требуют изменить путь к корню датасета в константах `ROOT`/`BASE`.
## Скрипты
### `terrain_stats.py`
**Задача:** собрать подробную статистику по **Terrain subset**:
- количество сцен по terrain-type
- количество DB кропов в сцене
- количество query вариантов и кадров
- размеры `merge.tif` и примерный размер кропа
- диапазоны GPS из `DB/db_postion.txt`
- статистика `positive.json` и `semi_positive.json`
- список всех обнаруженных `height*_rot*` вариантов
Запуск:
```bash
python analyze/terrain_stats.py
```
Перед запуском поменяй:
- `ROOT = ".../UAV-GeoLoc/Terrain"`
### `analyze_crop_scheme.py`
**Задача:** восстановить схему нарезки спутника (crop_size/stride/overlap) через попиксельное сравнение:
- подтверждает, что `crop_0_0.png == merge[0:crop, 0:crop]`
- находит `stride_x`, `stride_y` по сопоставлению `crop_1_0.png` и `crop_0_1.png`
- выводит `overlap = crop_size - stride`
Ключевой вывод (по docstring): `stride = crop_size // 2` (50% overlap).
Запуск:
```bash
python analyze/analyze_crop_scheme.py
```
Важно:
- скрипт использует `Image.MAX_IMAGE_PIXELS = None` из-за больших `merge.tif`
- по умолчанию ищет сцены относительно `base = dirname(__file__)` — это может не совпадать с реальным расположением датасета. Если нужно, перепиши `patterns` под свой датасет.
### `generate_charts.py`
**Задача:** сгенерировать “publication-quality” графики (png) по датасету:
- сцены по странам / по terrain-type
- распределение размеров кропов
- размеры train/val/test сплитов (по `Index/*.txt`, если доступны)
- распределение количества positives на query (по `Index/train_query.txt`)
- географическое покрытие (scatter по средним lat/lon сцен)
- размеры `merge.tif` (scatter)
- схема query вариантов (polar)
Запуск:
```bash
python analyze/generate_charts.py
```
Перед запуском поменяй:
- `BASE = "/.../UAV-GeoLoc"`
Выход:
- `CHARTS = /charts/` (создаётся автоматически)
### `generate_sample_grids.py`
**Задача:** сгенерировать наглядные “grid” картинки:
- query vs positive DB crop
- сравнение высот (100/125/150)
- сравнение поворотов (0..315)
- визуализация tiling’а на кусочке `merge.tif` (пример crop_size=200, stride=100)
- разнообразие terrain типов (подборка `crop_0_0.png`)
Запуск:
```bash
python analyze/generate_sample_grids.py
```
Перед запуском поменяй:
- `BASE = "/.../UAV-GeoLoc"`
Выход:
- `OUT = /charts/`
## Зависимости
Типично нужны:
- `numpy`
- `Pillow`
- `matplotlib`
Дополнительно для чтения больших `merge.tif` может понадобиться достаточно RAM/диска.