Autor: Vektorizace Bitmapy 2005 / 2006, ZS, MFF-UK Cyril Höschl, MFF, 3.roč. web: Pozn.: prezentace je animovaná, doporučuji spouštět v PowerPointu 2002 a více
Autor: Vektorizace Bitmapy Doprovodný materiál k prezentaci metory pro vektorizaci bitmapy na semináři z Počítačové Grafiky, MFF-UK. Cílem je poskytnout ukázku, jak pracuje algoritmus pro převod bitmapy na vektorový obrázek (samozřejmě za cenu deformace obrázku). Existuje více způsobů, jak toho docílit, v následující prezentaci jsou zmíněny dva. První používá k proložení bodů Bezierovy křivky kvůli kompatibilitě s formátem EMF, obecně vhodnější matematický aparát pro tvorbu prokládaných hladkých křivek jsou však např. Catmull-Rom, viz. Druhý způsob je založen na lineární interpolaci za pomoci triangulace. Prohlášení: Použitý algoritmus jsem vytvořil bez inspirace jinými algoritmy, proto nemusí být zaručeno, že je nejefektivnější – leč funguje celkem rychle. Zájemci si mohou stáhnout plug-in do PowerPointu, který v reálném čase dokáže interpolovat plochu a převést ji na vektory. Odkaz zde:
Autor: 3D interpolace Popis problému Mám n bodů v rovině, které nejsou rovnoměrně rozprostřeny. Každý bod má nějakou výšku z. Potřebuji dopočítat („domyslet“) výšky ostatních bodů v rovině. Popis řešení (pomocí IDW – Inverse distance weights) Vytvořím pravidelnou síť bodů majících souřadnice x a y. Výšky (z-souřadnice) znám však jen od některých. Pro ostatní je dopočítám níže uvedenou rovnicí: z j …Výška (z-souřadnice) j-tého (neznámého) bodu z i …Výška (z-souřadnice) i-tého (známého) bodu n…počet známých bodů x i …x-souřadnice i-tého bodu y i …y-souřadnice i-tého bodu p…exponent … lze použít např. p=3; p N [x1,y1,z1] [x2,y2,z2] [x3,y3,??] Obrázek 1.1: Červené body jsou zadané, výšku modrého bodu se snažím dopočítat z x y Poznámka Jedná se o vážený průměr výšek ze zadaných bodů. S určitou mocninou vzdálenosti se zanedbává výška známého bodu.
Autor: Princip Tracování I Krok…najít bod P pro který BP(P)=TRUE; P first :=P 2.Krok…zkontrolovat bod ležící v D i-tém směru od aktuálního bodu. Pokud pro bod Q:=P+Di je PB(Q)=TRUE, pak P:=Q 3.Goto Krok 1 dokud P=P first Okrajový Bod (PB) = TRUE, je-li zelený (c i =TRUE) a jeho buď levý nebo pravý nebo horní nebo dolní soused je bílý (c i =FALSE) Tečkovaný zelený bod … bod na okraji Směry D i Další krok NOTE 2: V dalším kroku hledámě body jen v polorovině dané z předchozího směru Vybrali jsme D 3 Vybíráme jen ze směrů ležících v polorovině určené posledním směrem D 3 NOTE 1: Ne každý bod je nutné si zapamatovat, můžeme ukládat třeba každý 20tý bod (a jimi pak proložit hladkou křivku)
Autor: Hladká křivka x x x x P1 P2 P3 P4 Protože jádro Win32 API a formát EMF (Enhanced Meta File) má podporu Beziérových křivek, je užitečné vytvořit hladkou křivku pomocí bez. křivek. Docílí se toho nastavením vzdálenosti řídicích bodů od bodu P na 1/6 délky vektoru (P i-1, P i+1 ). Viz. obrázek: d d/6
Autor: Hledání vrstevnic: Myšlenka: -Představíme si barvy obrázku jako výšku. Pro jednoduchost např. šedé obrázky, kde je stupeň šedi převeden na výšku. - Zvolíme počet vrstev, na který chceme obrázek nařezat a postupujeme od spodní (nejnižší): 1.V nějakém bodě tracujeme okraj bitmapy ve výšce požadované vrstvy. -Ak := Útvar vzniklý tracováním 2. Platí: -(Max(V i ) – Min(V i )) / #vrstev = ΔZ -V i …výšky všech bodů obrázku -ΔZ…z-ová (výšková) vzdálenost mezi vrstvami 3.Procházíme další body bitmapy po nějak jemně zvolené mřížce a pokud je výška bodu vyšší, než hladina právě tracované vrstevnice a bod neleží v A i, i=0..k, provedeme krok 2 a k:=k Musíme prozkoumat vnitřky oblastí dané tracováním z kroku 2, tj. body uvnitř A i, i=0..k. 1.Pokud nalezneme uvnitř A i bod, který má nižší výšku, než výška právě tracované vrstevnice, provedeme opět tracování jako v kroku 2 (nechť tracovaný útvar je B) a nalezený útvar „vykrojíme“ z A i, tj. A i := Ai \ B 5.Po projití mřížky do konce pokračujeme další vrstvou, znova od kroku 1.
Autor: Princip Tracování II. Zavede-li nás tracování do slepé uličky, je třeba se vrátit
Autor: xxxxx xxxxx xxx x x x x x Hledání vrstevnic Vrstevnice v rastru -hledání oblastí se stejně vysokým okrajem - z nalezených oblastí vyříznutí „louží“, tj. míst s okrajem o výšce menší, než výška nějaké nižší vrstevnice
Autor: Jednodušší způsob: Lineární hledání vrstevnic - Vytvoříme triangulaci půdorysů bodů v prostoru - Např. pomocí Delauney triangulace (duální graf k Voronoi diagramu) - Na každé straně vzniklých trojúhelnících nalezneme bod o stejné z-výšce, které propojíme - triangulace např. viz. Myšlenka: ? ? ?
Autor: Odkazy Web prezentace: Plugin do PowerPointu: Matematický aparát ke křivkám: Jiná metoda vektorizace: - Albrecht Preusser, Algorithm 684: C1- and C2-interplation on triangles with quintic and nonic bivariate polynomials, ACM Transactions on Mathematical Software (TOMS), v.16 n.3, p , Sept. 1990Albrecht Preusser, Algorithm 684: C1- and C2-interplation on triangles with quintic and nonic bivariate polynomials, ACM Transactions on Mathematical Software (TOMS), v.16 n.3, p , Sept preusser.pdf (nutné být zaregistrován) preusser.pdf