Konvexní obálka množiny bodů. Graham Scan. Jarvis Scan. Quick Hull. Inkrementální metoda. Divide and Conquer. Rotating Calipers. Tomáš Bayer bayertom@natur.cuni.cz Katedra aplikované geoinformatiky a kartografie. Přírodovědecká fakulta UK. 1 / 56
Obsah přednášky 1 Úvod do problému 2 Formulace problému 3 Metody konstrukce konvexní obálky 4 Minimum Area Enclosing Rectangle 5 Detekce hlavních směrů budov 2 / 56
Úvod do problému 1. Detekce obrysu budovy z klasifikovaných dat Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Konvexní geoinformatiky obálkaamnožiny kartografie. bodpr írodov u. e decká fakulta UK.) 3 / 56
2. Formulace problému Formulace problému Dáno: Hledáme: Množina n bodů S = {p 1,, p 2,..., p n} v R 2, kde p i = [x i, y i]. Nejmenší konvexní množinu C, p i C. (Convex Hull Problem) Definice 1: Konvexní obálka množiny H konečné množiny S v E 2 představuje nejmenší konvexní mnohoúhelník P obsahující S (tj. neexistuje P P splňující definici). Definice 2: Konvexní obálka H množiny konečné množiny S představuje konvexní mnohoúhelník P s nejmenší plochou. Definice 3: Konvexní obálka H množiny konečné množiny S představuje průsečnici všech polorovin obsahujících S. Definice 4: Konvexní obálka H množiny konečné množiny S představuje sjednocení všech trojúhelníků, jejichž vrcholy tvoří body v S. Množinu S označíme jako konvexní, pokud spojnice libovolných dvou prvků leží zcela uvnitř této množiny. 4 / 56
Formulace problému 3. Ukázka konvexní obálky H množiny S 5 / 56
Formulace problému 4. Využití konvexní obálky Jedna z nejpoužívanějších geometrických struktur, pomocná struktura pro řadu algoritmů. Často používána jako první odhad tvaru prostorového jevu Příklady použití: Detekce kolizí: plánování pohybu robotů. Konstrukce MBR: využití v kartografii pro detekci tvaru a natočení budov. Analýza tvarů (Shape Analysis): analýza tvarů objektů. Statistická analýza: analýza rozptylů, odhady, např. metoda Onion Peeling. Analýza shluků (Cluster Analysis): vlastnosti clusterovaných dat. Poznámka: Konvexní obálka H existuje v R d., budeme se zabývat pouze R 2. variantou. 6 / 56
Formulace problému 5. Odhad centroidu metodou Onion Peeling 7 / 56
Metody konstrukce konvexní obálky 6. Metody konstrukce konvexní obálky Přehled nejčastěji používaných metod pro konstrukci konvexní obálky: Jarvis Scan (Gift Wrapping). Graham Scan. Quick Hull. Inkrementální kontrukce. Zametací přímka. Divide and Conquer. Některé z metod použitelné pouze pro R 2, jiné převeditelné do vyšší dimenze. 8 / 56
Metody konstrukce konvexní obálky 7. Jarvis Scan (Jarvis, 1973) Připomíná postup balení dárku do papíru (Gift Wrapping Algorithm). Jednoduchá implementace, lze rozšířit i do R 3. Předpoklad: v S nejsou tři kolineární body. Nutnost předzpracování O(n): nalezení pivotu q q = min (y i ). p i S Princip algoritmu: Dva poslední body H označenyp j 1, p j. Aktuálně přidávaný bod p j+1 do H maximalizuje úhel p j+1 = arg max (p j 1, p j, p i ). p i S Bod p j+1 hledáme ze všech p i S, které dosud nejsou součástí H. Lze je značkovat. 9 / 56
Metody konstrukce konvexní obálky 8. Algoritmus Jarvis Scan Nevýhodou složitost O(n 2 ), nehodí se pro velké S. Snadná implementace. Algoritmus 1: Gift Wrapping (P, H) 1: Nalezení pivota q, q = min(y i ), 2: Přidej q H. 3: Inicializuj: p j 1 X, p j = q, p j+1 = p j 1. 4: Opakuj, dokud p j+1 q: 5: Nalezni p j+1 = arg max pi P (p j 1, p j, p i ) 6: Přidej p j+1 H. 7: p j 1 = p j ; p j = p j+1. 10 / 56
Metody konstrukce konvexní obálky 9. Ukázka Jarvis Scan p j+1 p j+1 ω j p j p x q=p j p j-1 j-1 x p j+1 ω j p j ω j p j p j+1 ω j pj-1 p j-1 x x 11 / 56
10. Graham Scan Metody konstrukce konvexní obálky Algoritmus není možné rošířit do R 3 (Graham 1972). Časová složitost O(n log(n)), lze použít i na rozsáhlé datasety. Převod star-shaped polygonu na H. Princip: Konstrukce star-shaped polygonu z pivotu q. Tvořen vrcholy setříděnými dle úhlu ω = (p i, q, x). Body ve star-shaped polygonu: index j. Kritérium levotočivosti: p j { / H, p j+1 σ r(p j, p j+1),? H, p j+1 σ l(p j, p j+1). Implementace: Prvky v zásobníku S: t (top), t 1 (second). Reflexní vrchol p t odebrán z S, konvexní p j přidán { pop(), p j σ r(p t 1, p t), S push(p j), p j σ l(p t 1, p t). 12 / 56
Metody konstrukce konvexní obálky 11. Ilustrace kritéria levotočivosti 13 / 56
Metody konstrukce konvexní obálky 12. Algoritmus Grahamova skenování Přezpracování O(n): pivot q q = min (y i ). p i S Přezpracování O(n log(n)): setřídění datasetu S podle úhlu k ose x v q. Algoritmus 2: Graham Scan (P, S) 1: Nalezení pivota q = min pi S(y i ), q H. 2: Setřídění p i S dle ω i = (p i, q, x), index j odpovídá setříděnému pořadí. 3: Pokud ω k = ω l, vymaž bod p k, p l bližší ke q. 4: Inicializuj j = 2; S = 5: S q, S p 1 (indexy posledních dvou prvků p t, p t 1 ) 5: Opakuj pro j < n: 6: if p j vlevo od p t 1, p t : 7: S p j 8: j = j + 1 9: else pop S. 14 / 56
Metody konstrukce konvexní obálky 13. Ukázka konstrukce Graham Scan 15 / 56
Metody konstrukce konvexní obálky 14. Ukázka konstrukce Graham Scan 16 / 56
Metody konstrukce konvexní obálky 15. Algoritmus Quick Hull Rychlý, Θ(n lg n), analogie s QuickSortem. Strategie Divide and Conquer, worst case O(n 2 ). Obálka expanduje všemi směry. Princip algoritmu: Předzpracování: setřídění bodů dle x, O(n lg n). Rozdělení S na S U(upper) a S L (lower) vzhledem k (q 1, q 3) q 1 = min (x i), q 3 = max(x i). p i S p i S H konstruována ze 2 částí: Upper Hull (H U), Lower Hull (H L). H U nad S U, H L nad S L. H U, H L zpracovávány separátně, výsledkem sjednocení H(S) = H u(s u) H l(s l). Důvod rychlosti: Většinou málo rekurzivních kroků, málo bodů vně aproximace H U, H L. Pokud S H worst case. 17 / 56
Metody konstrukce konvexní obálky 16. Rozdělení na S U, S L q 4 S U σ U q 3 σ ul q 1 S L q 2 18 / 56
Metody konstrukce konvexní obálky 17. Algoritmus Quick Hull, lokální procedura Nalezení bodu p s indexem ī p = arg max p i (p s, p e) 2, p σ r(p s, p e). p i S Vytvoření nových segmentů (p s, p) a (p, p e). Rekurzivní volání nad prvním segmentem (p s, p). Přidání H p. Rekurzivní volání nad druhým segmentem (p, p e). V lokální proceduře předávány pouze indexy s, e koncových bodů segmentu. Index i odpovídá bodu p. Algoritmus 3: Quick Hull (s, e, S, H), lokální procedura 1: Najdi bod p = arg max pi S p i (p s, p e), p σ r(p s, p e). 2: If p /O ; //Eexistuje bod vpravo od hrany. 3: Quick Hull(s, i, S, H) //Upper Hull, i index p 4: H p. //Přidej bod c do H. 5: Quick Hull(i, e, S, H) //Lower Hull, i index p 19 / 56
Metody konstrukce konvexní obálky 18. Lokální procedura S U i i e i S U σ U s S U σ U s S U σ U s e e i e i s i s S U σ U S U σ U S U U σ U s e e 20 / 56
Metody konstrukce konvexní obálky 19. Lokální procedura S L e e s σ ul s σ ul S L i S L i s σ ul s σ ul L S L i e S L i e 21 / 56
20. Algoritmus Quick Hull, globální procedura Nalezení q 1, q 2,nutné předzpracování. Rozdělení S na: S U S(upper) a S L S (lower) vzhledem k (q 1, q 2 ). Přidání H U q 1, q 3, rekurzivní procedura nad S U. Přidání H L q 3, q q, rekurzivní procedura nad S L. Při CCW orientaci vede ke konstrukci H bez nutnosti spojení. Algoritmus 3: Quick Hull (S, H), globální procedura 1: H =, S U =, S L = 2: q 1 = min pi S(x i ), q 3 = max pi S(x i ). 3: S U q 1, S U q 3. 4: S L q 1, S L q 3. 5: for p i S 6: if (p i σ l (q 1, q 3 )) S U p i 7: else S L p i 8: H q 3. //Přidej bod c do H. 9: Quick Hull(1, 0, S U, H) //Upper Hull 10: H q 1. //Přidej bod c do H. 11: Quick Hull(0, 1, S L, H) //Lower Hull
21. Spojení do H Metody konstrukce konvexní obálky Vhodné načasováním rekurzivních operací zajistí spojení H U a H L. 1. Přidání q 3. 2) Rekurze H U. 3) přidání q 1. Rekurze H L. 2. U 1. σ u 3. L 4. 23 / 56
Metody konstrukce konvexní obálky 22. Doba běhu QHull algoritmu Časová funkce T (n) v závislosti na velikosti vstupu n: T (1) = 1 T (n) = T (n/2) + T (n/2) + n, = 2T (n/2) + n, = 2[2T (n/4) + n] + n, = 4T (n/4) + 3n, = 2{2[2T (n/8) + k] + k} + k, = 8T (n/8) + 7n, = it (n/i) + (i 1)n... = nt (1) + (n 1)n, = n + (n 1)n, = n 2 Doba běhu kvadratickou funkcí velikostí vstupu, O(n 2 ). 24 / 56
Metody konstrukce konvexní obálky 23. Aproximací body MBR První aproximace H představuje konvexní čtyřúhelník q 1, q 2, q 3, q 4. H zpracováván postupně po jednotlivých segmentech. Algoritmus využívá čtveřici rekurzivních volání procedury QuickHull nad každou stranou (q i q i+1 ) urychlení. q 1 = [min(x i ), y];q 2 = [x, min(y i )];q 3 = [max(x i ), y];q 4 = [x, max(y i )]; Split S to S 1, S 2, S 3, S 4 ; H q 1 QuickHull(0, 1, S 1, H); H q 2 QuickHull(0, 1, S 2, H); H q 3 QuickHull(0, 1, S 3, H); H q 4 QuickHull(0, 1, S 4, H); 25 / 56
Metody konstrukce konvexní obálky 24. Konstrukce Quick Hull s aproximací body MBR 26 / 56
Metody konstrukce konvexní obálky 25. Inkrementální vkládání Rychlá konstrukce, složitost O(n log(n)). Lze převést do vyšší dimenze. Princip algoritmu: Body z S přidávány po jednom do vytvořené konvexní obálky H, jejíž tvar je modifikován. Necht P představuje podmnožinu datasetu S obsahující m bodů a p přidávaný bod H(P(m + 1)) = H(P(m)) + H(p), Při přidání bodu p do H m mohou nastat dvě situace: p H m Bod p může být zanedbán, neovlivní tvar H(P(m)) H(P(m + 1)) = H(P(m)). p / H m Bod p ovlivní tvar H m. Nutno najít horní a dolní tečny t 1, t 2 procházející p kolmé k H m. 27 / 56
Metody konstrukce konvexní obálky 26. Ukázka nalezení horní a dolní tečny 28 / 56
Metody konstrukce konvexní obálky 27. Princip nalezení horní a dolní tečny t 1, t 2 V každém bodě H(m) lestujeme polohu incidujících dvou stran e j, e j+1 vzhledem k přidávanému bodu p. V bodech dotyku tečen platí: Dolní tečna t 1: Bod p vlevo od e j a vpravo od e j+1. Horní tečna t 2: Bod p vpravo od e j a vlevo od e j+1. Pro ostatní vrcholy p i leží bod p na stejné straně od e j, e j+1. Konvexní obálka mezi dotykovými body tečen odstraněna a nahrazena dvojicí tečen. Algoritmus 4: Upper and Lower Tangent 1: for i = 0 to n 1 2: if XOR(p vlevo od/na p i 1p i, p vlevo od/na p ip i+1) 3: p i je dotykový bod. Poznámka: XOR(A, B) = (A B) (B A). 29 / 56
28. Metoda zametací přímky Realizace strategie inkrementální konstrukce. Nadrovina rozděluje S na zpracovanou/nezpracovanou část. Složitost O(n log(n)), lze převést do vyšší dimenze. Citlivost vůči singularitám: duplicitní body v P. Princip algoritmu: Předzpracování: setřídění S dle souřadnice x, složitost O(n log(n)). Nad P S se pohybuje nadrovina σ (L->P) přes p i P s. Iniciální řešení tvořeno trojúhelníkem H(P s(3)) (p 1, p 2, p 3 ). Pro přidávaný bod p updatována H(P s(m)), expanduje v kladném směru x H(P s(m)) = H(P s(m 1) + H(p). Algoritmus 1: Sweep Line (P, H) 1: unique(p) //Odstraň duplicitní body 2: Sort P s = sort(p) by x 3: H(P s(3)) (p 1, p 2, p 3 ) //Iniciální řešení pro i 3 4: i 4. 5: Opakuj pro p i P s 6: H(P s(m)) = H(P s(m 1) + H(p i ) //Aktualizace řešení
29. Sweep-line, konvexní obálka 1 2 3 5 6 7 8 9 1 2 3 5 6 7 8 9 4 10 4 10 1 2 3 5 6 7 8 9 1 2 3 5 6 7 8 9 4 10 4 10
30. Datový model Metody konstrukce konvexní obálky Použity celkem 3 seznamy, popis H formou circular listu. První seznam obsahuje všechny vrcholy P s Dva pomocné seznamy: předchůdci p[i] a následníci n[i]. Vrchol bez předchůdce: p[i] = -1. Vrchol bez následníka: n[i] = -1. Pokud p i H, pak p[i] = -1, n[i] = -1 Příklady: p[i]... n[i]... p edch dce i-tého vrcholu, (i-1)-ty vrchol. následník i-tého vrcholu, (i+1)-ty vrchol. p[p[i]]... p edch dce p edch dce, (i-2)-ty vrchol. n[n[i]]... následník následníka, (i+2)-ty vrchol. n[p[i]]... následník p edch dce, i-ty vrchol. p[n[i]]... p edch dce následníka, i-ty vrchol. 32 / 56
31. Ukázka reprezentace H 1 2 3 5 6 7 8 9 4 10 [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] p: -1 2 5-1 1 9-1 -1-1 10 4 S: x=... y=... x=... y=... x=... y=... x=... y=... x=... y=... x=... y=... x=... y=... x=... y=... x=... y=... x=... y=... x=... y=... n: -1 4 1-1 10 2-1 -1-1 5 49
32. Iniciální fáze První hrana tvořená body p 1, p 2, kde x 0 = min pi P s (x i ). Třetí bod p 3 v levé nebo pravé polorovině, nutno zachovat CCW orientaci. 2 2 3 3 σ L σ L 1 1 σ R 1 1 σ R 3 3 2 2 Algoritmus 1: Initial phase(p, H) 1: if (p 3 σ L (p 1, p 2 )) // (p 1, p 2, p 3 ) 2: n[1] = 2; n[2] = 3; n[3] = 1 3: p[1] = 3; p[2] = 1; p[3] = 2 4: else // (p 1, p 3, p 2 ) 5: n[1] = 3; n[3] = 2; n[2] = 1 6: p[1] = 2; p[3] = 1; p[2] = 3 Alternativně lze vytvořit dvojúhelník : 1: n[1] = 2; n[2] = 1 2: p[1] = 2; p[2] = 1
33. Iterativní fáze I. Vytvoření aproximace H se zachovanou CCW orientací. H nemusí být konvexní, převod na H. Rozpojení H mezi body {i 1, n[i 1]} resp. {p[i 1], i 1}. Náhrada sekvence vrcholů: { {p[i 1], i 1, i, n[i 1]}, {p[i 1], i 1, n[i 1]} {p[i 1], i, i 1, n[i 1]}, y > y i 1, y y i 1. Algoritmus 1: Iterativní fáze I., konstrukce H 1: if (y i > y i 1) //p i σ U 2: p[i] = i-1; n[i] = n[i-1]; // Spojeni p[i] s predchudcem/naslednikem 3: else //p i σ L 4: n[i] = i-1; p[i] = p[i-1]; // Spojeni p[i] s predchudcem/naslednikem 4: n[p[i]] = i; //Propojeni predchudce s p[i] 4: p[n[i]] = i; //Propojeni naslednika s p[i] Oboustranné korektní napojení segmentů v H: {p[p[i]], p[i], i, n[i], n[n[i]]}
34. Iterativní fáze I, ukázka. n[i-1] i-1 i σ U n[i-1] i σ U i-1 p[i-1] σ L p[i-1] σ L n[i-1] n[i-1] i-1 σ U i-1 σ U 3 6 p[i-1] i σ L p[i-1] i σ L
35. Iterativní fáze I, indexy. n[i-1] i-1 i n[n[i]] n[i] i p[i] p[i-1] p[p[i]]
Metody konstrukce konvexní obálky 36. Iterativní fáze II. Převod nekonvexní H na H. Náhrada sekvence nekonvexních vrcholů horní a dolní tečnou. Nekonvexní vrcholy vynechány. Horní tečna: Nekonvexita n[i] v trojici {i, n[i], n[n[i]]} řešena vynecháním: Přemostění vrcholu možnou horní tečnou. {i, n[i], n[n[i]]} {i, n[n[i]]}. Dolní tečna: Nekonvexita p[i] v trojici {p[p[i]], p[i], i} řešena vynecháním: Přemostění vrcholu možnou dolní tečnou. Algoritmus 1: Iterativní fáze II., převod H na H {p[p[i]], p[i], i} {p[p[i]], i}. 1: while (n[n[i]]) σ P (i, n[i]) //Neni horni tecna: n[n[i]]) vpravo od (i, n[i]) 2: p[n[n[i]]] = i; n[i] = n[n[i]]; //Vynech n[i], aproximuj horni tecnou, poradi! 3: while (p[p[i]]) σ L (i, p[i]) //Neni dolni tecna: p[p[i]]) vlevo od (i, p[i]) 4: n[p[p[i]]] = i; p[i] = p[p[i]]; //Vynech p[i], aproximuj dolni tecnou, poradi! 38 / 56
37. Iterativní fáze II., ukázka n[n[i]] n[i] i σ R n[n[i]] n[i] t u i σ L p[i] p[i] p[p[i]] p[p[i]] n[n[i]] n[i] i σ R n[n[i]] n[i] i σ L p[i] p[p[i]] t l p[p[i]] p[i]
38. Algoritmus Sweep Line, kompletní Algoritmus 1: Sweep Line 1: Sort P s = sort(p) by x 2: if (p 3 σ L (p 1, p 2 )) 3: n[1] = 2; n[2] = 3; n[3] = 1 4: p[1] = 3; p[2] = 1; p[3] = 2 5: else 6: n[1] = 3; n[3] = 2; n[2] = 1 7: p[1] = 2; p[3] = 1; p[2] = 3 8: for p i P s, i > 3 9: if (y i > y i 1 ) 10: p[i] = i-1; n[i] = n[i-1]; 11: else 12: n[i] = i-1; p[i] = p[i-1]; 13: n[p[i]] = i; p[n[i]] = i; 14: while (n[n[i]]) σ R (i, n[i]) 15: p[n[n[i]]] = i; n[i] = n[n[i]]; //Poradi! 16: while (p[p[i]]) σ L (i, p[i]) 17: n[p[p[i]]] = i; p[i] = p[p[i]]; //Poradi!
39. Konverze reprezentrace Přechod na reprezentaci H tvořenou posloupností vrcholů. Uchování CCW orientace, procházíme následníky. Zapamatován index prvního vrcholu polygonu. Složitost O(n). Algoritmus 1: Sweep Line: konverze reprezentace 1: H p 1 2: i =n[1]) 3: do 4: H p i 5: i =n[i] 6: while (i 1)
Metody konstrukce konvexní obálky 40. Algoritmus Divide and Conquer Předpoklad: žádná trojice bodů není kolineární a žádné dva body v datasetu nemají stejné souřadnice x. Dělení S na dvě podmnožiny A, B a jejich následné spojení s nalezením horní a dolní tečny t 1, t 2. Algoritmus 5: Divide and Conquer. 1: Setřídění S podle x. 2: Rozdělení S na dvě podmnožiny A, B obsahující n/2 bodů. 3: Konstrukce konvexních obálek H(A) a H(B). 4: Spojení konvexních obálek H = H(A) H(B). 5: Nalezení dolní tečny t 1. 6: Nalezení horní tečny t 2. 7: Nahrazení úseků konvexních obálek A, B mezi oběma tečnami. 42 / 56
Metody konstrukce konvexní obálky 41. Algoritmus nalezení dolní tečny t 1 Existence řady algoritmů pro spojení dvojice konvexních obálek. Ukázka spojení nalezení dolní tečny t 1 procházkou, Walking Algorithm (Preprata & Hong, 1977). Z extrémních bodů a, b množin A, B nalezneme k bodu a bod b takový, že jejich spojnice je dolní tečnou B. Z bodu b hledáme bod a takový, aby jejich spojnice byla dolní tečnou A. Postup opakujeme, dokud a, b není dolní tečnou A i B. Algoritmus 6: Lower Tangent t 1, Walk 1: Najdi bod a: nejpravější bod A. 2: Najdi bod b: nejpravější bod B. 3: Opakuj, dokud t 1 = ab není dolní tečnou A a B. 4: Opakuj, dokud t 1 není dolní tečnou A: 5: a = a 1. 6: Opakuj, dokud t 1 není dolní tečnou B: 7: b = b + 1 43 / 56
Metody konstrukce konvexní obálky 42. Princip nalezení dolní tečny 44 / 56
Minimum Area Enclosing Rectangle 43. Využití konvexní obálky pro konstrukci obdélníka s minimální plochou Dáno: Množina n bodů S v R 2. Hledáme: Obdélník R s nejmenší plochou opsaný S. (Minimum Area Enclosing Box) Naivní algoritmy problém řeší v kvadratickém čase O(n 2 ). Definice: Nejméně jedna strana obdélníka s minimální plochou R opsaného množině S je kolineární se stranou H. Algoritmy pro konstrukci obdélníka s minimální plochou R opsaného množině S pracují s konvexní obálkou H předzpracování. Složitost konstrukce konvexní obálky H : O(n log(n)). Složitost konstrukce obdélníku R nad H: pouze O(n)! Algoritmus řeší problém v čase O(n log(n)). Využití v kartografii pro detekci tvaru a natočení budov. 45 / 56
Minimum Area Enclosing Rectangle 44. Ukázka obdélníku s minimální plochou opsaného množině S 46 / 56
Minimum Area Enclosing Rectangle 45. Rotating Calipers Algoritmus Rotating Calipers pro nalezení R nad datasetem S v lineárním čase (Toussaint, 1983). V prvním kroku nalezen MBR, který se dotýká H v bodech s extrémními souřadnicemi p i, p j, p k, p l. Úhly stran příslušející 4 extrémním bodům sevřené se stranami MBTR označme θ i, θ j, θ k, θ l. 47 / 56
Minimum Area Enclosing Rectangle 46. Princip metody Rotating Calipers Pro délky hran l 1, l 2 MBR a plochu A platí: l 1 = d ik cos ϕ k l 2 = d jl cos ϕ j A = l 1 l 2 Otočení obdélníku o úhel ±δ, nové délky hran l 1, l 2 a plocha A l 1 = d ik cos(ϕ k ± δ) l 2 = d jl cos(ϕ j ± δ) A = l 1 l 2. Rotace dle ±δ lze sčítat, jak určit plochu obdélníku po i-tém otočení z plochy předchozího? Pro vztah mezi A i+1 a A i platí po úpravě: A i+1 = A i (cos 2 δ + (tan ϕ k tan ϕ j ) cos δ sin δ tan ϕ k tan ϕ j sin 2 δ) 48 / 56
Minimum Area Enclosing Rectangle 47. Algoritmus metody Rotating Calipers Algoritmus 7: Rotating Calipers 1: Inicializuj A min =, rot = 0, θ sum = 0. 2: Nalezení MBR nad S. 3: Výpočet úhlů ϕ j, ϕ k a plochy A(R). 4: A min = A. 5: Opakuj, dokud θ sum < π 4 : 6: Výpočet úhlů θ i, θ j, θ k, θ l a stran l 1, l 2 7: θ = min(θ i, θ j, θ k, θ l ). 8: Otočení R o úhel θ 9: Určení A(R) z předchozí A. 10: if (A < A min ) 11: A min = A;rot = rot + θ; L 1 = l 1 ; L 2 = l 2. 12: θ sum = θ sum + θ. Možné problémy: numerická nepřesnost vlivem rekurentního výpočtu formule mezi A i+1, A i. 49 / 56
Minimum Area Enclosing Rectangle 48. Znázornění metody Rotating Calipers 50 / 56
Detekce hlavních směrů budov 49. Detekce úhlu natočení budovy Častý problém při kartografické generalizaci budov či jejich automatickém rozpoznávání. Budova před generalizací a po generalizaci musí mít uchovánu orientaci vzhledem k ostatním obsahovým prvkům mapy (např. zachování uliční čáry). Nutnost detekovat tzv. hlavní směry budovy (jsou na sebe kolmé). Popisují orientaci (tj. natočení) budovy vzhledem k ostatním prvkům mapy. Metody detekce natočení budov: Longest Edge. Weighted Bisektor Minimum Area Enclosing Rectangle. Wall Average. 51 / 56
Detekce hlavních směrů budov 50. Metody detekce hlavních směrů budov Longest Edge První hlavní směr budovy představován nejdelší stranou v budově, druhý hlavní směr na ní kolmý. Nedosahuje příliš dobrých výsledků Wieghted Bisector: V budově hledány dvě nejdelší úhlopříčky se směry ϕ 1, ϕ 2 a s délkami s 1, s 2. První hlavní směr je dán váženým průměrem. Dává velmi dobré výsledky. ϕ = s 1ϕ 1 + s 2 ϕ 2 s 1 + s 2. Minimum Area Enclosing Rectangle První hlavní směr představuje delší ze stran R, druhý kratší strana. Dává dobré výsledky, problémy s budovami tvaru L a Z. Wall Average Na každou stranu budovy aplikována operace mod( π 2 ). Zbytky po dělení leží v intervalu < 0, π ). Z hodnot 2 spočten vážený průměr, váhou je délka strany. ϕ = n i=1 s i (ϕ i mod π 2 ) s i. 52 / 56
Detekce hlavních směrů budov 51. Detekce hlavních směrů budovy Metody Longest Edge a Wall Average (Duchene et al, 2003). 53 / 56
Detekce hlavních směrů budov 52. Detekce hlavních směrů budovy Metody Smallest Area Enclosing Rectangle a Weigted Bisector (Duchene et al, 2003). 54 / 56
Detekce hlavních směrů budov 53. Problémy při detekci hlavních směrů Problémy s detekcí hlavních směrů u budov tvarů L, Z. 55 / 56
Detekce hlavních směrů budov 54. Vliv chybného určení hlavního směru na kartografickou generalizaci Algoritmus Divide and Conquer (Bayer, 2009). 56 / 56