🧙🏼‍♂️ AFWizard

Python
Jupyter
AFWizard
QGIS
LiDAR
Mračná bodov
Filtrácia
DEM
Autor

Jakub Šperka

Publikované

13. augusta 2026

Úvod

AFWizard je nástroj určený na tvorbu, ladenie a aplikáciu filtrovacích pipeline pre LiDARové mračná bodov. Umožňuje kombinovať existujúce filtrovacie backendy, interaktívne nastavovať ich parametre a následne aplikovať rôzne filtre na rozdielne časti jedného datasetu.

V tejto kapitole je ukázaný pracovný postup, pri ktorom sa jedno mračno bodov rozdelí pomocou pripravenej priestorovej segmentácie na oblasti s rozdielnym charakterom terénu. Pre jednotlivé typy oblastí sa vytvoria samostatné filtrovacie pipeline a tie sa následne priradia príslušným segmentom.

Použitý pracovný postup:

  1. načítanie mračna bodov,
  2. odstránenie existujúcej klasifikácie,
  3. načítanie priestorovej segmentácie,
  4. vytvorenie vzorových subsetov pre jednotlivé typy povrchu,
  5. interaktívne ladenie filtrovacích pipeline,
  6. uloženie filtrov do knižnice,
  7. priradenie filtrov jednotlivým segmentom,
  8. spustenie výsledného spracovania pomocou AFWizard CLI.

Poznámka: Notebook pracuje s lokálnymi LAS/GeoJSON súbormi a s interaktívnymi prvkami AFWizard. Bunky preto spúšťaj postupne až po nastavení správnych ciest.

🗃️ Inštalácia AFWizard

Odporúčaným spôsobom inštalácie je samostatné prostredie conda.

Nasledujúce príkazy spusti v Anaconda Prompt:

conda create -n afwizard
conda activate afwizard
conda install -c conda-forge afwizard

Pre prácu v JupyterLab:

conda activate afwizard
jupyter lab

V tomto príklade sa používa lokálna inštalácia LAStools v adresári:

C:/LAStools

☁️ Vstupné dáta

Workflow používa:

  • mračno bodov vo formáte LAS,
  • priestorovú segmentáciu vo formáte GeoJSON.

Použité súbory:

jtsk03_fixed_merged_lom_raztoka.las
segmentation.geojson

Oba vstupy sú interpretované v CRS EPSG:8353.

Odporúčaná štruktúra:

projekt/
├── ntb_AFWizard.ipynb
├── segmentation.geojson
├── data/
│   ├── jtsk03_fixed_merged_lom_raztoka.las
│   ├── low_vegetation.las
│   ├── high_vegetation.las
│   └── quarry.las
└── filters/
    ├── low_vegetation.json
    ├── high_vegetation.json
    └── quarry.json

Dôležité: Mračno bodov a segmentácia musia používať správny priestorový referenčný systém.

⚙️ Príprava pracovného prostredia

Import knižníc

Kód
from pathlib import Path

import afwizard as af

Nastavenie cesty k LAStools

Kód
af.set_lastools_directory("C:/LAStools")

Nastavenie pracovných priečinkov

Priečinok filters použijeme pre JSON definície filtrov. Adresár data nastavíme ako dátový adresár AFWizard.

Kód
Path("filters").mkdir(exist_ok=True)
af.set_data_directory("data", create_dir=True)

Predspracovanie mračna bodov

Načítanie datasetu

Kód
dataset = af.DataSet(
    filename="jtsk03_fixed_merged_lom_raztoka.las",
    spatial_reference="EPSG:8353",
)

Odstránenie existujúcej klasifikácie

Kód
dataset = af.remove_classification(dataset)

Priestorová segmentácia

Načítanie segmentácie

Kód
segmentation = af.load_segmentation(
    "segmentation.geojson",
    spatial_reference="EPSG:8353",
)

Vytvorenie vzorového subsetu

Dataset obmedzíme podľa pripravenej segmentácie. Tento krok sa podľa potreby opakuje pre jednotlivé typy povrchu.

Kód
restrict_dataset = dataset.restrict(
    segmentation_overlay=segmentation
)

Príklad uloženia subsetu pre vysokú vegetáciu:

Kód
saved_restriction = restrict_dataset.save(
    "data/high_vegetation.las",
    overwrite=True,
)

V pôvodnom experimente boli pripravené tri vzorové datasety:

  • low_vegetation.las – nízka vegetácia,
  • high_vegetation.las – vysoká vegetácia,
  • quarry.las – lom.

Tip: Ladenie filtrov na menšom reprezentatívnom výreze je praktickejšie ako opakované testovanie na celom mračne bodov.

🧪 Tvorba filtrovacích pipeline

AFWizard poskytuje interaktívne rozhranie pipeline_tuning(). Výslednú pipeline následne uložíme do JSON súboru.

Nízka vegetácia

Kód
sample_low = af.DataSet(
    filename="data/low_vegetation.las",
    spatial_reference="EPSG:8353",
)
Kód
pipeline_low = af.pipeline_tuning(sample_low)
Kód
af.save_filter(
    pipeline_low,
    "filters/low_vegetation.json",
)

Vysoká vegetácia

Kód
sample_high = af.DataSet(
    filename="data/high_vegetation.las",
    spatial_reference="EPSG:8353",
)

pipeline_high = af.pipeline_tuning(sample_high)

af.save_filter(
    pipeline_high,
    "filters/high_vegetation.json",
)

Lom

Kód
sample_quarry = af.DataSet(
    filename="data/quarry.las",
    spatial_reference="EPSG:8353",
)

pipeline_quarry = af.pipeline_tuning(sample_quarry)

af.save_filter(
    pipeline_quarry,
    "filters/quarry.json",
)

Po dokončení tejto fázy obsahuje priečinok filters samostatné JSON definície filtrov pre jednotlivé typy oblastí.

🧩 Prepojenie filtrov a segmentov

Pridanie vlastnej knižnice filtrov

Kód
af.add_filter_library(
    path="filters",
    recursive=False,
)

Výber pipeline z knižnice

Kód
pipelines = af.select_pipeline_from_library("filters")

Priradenie filtrov segmentom

Kód
assigned_segmentation = af.assign_pipeline(
    dataset,
    segmentation=segmentation,
    pipelines=pipelines,
)

Uloženie segmentácie s priradenými pipeline:

Kód
assigned_segmentation.save(
    "data/dataset_segments_assigned.geojson"
)

Poznámka: Uložený GeoJSON predstavuje prepojenie medzi priestorovou časťou datasetu a zvolenou filtrovacou pipeline.

🚀 Spustenie výsledného spracovania

Po pripravení datasetu, filtrov a segmentácie možno finálne spracovanie spustiť cez AFWizard CLI.

V Jupyter Notebooku použijeme ! pred shell príkazom.

Kód
!afwizard --dataset=data/jtsk03_fixed_merged_lom_raztoka.las --dataset-crs=EPSG:8353 --segmentation=data/dataset_segments_assigned.geojson --segmentation-crs=EPSG:8353 --output-dir=data/output --library filters --lastools-dir="C:/LAStools"

Použité argumenty:

Parameter Význam
--dataset vstupné mračno bodov
--dataset-crs CRS vstupného datasetu
--segmentation GeoJSON s priestorovou segmentáciou a priradenými filtrami
--segmentation-crs CRS segmentácie
--output-dir adresár pre výsledky spracovania
--library lokálna knižnica filtrov
--lastools-dir cesta k inštalácii LAStools

📤 Výstupy a záver

Výsledkom workflow sú:

  1. vzorové LAS datasety použité pri ladení filtrov,
  2. JSON definície filtrovacích pipeline uložené v adresári filters,
  3. GeoJSON segmentácia s priradenými pipeline.

Samotné filtrovanie sa následne vykonáva nad kompletným datasetom pomocou AFWizard CLI.

Hlavnou výhodou postupu je možnosť priestorovo heterogénneho filtrovania – pre oblasti s rozdielnym charakterom možno vytvoriť samostatné pipeline a použiť ich iba tam, kde sú vhodné.

🔗 Zdroje a užitočné odkazy