Detekce čar z obrázku



Line detect

Author:

Categories: Tutorials

Tagged with: | | | |


Jako seminární práci pro CAD3 jsem si zvolil vytvoření nástroje k detekci čar v obrázku.

Mým záměrem bylo zjednodušení činnosti spojené pracemi s rastrovými podklady. Například, když dostanu nějaký podklad v rastrovém formátu (jpg), tak abych si ušetřil práci a nemusel manuálně obklikávat obrázek.

Z důvodu rychlého zpracování úlohy počítačem, jsem vytvořil plugin s komponenty pro Grasshopper. Plugin jsem naprogramoval v c# ve Visual Studiu 2022. Je volně k dispozici, odkaz na stažení nalezne toť https://github.com/HynPl/DetectLinesInPicture.


Celý projekt se skládá ze dvou částí

Část A

  1. Načíst obrázek
  2. Upravit obrázek pro speciální komponentu Detekci čar
  3. Detekovat čáry na obrázku
  4. Z čar sestavit budovy

Část B


Schéma přepojení všech komponent


Část A

Krok 1

Nejdříve je nutné načíst obrázek, potřebujeme k tomu znát jeho umístění, kde přesně je uložený v počítači. Souborovou cestu k obrázku zadáme textově do panelu, z kterého si vezme tuto informaci komponenta „Načtení“. Jako obrázek jsem si zvolil růžovou mapu budov z https://nahlizenidokn.cuzk.cz/.


Krok 2

Druhým krokem je převést obrázek do podoby tzv. „masky“, tak aby byly čáry v obrázku, které se budou detekovat, bílé a pozadí, které se detekovat nebude černou. To udělám v několika krocích, které dále dovysvětlím.


Krok 2.1

Převedení hodně barevných pixelů na černé.


Krok 2.2

Přehození barev, černé za bílou a naopak.


Krok 2.3

Gaussovo rozostření lehce rozmaže ostré hrany původního obrázku.


Krok 2.4

Detekce hran na základě matice. Pozn. Výstup není černý, má hodně tmavé barvy.


Krok 2.5

Zjasnění tmavých čar, zvýšením gama hodnoty obrázku.


Krok 3

Následuje nejdůležitější část detekce čar z obrázku.

Samotná detekce hran uvnitř komponenty probíhá tak, že se nejprve předběžně prohledá obrázek, zjistí se, kde je něco bílé. V druhém kroku komponenta vyšle z předběžných bílých míst „pac-many“ jdoucí po bílém. Průběžně se ukládá do seznamu kudyma šli. Jako když jde člověk po čerstvě napadlém sněhu, jdou vidět jeho zanechané stopy. V třetím kroku dojde k napojování seznamů cest. Na závěr dojde ke zjednodušení výsledku a exportu na křivky (Polyline).

Zdrojový kód naleznete na https://github.com/HynPl/DetectLinesInPicture

Do komponenty vstupuje upravený obrázek, který je detekován. Byla nastavena tloušťka čar v obrázku; upřesněné, jak moc se mají nalezené čáry k sobě přimykat, upřesněná síla zjednodušování čar.


Krok 4

K tvorbě hmot budov potřebujeme stěny a střechu. Křivkové obrysy domů vyextruduji podle nastaveného vektoru, směřujícího směrem navrch, vzniknou mi tak zdi. Současně z křivek vyrobím plochu, a posunu ji do výšky, vznikne mi tak střecha. Nakonec přiřadím k domkům barvu určenou pro render.


Část B

Mimo samotné budovy jsem přidal podkladové ortofoto, kvůli zasazení budov do terénu. Obrázek pochází ze stejného zdroje https://nahlizenidokn.cuzk.cz/. Obrázek z disku počítače se načte a odešle se do komponenty „Vykreslit“, proběhne převedení obrázku na mesh. Mesh následně vykreslí komponenta „Custom Preview“.


Soubory