Geometria obrazu Wykład 6 Grafika wektorowa Diagram Voronoi zbioru punktów Diagram Voronoi zbioru odcinków Oś medialna. Szkielet prosty. Triangulacja Delaunay Triangulacja Delaunay rzędu k
Grafika wektorowa. Grafika wektorowa (obiektowa) jest jednym z dwóch podstawowych rodzajów grafiki komputerowej, w której obraz opisany jest za pomocą figur lub brył geometrycznych, umiejscowionych w danym układzie współrzędnych. Drugim z podstawowych typów grafiki komputerowej jest grafika rastrowa. Grafika wektorowa Grafika rastrowa [http://pl.wikipedia.org/wiki/Grafika_wektorowa]
Typowe możliwości: elementarne figury: prosta, prostokąt, okrąg, łuk, wielokąt foremny, wielokąt gwiaździsty, spirala, krzywe Beziera, standardowe atrybuty: grubość i kolor linii rysowania, kolor wypełnienia, zaokrąglenia rogów oraz ich przekształcenia takie jak konwersja figur elementarnych w krzywe, grupowanie oraz scalanie obiektów ze sobą, operacje boolowskie między obiektami (przycinanie, część wspólna itp.) wstawianie obrazu rastrowego (bez wektoryzacji) z możliwością przekształcania go jako całości, import grafik wektorowych oraz wektoryzacji grafik rastrowych i inne.
Zalety: skalowalność, prostota opisu, a przez możliwość modyfikacji poprzez zmianę parametrów obrazu, mniejszy rozmiar w przypadku zastosowań niefotorealistycznych (schematy techniczne, loga, flagi i herby, wykresy itp.), opis przestrzeni trójwymiarowych, bardzo dobre możliwości konwersji do grafiki rastrowej. Wady: duża złożoność pamięciowa dla obrazów fotorealistycznych, przy skomplikowanych obrazach rastrowych konwersja do formy wektorowej nie opłaca się .
Definicja diagramu Voronoi. Niech S={p1, ... , pn} będzie zbiorem n punktów na płaszczyźnie. Dla każdego z punktów należących do S określamy obszar Voronoi zawierający punkty płaszczyzny, dla których dany punkt jest najbliższy spośród punktów z S, tzn.: VD(pi)={x: ii d(pi,x) d(pj,x)}. Punkty należące do brzegów obszarów Voronoi tworzą diagram Voronoi. Lemat. Obszar Voronoi jest wielokątem wypukłym (może być nieograniczony).
Algorytm dziel i rządź uporządkuj zbiór S względem x-owej współ-rzędnej, a następnie podziel go na małe grupy kolejnych punktów; znajdź diagramy Voronoi dla każdej grupy ; while zbiór S jest podzielony do for kolejne pary podziałów do znajdź styczne do otoczek wypukłych podziałów ; znajdź przecięcia symetralnych stycz- nych z pierwszymi zewnętrznymi kra- wędziami znanych diagramów Voronoi ; korzystając z podwójnie łączonych list krawędzi znajdź łamaną wyznaczającą resztę krawędzi wspólnego diagramu Voronoi rozdzielających podziały ;
Lemat. Czas potrzebny do znalezienia łamanej określającej krawędzie diagramu Voronoi między dwoma łączonymi zbiorami punktów jest liniowy względem sumy rozmiarów tych zbiorów. Stosując metodę dziel i rządź możemy stworzyć diagram Voronoi dla n-elementowego zbioru S punktów na płaszczyźnie w czasie O(n log n).
Diagramy Voronoi dla odcinków w R2. Odległość punktu p od odcinka I definiu-jemy jako odległość p od najbliższego punktu należącego do I: d(p,I) = minq I d(p,q) . Krawędziami obszarów Voronoi mogą być odcinki, półproste i fragmenty para-bol (gdy dla punktu z brzegu obszaru najbliższym punktem jednego z sąsiadu-jących odcinków jest jego koniec a dru-giego - punkt z jego wnętrza). Każdy generator należy do swojego obszaru. Lemat. Diagram Voronoi dla n odcinków na płaszczyźnie można znaleźć w czasie O(n log n) (np. metodą dziel i rządź).
Przykład.
Szkielety. Szkieletem (lub osią medialną) wielokąta prostego nazywamy graf podziału jego wnętrza na obszary Voronoi wyznaczane przez krawędzie wielokąta. Twierdzenie (Chin, Snoeyink, Wang 1995). Szkielet wielokąta prostego o n wierz-chołkach można znaleźć w czasie O(n).
Szkielet prosty. Załóżmy, że dany wielokąt będzie „obkurczać się” w taki sposób, że jego wierzchołki będą poruszać się wzdłuż dwusiecznych kątów wyznaczanych przez proste zawierające boki wielokąta. Mamy dwa rodzaje zdarzeń, które powo-dują zmianę kierunku poruszania się wierzchołka: - zdarzenie krawędziowe, gdy znika krawędź „obkurczającego się” wielokąta, zdarzenie rozdzielające, gdy krawędź „obkurczającego się” wielokąta jest rozbijana przez wierzchołek poruszający się w przeciwnym kierunku.
Własności szkieletu prostego. Krawędzie szkieletu prostego są odcinkami. Szkielet prosty dzieli wielokąty na wielokąty monotoniczne. Szkielet prosty wielokąta wypukłego jest identyczny z odpowiednią osią medialną. Lemat. Jeśli P nie jest wielokątem wypukłym, ma n wierzchołków, z których r tworzy kąt większy od , to szkielet prosty tego wielokąta składa się z 2n-3 krawędzi, a jego oś medialna ma 2n+r-3 krawędzie, z czego r jest fragmentami parabol. Twierdzenie (Tănase, Veltkamp 2004) Szkielet prosty dla n-kąta prostego na płaszczyźnie można obliczyć w czasie O(n).
Triangulacja Delaunay. Dany jest zbiór S zawierajacy n punktów na płaszczyźnie. Załóżmy, że żadne cztery punkty ze zbioru S nie są współokręgowe. Triangulacją Delaunay nazywamy graf dualny do diagramu Voronoi, którego wierzchołkami są punkty z S a krawędzie łączą wierzchołki odpowiadające sąsiednim obszarom Voronoi. Triangulacje Delaunay możemy również rozpatrywać bez żadnych ograniczeń dla zbioru S. Jednakże wtedy triangulacja może być wyznaczona niejednoznacznie.
Własności triangulacji Delaunay. 1. Jest to (z definicji) graf planarny o n wierzchołkach. Brzegiem triangulacji jest otoczka wypukła zbioru S. Jeśli otoczka ma k wierzchołków, to triangulacja ma 2n-2-k ścian i 3n-3-k krawędzi (ćwiczenia). 2. Każdy trójkąt odpowiada wierzchołkowi diagramu Voronoi. Każda krawędź trian-gulacji odpowiada krawędzi diagramu. 3. Okrąg przechodzący przez dwa punkty pi,pj S, który nie zawiera w swoim wnętrzu innych punktów z S, istnieje wtedy i tylko wtedy, gdy odcinek należy do triangulacji Delaunay. 4. Triangulacja Delaunay w R2 maksy-malizuje minimalny kąt w triangulacji. 5. Triangulacja w Rd zawiera O(nd/2) sympleksów.
Algorytm legalizacji krawędzi. Dla triangulacji T zbioru S definiujemy wektor kątów, jako uporządkowany niemalejąco ciąg wszystkich kątów trójkątów tworzących triangulację A(T) := (1, 2, ...., m). Przekątną czworokąta wypukłego nazywamy krawędzią nielegalną, gdy wektor kątów dla przyległych do niej trójkątów jest leksykograficznie mniejszy od wektora kątów trójkątów tworzonych przez drugą przekątną. 6 5 4 3 2 1 6 5 4 3 2 1 (1, 2, ...., 6) < (1, 2, ...., 6)
Algorytm LegalTiangulation(S) Dane: Dowolna triangulacja T zbioru S Wynik: Legalna triangulacja zbioru S while T zawiera nielegalną krawędź e do zastąp e przez krawędź e’ łączącą przeciwległe wierzchołki trójkątów sąsiadujących z e; return T; Taki algorytm jest nieefektywny.
Algorytm przyrostowy. Załóżmy, że mamy dodatkowe trzy punkty tworzące trójkąt, wewnątrz którego znajdują się punkty ze zbioru S. Dodając kolejny punkt dostajemy jeden z dwóch przypadków: dodany punkt wpada do wnętrza jednego z trójkątów aktualnej triangulacji, dodany punkt pojawia się na krawędzi aktualnej triangulacji. W obu przypadkach łączymy go z wierzchołkami trójkątów, do których należy.
procedure LegalizeEdge(p,e,T) (*Niech wstawiany punkt p i krawędź e tworzą trójkąt należący do T oraz krawędzie e, e’ i e” tworzą trójkąt sąsiadujący *) if e jest nielegalna then begin zamień e przez krawędź łączącą p z przeciwległym wierzchołkiem sąsiedniego trójkąta; LegalizeEdge(p,e’,T); LegalizeEdge(p,e”,T); end;
Algorytm DelaunayTriangulation(S) Dane: Zbiór S i trzy punkty q1, q2, q3 ograniczające S. Wynik: Triangulacja Delaunay zbioru S. T:= trójkąt q1q2q3 ; oblicz losową permutację punktów z S; for i:=1 to n do begin znajdź trójkąt w T, do którego należy pi; połącz pi z odpowiednimi wierzchoł-kami T; legalizuj krawędzie trójkątów o wierz-chołku w pi; end; usuń z T punkty q1, q2, q3 wraz z incydent- nymi krawędziami; return T;
Twierdzenie. Algorytm ten znajduje triangulację Delaunay dla zbioru n punktów na płaszczyźnie w oczekiwanym czasie O(n log n) i oczekiwanej pamięci O(n). Triangulację nazywamy triangulacją Delaunay rzędu k, gdy okrąg opisany na dowolnym trójkącie triangulacji zawiera w swoim wnętrzu co najwyżej k punktów z danego zbioru S. Taka triangulacja nie jest jednoznaczna.
Metoda zamian. Postępujemy podobnie jak w przypadku znajdywania legalnej triangulacji. Startujemy z triangulacji Delaunay i zamieniamy przekątne w czworo-kącie będącym sumą sąsiednich trójkątów triangulacji, jeśli dwa nowe trójkąty należą do triangulacji Delaunay rzędu k, końcem nowej krawędzi jest najniższy wierzchołek danego czworokąta. Operacje te wykonujemy aż do wyczerpania możliwości zamian. Lemat. Algorytm wykonuje co najwyżej O(n2) zamian. Dla danego k algorytm wykonuje co najwyżej O(nk) zamian.
Twierdzenie. Dla danego k i zbioru n punktów na płaszczyźnie zastosowanie metody zamian w triangulacji Delaunay rzędu k wymaga czasu O(nk2 + nk log n).
Dziękuję za uwagę.