Grafika - miki.cs.pollub.plmiki.cs.pollub.pl/own/wp-content/uploads/2014/06/POD_w_6... ·...

116
Grafika 2D Rasteryzacja elementów wektorowych opracowanie: Jacek Kęsik

Transcript of Grafika - miki.cs.pollub.plmiki.cs.pollub.pl/own/wp-content/uploads/2014/06/POD_w_6... ·...

Grafika 2D

Rasteryzacja elementów wektorowych

opracowanie: Jacek Kęsik

Wykład obejmuje operacje rastrowe związane

z wyświetleniem kształtów o ciągłych krawędziach

za pomocą skończenie gęstej siatki pikseli

Podstawowe operacje rastrowe

Rysowanie odcinków

Rysowanie okręgów

Krzywe Béziera, sklejane

Antyaliasing

Wypełnianie obszarów

Obcinanie

Podstawowe operacje rastrowe

Rysowanie odcinków

Odcinek przedstawiony rastrowo będzie miał wygląd podobny do poniższego

Podstawowe operacje rastrowe

Rysowanie odcinków

Odcinek opisany jest za pomocą pozycji punktów początku i końca odcinka

Pozycje te zapisane są wg. układu współrzędnych (najczęściej

odpowiadającego wartościami ilościom pikseli obrazu)

Np. Odcinek (2,5),(10,8)

Znając te współrzędne można wyznaczyć równanie prostej, na której ten

odcinek leży.

y=mx+b

m – współczynnik nachylenia prostej = tg kąta nachylenia do osi x.

Podstawowe operacje rastrowe

Rysowanie odcinków

Znając równanie prostej można zbudować naiwny algorytm rysowania

odcinka:

Dla wszystkich wartości x (pikseli) od początku do końca odcinka

• Wyznacz y[i] dla x[i] z równania prostej (1 mnożenie, 1 dodawanie)

• Znajdź najbliższą y[i] wartość całkowitą yc[i] (1 zaokrąglenie)

• Zaznacz piksel (x[i],yc[i])

Algorytm ten działa poprawnie dla

odcinków o nachyleniu od 0 do 45

stopni

Dla odcinków o nachyleniu od 45 do 90

stopni należy podążać wzdłuż osi y.

Podstawowe operacje rastrowe

Rysowanie odcinków

Algorytm naiwny można poprawić korzystając z faktu, że nachylenie

odcinka jest stałe. Wtedy przy przesuwaniu wartości x o 1, różnica między

kolejnymi wartościami y jest stała i wynosi y=m (0<m<1)

Kolejne wartości y można obliczyć ze wzoru

y[i+1] = y[i]+ y

Oszczędność: 1 mnożenie

Algorytm taki nosi nazwę: Digital Differential Analyzer (DDA)

Algorytm ten działa poprawnie dla odcinków o nachyleniu od 0 do 45 stopni,

stąd 0<m<1

Podstawowe operacje rastrowe

Rysowanie odcinków

Algorytm może być stosowany dla linii w

dowolnym oktancie układu współrzędnych,

pod warunkiem modyfikacji kierunku i znaku

przesunięcia.

Podstawowe operacje rastrowe

Rysowanie odcinków

Algorytm wyznaczania odcinka

wykorzystujący jedynie obliczenia

stałopozycyjne został zaproponowany przez

Bresenhama w 1965r.

Algorytm ten, tak samo jak poprzednie

ogranicza się do jednego oktantu układu

współrzędnych. Wykorzystuje on zależność

miedzy poprzednim i kolejnym pikselem,

mówiącą że wartość y następnego piksela

będzie taka sama lub o 1 większa.

Podstawowe operacje rastrowe

Rysowanie odcinków

Dla odcinka (xp,yp),(xk,yk) kryterium wyboru między pikselami jest znak

parametru p[i] (-1 < p[i] < 1), którego początkowa wartość wynosi

p[1]=2 y - x

gdzie x= xk – xp i y= yk – yp

Dla p[i]<0 wybierany jest piksel (x[i+1],y[i])

a kryterium p[i+1] = p[i] + 2 y

Dla p[i]>=0 wybierany jest piksel (x[i+1],y[i+1])

a kryterium p[i+1] = p[i] + 2 y - 2 x

Tylko 1 dodawanie całkowitoliczbowe w 1 kroku

Algorytm Bresenhama

Podstawowe operacje rastrowe

Rysowanie odcinków

Dla odcinka (1,1),(7,4)

Wartości początkowe

x= 7 – 1 = 6

y= 4 – 1 = 3

A= 2 y = 6

B = 2 y - 2 x = -6

p[1]= 2*3 – 6 = 0

Algorytm Bresenhama - przykład

4

3

2

1

1 2 3 4 5 6 7 Krok 0

Zaczynamy od (x[1],y[1])

Podstawowe operacje rastrowe

Rysowanie odcinków

Dla odcinka (1,1),(7,4)

Wartości początkowe

x= 7 – 1 = 6

y= 4 – 1 = 3

A= 2 y = 6

B = 2 y - 2 x = -6

p[1]= 2*3 – 6 = 0

Algorytm Bresenhama - przykład

Krok 1

p[1]=0 to (x[2],y[2])

p[2]=0 – 6 = -6

4

3

2

1

1 2 3 4 5 6 7

Podstawowe operacje rastrowe

Rysowanie odcinków

Dla odcinka (1,1),(7,4)

Wartości początkowe

x= 7 – 1 = 6

y= 4 – 1 = 3

A= 2 y = 6

B = 2 y - 2 x = -6

p[1]= 2*3 – 6 = 0

Algorytm Bresenhama - przykład

Krok 2

p[2]= -6 to (x[3],y[2])

p[3]= -6 + 6 = 0

4

3

2

1

1 2 3 4 5 6 7

Podstawowe operacje rastrowe

Rysowanie odcinków

Dla odcinka (1,1),(7,4)

Wartości początkowe

x= 7 – 1 = 6

y= 4 – 1 = 3

A= 2 y = 6

B = 2 y - 2 x = -6

p[1]= 2*3 – 6 = 0

Algorytm Bresenhama - przykład

Krok 3

p[3]= 0 to (x[4],y[3])

p[4]= 0 - 6 = -6

4

3

2

1

1 2 3 4 5 6 7

Podstawowe operacje rastrowe

Rysowanie odcinków

Dla odcinka (1,1),(7,4)

Wartości początkowe

x= 7 – 1 = 6

y= 4 – 1 = 3

A= 2 y = 6

B = 2 y - 2 x = -6

p[1]= 2*3 – 6 = 0

Algorytm Bresenhama - przykład

Krok 4

p[4]= -6 to (x[5],y[3])

p[5]= -6 + 6 = 0

4

3

2

1

1 2 3 4 5 6 7

Podstawowe operacje rastrowe

Rysowanie odcinków

Dla odcinka (1,1),(7,4)

Wartości początkowe

x= 7 – 1 = 6

y= 4 – 1 = 3

A= 2 y = 6

B = 2 y - 2 x = -6

p[1]= 2*3 – 6 = 0

Algorytm Bresenhama - przykład

Krok 5

p[5]= 0 to (x[6],y[4])

p[6]= 0 - 6 = -6

4

3

2

1

1 2 3 4 5 6 7

Podstawowe operacje rastrowe

Rysowanie odcinków

Dla odcinka (1,1),(7,4)

Wartości początkowe

x= 7 – 1 = 6

y= 4 – 1 = 3

A= 2 y = 6

B = 2 y - 2 x = -6

p[1]= 2*3 – 6 = 0

Algorytm Bresenhama - przykład

Krok 6

p[6]= -6 to (x[7],y[4])

x[7] -> Koniec

4

3

2

1

1 2 3 4 5 6 7

Podstawowe operacje rastrowe

Rysowanie okręgów

222 ryx

Równanie okręgu

Korzystając z zasady symetryczności

można wyznaczyć punkty tylko w 1

oktancie koła

Bezpośrednie wyznaczanie

z równania kosztowne

obliczeniowo

Podstawowe operacje rastrowe

Rysowanie okręgów

Dla koła w 1 oktancie zachodzi zależność analogiczna jak dla odcinka.

Wartość y kolejnego piksela będzie równa wartości obecnej

lub o 1 mniejszej.

Algorytm Bresenhama

Kryterium wyboru jest to czy punkt

środkowy znajduje się wewnątrz

czy na zewnątrz koła

0222 ryx

0222 ryx

Podstawowe operacje rastrowe

Rysowanie okręgów

Dla 1 oktantu koła (0,r),(x,y) - takie że x=y, kryterium wyboru między

pikselami jest znak parametru p[i], którego początkowa wartość wynosi

p[1]=5/4 - r

Dla p[i]<0 wybierany jest piksel (x[i+1],y[i])

a kryterium p[i+1] = p[i] + 2 x[i+1] + 1

Dla p[i]>=0 wybierany jest piksel (x[i+1],y[i+1])

a kryterium p[i+1] = p[i] + 2 x[i+1] + 1 – 2y[i+1]

Kroki są powtarzane tak długo jak pozycja x > pozycja y

Pozostałe 7 pikseli powiązanych wyznaczane jest na podstawie wybranego

Tylko operacje całkowitoliczbowe w 1 kroku

Algorytm Bresenhama

Podstawowe operacje rastrowe

Rysowanie okręgów

Dla okręgu o środku (0,0) i r=5

Algorytm Bresenhama dla okręgów - przykład

Krok 0

Zaczynamy od (x[0],y[5])

5

4

3

2

1

0

-1

-2

-3

-4

-5

-5 -4 -3 -2 -1 0 1 2 3 4 5

Podstawowe operacje rastrowe

Rysowanie okręgów

Dla okręgu o środku (0,0) i r=5

p[0]= 5/4-5 = -3,75 < 0

Algorytm Bresenhama dla okręgów - przykład

Krok 1

Kolejny piksel (x[1],y[5])

p[1]= -3,75 +2+1=-0,75

5

4

3

2

1

0

-1

-2

-3

-4

-5

-5 -4 -3 -2 -1 0 1 2 3 4 5

Podstawowe operacje rastrowe

Rysowanie okręgów

Dla okręgu o środku (0,0) i r=5

p[1]= -0,75 < 0

Algorytm Bresenhama dla okręgów - przykład

Krok 2

Kolejny piksel (x[2],y[5])

p[2]= -0,75 +4+1=4,25

5

4

3

2

1

0

-1

-2

-3

-4

-5

-5 -4 -3 -2 -1 0 1 2 3 4 5

Podstawowe operacje rastrowe

Rysowanie okręgów

Dla okręgu o środku (0,0) i r=5

p[2]= 4,25 > 0

Algorytm Bresenhama dla okręgów - przykład

Krok 3

Kolejny piksel (x[3],y[4])

STOP

5

4

3

2

1

0

-1

-2

-3

-4

-5

-5 -4 -3 -2 -1 0 1 2 3 4 5

Krzywe

Interpolacja – modelowanie krzywej

Wielomiany Bernsteina

Krzywe Béziera, sklejane

Interpolacja

metoda numeryczna polegająca na wyznaczaniu w danym

przedziale tzw. funkcji interpolacyjnej, która przyjmuje

w nim z góry zadane wartości w ustalonych punktach -

węzłach

Krzywe

Modelowanie krzywej

Możliwość wykreślenia dowolnej krzywej jest niezbędna w grafice

komputerowej

Przed erą komputerów krzywe tworzono „analogowo” wykorzystując cienką

sprężystą listwę, podwieszając ją i obciążając w odpowiednio dobranych

miejscach

Cyfrowo krzywą można uznać za wykres pewnej funkcji

Krzywe

Krzywe

Modelowanie krzywej

Wykorzystanie funkcji bezpośrednich typu y=f(x) pozwoli na dokładne

matematyczne zapisanie krzywej ale ma jedną poważną wadę – pozwala na

wyznaczenie jednej wartości y dla każdego x uniemożliwiając tworzenie pętli

(czy chociażby okręgu)

Matematyczny zapis dowolnych krzywych został wprowadzony do grafiki

komputerowej dzięki krzywym kreślonym z wykorzystaniem funkcji

parametrycznych

Krzywe

Modelowanie krzywej – funkcje parametryczne

Ogólnie funkcje parametryczną można zapisać jako:

Gdzie X(t) i Y(t) są funkcjami parametru t. Dla konkretnej wartości t zwracając

wartości x oraz y

Parametr t jest często określany mianem czasu co ma odpowiadać

przemieszczaniu się punktu (podróżnika) ze stałą prędkością wzdłuż krzywej.

Wraz ze wzrostem czasu wzrasta liniowo przebyta droga.

tYtXtQ ,

Krzywe

Modelowanie krzywej – funkcje parametryczne

Np. dla zestawu funkcji

i t w zakresie 0 < t < 2

Uzyska krzywa będzie okręgiem

ttY

ttX

sin)(

cos)(

Modelowanie krzywej nieparametrycznej

Konieczność zapisania krzywej lub jej przybliżenia za pomocą funkcji

matematycznej

Krzywą „spróbkowaną” np. w czasie skanowania obrazu można przybliżać

wykorzystując interpolację.

Interpolację stosujemy, gdy nie znamy postaci analitycznej f(x) lub, gdy

analityczna postać funkcji f(x) jest znana, ale obliczanie jej wartości jest zbyt

pracochłonne.

Krzywe

Modelowanie krzywej - Interpolacja

Zadanie sprowadza się do wyznaczenia przybliżenia funkcji f(x) uzyskującego

dla skończonej ilości n punktów tzw węzłów interpolacji wartości zgodne

z położeniem tych punktów.

W celu wyznaczenia przybliżonych wartości funkcji f(x) konstruujemy tzw.

funkcję interpolacyjną F(x) określonej klasy, (np. wielomiany algebraiczne,

wielomiany trygonometryczne, funkcje sklejane (splajny) itp.) dostatecznie

prostą do obliczeń, która w węzłach interpolacji przyjmie te same wartości co

funkcja f(x)

Zadanie wykonalne gdy F(x) jest wielomianem stopnia n-1

Krzywe

Modelowanie krzywej - Interpolacja

Wzór interpolacyjny Lagrange’a dla n+1 węzłów interpolacji (wersja cyfrowa)

n

j

jii

ijj

j

nn

xxxx

yxxW

0

0

1

)()(

)()(

)())(()( 101 nn xxxxxxx

gdzie

Tylko jedno rozwiązanie

Krzywe

Modelowanie krzywej - Interpolacja

3424144

3

4323133

1

4232122

4

4131211

3

4321)(3

xx

xxxxxxxW

Przykład

Znaleźć wielomian interpolacyjny Lagrange’a, dla punktów

(1,3),(2,4),(3,-1),(4,3).

n

j

jii

ijj

j

nn

xxxx

yxxW

0

0

1

)()(

)()(

Krzywe

Modelowanie krzywej - Interpolacja

Dla niewielkiej ilości punktów (kilka) krzywa interpolacyjna jest zgodna

z oczekiwaniami.

Przy większej ilości stopień wielomianu

wzrasta a krzywa wykazuje tendencję

do oscylacji

Lepsze wyniki daje krzywa sklejana/składana

Krzywe

Krzywa Béziera

Jest krzywą parametryczną. Może być jedną z krzywych składanych

Zaproponowana w latach 60-tych ubiegłego wieku przez Pierre Etienne

Béziera. Krzywe te miały pomóc przy projektowaniu karoserii samochodów dla

koncernu Renault, dla którego Bézier pracował.

Równolegle, podobne rozwiązanie zaproponował Paul de Casteljau, pracujący

dla konkurencyjnej firmy Citroën. Jednak Renault zezwolił na upublicznienie

wyników o kilka lat wcześniej…

Krzywe

Krzywa Béziera

Krzywa Béziera stopnia n jest definiowana przez n +1 punktów P0, P1, … Pn

w bazie wielomianów Bernsteina.

Jest to krzywa gładka, której kształt zależy od położenia punktów kontrolnych.

Krzywa Béziera 3 stopnia

Pierwszy i ostatni z punktów są końcami

krzywej. Pozostałe punkty to punkty

kontrolne

Krzywe

Krzywa Béziera – wielomiany Bernsteina

Wielomiany bazowe Bernsteina opisane są wzorem

1,0

,00

..01

t

niidla

nidlatttB

inin

in

i

Krzywe

Krzywa Béziera

Wzór analityczny na krzywą Béziera n-tego stopnia

n

i

n

ii tBPtQ0

)()(

Krzywe

Krzywa Béziera

33

3

23

2

23

1

33

0

)(

13)(

13)(

1)(

ttB

tttB

tttB

ttB

Wzór analityczny na krzywą Béziera 3-go stopnia

1,0

...1)(

...1)(

13131)(

3

0

3

0

3

4

2

2

2

1

3

0

t

tYtY

tXtX

tPttPttPtPtQ

Krzywe

Obliczanie dość złożone (potęgowanie, mnożenie…)

Krzywa Béziera

Krzywe Béziera wykorzystywane w programach graficznych są 3-go stopnia

Krzywe

Krzywa Béziera - Właściwości

P0 i P1 są końcami krzywej

Odcinki P0 , P1 i P2 , P3 są styczne do krzywej

Krzywa Béziera zawiera się całkowicie

w wielokącie wypukłym, którego wierzchołkami są

wierzchołki łamanej

Odwrócenie kolejności punktów nie zmienia

kształtu krzywej P0

P1 P2

P3

Wada: Krzywą Béziera nie można zbudować krzywej stożkowej

Krzywe

Krzywa Béziera - rysowanie

Algorytm de Casteljau

Bazuje na prostym podziale odcinków.

Wyznacza zbiór punktów leżących na krzywej Béziera na podstawie

wierzchołków łamanej ją opisującej.

Gęstość wyznaczonych punktów jest zależna od gęstości podziału przedziału

parametru t <0,1>

Np. dla gęstości 0,01 wyznaczonych zostanie 100 punktów rozmieszczonych

na krzywej.

Krzywe

Krzywe

Krzywa Béziera - Algorytm de Casteljau

Punkty na krzywej można wyznaczyć dzieląc rekurencyjnie przez tą samą

wartość odcinki łamanej, opisującej krzywą

Możliwość ta wynika z właściwości wielomianów bazowych Bernsteina

ttBtBttB n

i

n

i

n

i

1

1

11

Krzywe

Krzywa Béziera - Algorytm de Casteljau

nn PPPP ,,...,, 110

Przebieg

Dla zbioru n+1 wierzchołków łamanej opisującej krzywą:

każdy odcinek łamanej jest dzielony w stosunku , zapisywany jest nowy

wierzchołek

Powstaje nowy zbiór n wierzchołków

Proces jest powtarzany dla nowego zbioru, aż do pozostania tylko jednego

wierzchołka – punkt ten leży na krzywej Béziera

Algorytm wykonywany jest ponownie, dla kolejnej wartości z przedziału t

tt 1:

Krzywe

Krzywa Béziera - Algorytm de Casteljau

P0

P1 P2

P3

Dla krzywej 3 stopnia

t = 0,5

Krzywe

Krzywa Béziera - Algorytm de Casteljau

P0

P1

P2

Dla krzywej 3 stopnia

t = 0,5

Przebieg 1

Krzywe

Krzywa Béziera - Algorytm de Casteljau

P0 P1

Dla krzywej 3 stopnia

t = 0,5

Przebieg 2

Krzywe

Krzywa Béziera - Algorytm de Casteljau

P0

Dla krzywej 3 stopnia

t = 0,5

Przebieg 3

Krzywe

Krzywa Béziera - Algorytm de Casteljau

P0

P1 P2

P3

Dla krzywej 3 stopnia

t = 0,25

Krzywe

Krzywa Béziera - Algorytm de Casteljau

P0

P1

P2

Dla krzywej 3 stopnia

t = 0,25

Przebieg 1

Krzywe

Krzywa Béziera - Algorytm de Casteljau

P0

P1 Dla krzywej 3 stopnia

t = 0,25

Przebieg 2

Krzywe

Krzywa Béziera - Algorytm de Casteljau

Dla krzywej 3 stopnia

t = 0,25

Przebieg 3 P0

Krzywe

Krzywa Béziera - składanie

W praktyce rzadko kiedy używa się krzywych Béziera wysokiego

stopnia.

Każdy punkt krzywej Béziera zależy od wszystkich punktów kontrolnych

– kontrolowanie kształtu krzywej wysokiego stopnia byłoby trudne

Rozwiązaniem jest łączenie ze sobą odcinków opisanych krzywymi

niskiego stopnia (najczęściej 3)

Krzywe

Krzywa Béziera - składanie

nn PPPP ,,...,, 110

Połączenie dwóch krzywych opisanych łamanymi oraz

następuje gdy

Łączyć można dowolną ilość krzywych, także w obszary zamknięte

nn RRRR ,,...,, 110 0RPn

Krzywe

Krzywa Béziera - składanie

Istnieją trzy typy połączeń krzywych Béziera

- Połączenie ostre (bez zachowania ciągłości)

Krzywe

Krzywa Béziera - składanie

Istnieją trzy typy połączeń krzywych Béziera

- Połączenie gładkie (z zachowaniem ciągłości geometrycznej)

R0 R1

P2

P3

Punkty leżą na jednej prostej 1032 ,,, RRPP

Krzywe

Krzywa Béziera - składanie

1032 ,,, RRPP

Istnieją trzy typy połączeń krzywych Béziera

- Połączenie symetryczne (z zachowaniem ciągłości parametrycznej)

R0 R1

P2

P3

Punkty leżą na jednej prostej

Odcinki oraz mają jednakową długość 32 , PP10 , RR

Krzywe

Krzywa Béziera - wady

Nie można za ich pomocą wyznaczyć krzywych stożkowych

Poddanie punktów kontrolnych krzywej rzutowaniu perspektywicznemu

spowoduje zmianę kształtu krzywej

Krzywe

Wymierna Krzywa Béziera

Jest zdefiniowana wzorem

Gdzie wi jest wagą i-tego punktu Béziera

n

i

n

ii

n

i

n

iii

tBw

tBPw

tQ

0

0

)(

)(

)(

Krzywe

Wymierna Krzywa Béziera

1, 20 ww

Jedna z głównych zalet to możliwość tworzenia krzywych stożkowych

Np. Tworząc krzywą 2 stopnia i ustalając wagi

Można uzyskać

- Łuk hiperboli dla

- Łuk paraboli dla

- krótszy łuk okręgu/elipsy dla

- dłuższy łuk okręgu/elipsy dla

11 w11 w

10 1 w

01 1 w

0w

1w

2w

2

21 w

2

21 w

Podstawowe operacje rastrowe

Grubość linii

Grubość linii tworzącej rysunek

może być większa od 1 piksela

Konieczne jest wyznaczenie

zbioru pikseli

składających się na linię

Wyznaczenie pikseli dla linii poziomych

i pionowych nie stanowi problemu

Podstawowe operacje rastrowe

Grubość linii

Wyznaczenie pikseli dla linii ukośnych

wiąże się z niepewnością, które piksele

powinny zawierać się w linii

Jeśli wybrane zostaną tylko piksele

zawierające się w obszarze, nastąpi

optyczne „wyszczuplenie” linii.

Najczęściej kompensacja przez dodanie

pikseli bliskich wybranej grubości linii

– fizyczne pogrubienie linii

Linia o nachyleniu od 0 do 45 st. – wyznaczanie pikseli w osi y

Linia o nachyleniu od 45 do 90 st. – wyznaczanie pikseli w osi x

Podstawowe operacje rastrowe

Grubość linii

Ustalanie pikseli dla linii grubej nie będącej prostym odcinkiem wiąże się

z przechodzeniem miedzy osią x i y – bardziej złożony algorytm

Prostszym rozwiązaniem jest

zastępowanie każdego

piksela linii obszarem

o określonym kształcie

– np. prostokąt

Podstawowe operacje rastrowe

Rysowanie linii - Aliasing

Specyfika budowy rastra powoduje różne wyświetlanie linii w zależności od

jej kąta pochylenia.

Głównym efektem jest powstawanie „schodkowości” linii innych niż

wielokrotność 90° - Aliasing.

Jej widoczność zależy od rozdzielczości i wielkości ekranu.

Nie istnieje metoda eliminacji aliasingu

Schodkowość jest największa dla

linii pod kątem 45° (Schodek co

piksel) Powoduje to optyczne

zmniejszenie grubości linii

Podstawowe operacje rastrowe

Rysowanie linii - Antyaliasing

Aliasing można optycznie zamaskować rozmywając krawędzie linii

Metoda ta nazywa się Antyaliasing

Zamiast ostrego rozgraniczenia miedzy kolorem linii/krawędzi i kolorem tła

wprowadza się kolory pośrednie pomiędzy tymi dwoma

Dla linii 1 pikselowej generowanie linii

zostało zmodyfikowane

Jeżeli rzeczywista linia leży odpowiednio

daleko od najbliższego piksela, wybierane

są piksele po obu stronach linii, każdy

z intensywnością koloru zależną od

odległości do linii rzeczywistej

Suma intensywności jest równa

intensywności koloru linii

Podstawowe operacje rastrowe

Rysowanie linii - Antyaliasing

W przypadku grubszych linii i innych obiektów antyaliasing stosowany jest

do ich krawędzi.

Podstawowe operacje rastrowe

Rysowanie linii - Antyaliasing

Kolory pośrednie dla krawędzi zależą od koloru tła. Zastosowanie prostego

antyaliasingu dla krawędzi obiektu przemieszczanego (animowanego)

może spowodować efekt „Halo” w chwili przesunięcia obiektu na tło

o innym kolorze

Efektu Halo można uniknąć stosując antyaliasing wykorzystujący stopnie

przeźroczystości zamiast poziomów jasności

Podstawowe operacje rastrowe

Wypełnianie obszarów

Podstawowa cecha: Wypełnić możemy obszar zamknięty (czyli jaki?)

Obszary zamknięte mogą być definiowane (ograniczane)

rastrowo (zbiór pikseli tworzących krawędź)

lub wektorowo (zbiór odcinków o wspólnych wierzchołkach)

Podstawowe operacje rastrowe

Wypełnianie obszarów

Obszary zamknięte rastrowe (zbiór pikseli)

Specyfika tworzenia linii rastrowych powoduje podział na dwa rodzaje

obszarów zamkniętych

Czterospójny

Obszar jest cztero-spójny (ang. four-way connected region), jeśli zawarte

w nim piksele posiadają ten sam kolor oraz do każdego z nich można

dotrzeć przechodząc po pikselach tego obszaru w 4 podstawowych

kierunkach.

A wypełnienie gradientowe?

Podstawowe operacje rastrowe

Wypełnianie obszarów

Obszary zamknięte rastrowe (zbiór pikseli tworzących krawędź)

Specyfika tworzenia linii rastrowych powoduje podział na dwa rodzaje

obszarów zamkniętych

Ośmiospójny

Obszar jest ośmio-spójny (ang. eight-way connected region), jeśli zawarte

w nim piksele posiadają ten sam kolor oraz do każdego z nich można

dotrzeć przechodząc po pikselach tego obszaru w 8 podstawowych

kierunkach.

Podstawowe operacje rastrowe

Wypełnianie obszarów

Obszary zamknięte rastrowe (zbiór pikseli tworzących krawędź)

Analogicznie krawędź rastrowa może być cztero lub ośmiospójna

Podstawowe operacje rastrowe

Wypełnianie obszarów

Sposób wypełnienia – wypełnienie konturowe (boundary fill)

•Obszar posiada jednokolorowy kontur

•Wnętrze obszaru jest wypełnione dowolnymi kolorami

– innymi niż kolor konturu

Podstawowe operacje rastrowe

Wypełnianie obszarów

Sposób wypełnienia – wypełnienie powodziowe/pożar prerii (flood fill)

• Obszar jest wypełniony jednym kolorem

• Otoczenie obszaru wielokolorowe (kolory inne niż kolor obszaru)

Podstawowe operacje rastrowe

Wypełnianie obszarów

Metoda wypełniania pożar prerii

1. Wybierany jest piksel startowy (wewnątrz obszaru wypełnienia)

i umieszczany na stosie.

2. Dla wszystkich pikseli spójnych do danego piksela (cztero lub ośmio)

testowany jest warunek

- piksel jest tego samego koloru co startowy (w. powodziowe)

lub - piksel jest innego koloru niż kolor krawędzi (w. krawędziowe)

3. Wszystkie piksele spełniające warunek, oznaczane są jako nowe piksele

startowe (umieszczane na stosie)

4. Obecny piksel kolorowany jest nowym kolorem oraz usuwany ze stosu

5. Dla wszystkich pikseli na stosie wykonywane są punkty 2 do 4, tak długo

jak stos zawiera jakieś piksele.

Podstawowe operacje rastrowe

Wypełnianie obszarów

Metoda wypełniania pożar prerii – algorytm czterospójny

Wypełnione: 0 px

Stos: 1 px

Testowane: 4 px

Podstawowe operacje rastrowe

Wypełnianie obszarów

Metoda wypełniania pożar prerii – algorytm czterospójny

Wypełnione: 1 px

Stos: 4 px

Testowane: 16 px

Podstawowe operacje rastrowe

Wypełnianie obszarów

Metoda wypełniania pożar prerii – algorytm czterospójny

Wypełnione: 5 px

Stos: 7 px

Testowane: 49 px !! (w tym 11 nowych…)

i następne kroki…

Podstawowe operacje rastrowe

Wypełnianie obszarów

Metoda wypełniania pożar prerii – algorytm ośmiospójny krawędziowy

Wypełnione: 0 px

Stos: 1 px

Testowane: 8 px

Podstawowe operacje rastrowe

Wypełnianie obszarów

Metoda wypełniania pożar prerii – algorytm ośmiospójny krawędziowy

Wypełnione: 1 px

Stos: 8 px

Testowane: 72 px !!

Podstawowe operacje rastrowe

Wypełnianie obszarów

Metoda wypełniania pożar prerii – algorytm ośmiospójny krawędziowy

Wypełnione: 9 px

Stos: 6 px

Testowane: 54 px

Wypełnianie ośmiospójne „przecieka” przez krawędź ośmiospójną

Podstawowe operacje rastrowe

Wypełnianie obszarów

Metoda wypełniania pożar prerii

Główna wada:

Ogromna nadmiarowość testów kolorów pikseli

- Ten sam piksel może być sprawdzany nawet ośmiokrotnie

Podstawowe operacje rastrowe

Wypełnianie obszarów

Metoda wypełniania – algorytm Smitha

Algorytm ten wykorzystuje pojęcie segmentów:

Ciągów pikseli mających tą samą cechę

Segment jest opisywany 3 wartościami:

współrzędne x, y początku, oraz długość

segmentu

1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9

(2,2,6)

(3,4,3)

(8,6,2)

(3,9,1)

Podstawowe operacje rastrowe

Wypełnianie obszarów

Metoda wypełniania – algorytm Smitha

Etapy

1. Wybierany jest punkt wewnątrz obszaru

2. Dla punktu wyznaczany jest maksymalny

segment, kolorowany i zapisany na stosie

Podstawowe operacje rastrowe

Wypełnianie obszarów

Metoda wypełniania – algorytm Smitha

Etapy

3. Dla pierwszego piksela w segmencie

sprawdzane są piksele poniżej i powyżej

4. Jeżeli sprawdzony piksel należy do

obszaru, wyznaczany jest segment, do

którego należy, kolorowany i zapisany na

stosie

Podstawowe operacje rastrowe

Wypełnianie obszarów

Metoda wypełniania – algorytm Smitha

Etapy

5. Algorytm przesuwa się wzdłuż segmentu

bazowego o odległość równą

wyznaczonemu przyległemu segmentowi

+ 1. Testowany jest kolejny przyległy

piksel. Jeżeli sprawdzony piksel należy

do obszaru, wykonywane są zadania

z punktu 4

Podstawowe operacje rastrowe

Wypełnianie obszarów

Metoda wypełniania – algorytm Smitha

Etapy

5. Algorytm przesuwa się wzdłuż segmentu

bazowego o odległość równą

wyznaczonemu przyległemu segmentowi

+ 1. Testowany jest kolejny przyległy

piksel. Jeżeli sprawdzony piksel należy

do obszaru, wykonywane są zadania

z punktu 4

0 + 1 = 1

Podstawowe operacje rastrowe

Wypełnianie obszarów

Metoda wypełniania – algorytm Smitha

Etapy

5. Algorytm przesuwa się wzdłuż segmentu

bazowego o odległość równą

wyznaczonemu przyległemu segmentowi

+ 1. (Jeżeli wykroczono poza koniec

segmentu bazowego, algorytm kończy

sprawdzanie po tej stronie.) Testowany

jest kolejny przyległy piksel. Jeżeli

sprawdzony piksel należy do obszaru,

wykonywane są zadania z punktu 4

0 + 1 = 1

Podstawowe operacje rastrowe

Wypełnianie obszarów

Metoda wypełniania – algorytm Smitha

Etapy

5. Algorytm przesuwa się wzdłuż segmentu

bazowego o odległość równą

wyznaczonemu przyległemu segmentowi

+ 1. Testowany jest kolejny przyległy

piksel. Jeżeli sprawdzony piksel należy

do obszaru, wykonywane są zadania

z punktu 4

Podstawowe operacje rastrowe

Wypełnianie obszarów

Metoda wypełniania – algorytm Smitha

Jeżeli wykroczono poza koniec

segmentu bazowego po obu stronach,

bazowy segment jest usuwany ze

stosu. Algorytm kontynuuje działanie od

p.2 z kolejnym segmentem ze stosu

Podstawowe operacje rastrowe

Wypełnianie obszarów

Metoda wypełniania wielokątów

Wielokąt jest opisywany za pomocą zbioru odcinków

o początkach i końcach określanych współrzędnymi

pikselowymi

Dla skrócenia zapisu możliwe jest tworzenie

„łamanej” składającej się z kilku odcinków.

Zapisywana jest za pomocą ciągu liczb

gdzie 1 jest ilością odcinków a następne

parami współrzędnych tworzących łamaną

(bez powtórzeń wierzchołków)

Np. 4, 1,2, 4,4, 5,8, 17,3

Podstawowe operacje rastrowe

Wypełnianie obszarów

Metoda wypełniania wielokątów – skanowanie liniami poziomymi

Metoda ta polega na szukaniu przecięć odcinków wielokąta

z poziomymi liniami odpowiadającymi kolejnym rzędom

pikseli.

Algorytm zakłada, że linia pozioma przetnie

wielokąt parzystą ilość razy.

Dla każdej pary współrzędnych przecięć

(zaokrąglonych do pikseli) zamalowywany

jest odcinek pomiędzy nimi.

Podstawowe operacje rastrowe

Wypełnianie obszarów

Metoda wypełniania wielokątów – skanowanie liniami poziomymi

Najprostsza wersja algorytmu skanowania liniami

poziomymi miałaby postać:

1. wyznacz ymin i ymax z listy krawędzi wielokąta

2. Dla y = ymin; ymax; y++ wykonuj kroki 3-5

3. Wyznacz X - zbiór współrzędnych x punktów przecięcia

krawędzi z listy z linią skanującą y

4. Posortuj rosnąco zbiór X

5. Dla kolejnych par punktów ze zbioru X narysuj odcinki na

wysokości y.

6. Koniec

Ale…

Podstawowe operacje rastrowe

Wypełnianie obszarów

Metoda wypełniania wielokątów – skanowanie liniami poziomymi

Przypadki szczególne

Wielokąt posiada odcinek poziomy - nieokreślona ilość

przecięć z linią skanującą spowoduje błędne działanie

algorytmu.

Rozwiązanie: Eliminacja odcinków poziomych (ta sama

wartość y początku i końca) z listy.

->

Efekt uboczny: wypełnienie nie obejmuje krawędzi poziomej

Podstawowe operacje rastrowe

Wypełnianie obszarów

Metoda wypełniania wielokątów – skanowanie liniami poziomymi

Przypadki szczególne

Natrafienie linii skanującej na końce odcinków

Może (ale nie musi) spowodować błędne działanie algorytmu

Podstawowe operacje rastrowe

Wypełnianie obszarów

Metoda wypełniania wielokątów – skanowanie liniami poziomymi

Przypadki szczególne

Natrafienie linii skanującej na końce odcinków

Trzy możliwości:

- oba odcinki są powyżej linii skanującej

- oba odcinki są poniżej linii skanującej

- jeden odcinek jest powyżej

linii skanującej a drugi poniżej

Podstawowe operacje rastrowe

Wypełnianie obszarów

Metoda wypełniania wielokątów – skanowanie liniami poziomymi

Przypadki szczególne

Natrafienie linii skanującej na końce odcinków

-jeden odcinek jest powyżej

linii skanującej a drugi poniżej

Efekt: „dodatkowy” odcinek lub

nieparzysta ilość współrzędnych

odcinków

Podstawowe operacje rastrowe

Wypełnianie obszarów

Metoda wypełniania wielokątów – skanowanie liniami poziomymi

Przypadki szczególne

Natrafienie linii skanującej na końce odcinków

-jeden odcinek jest powyżej

linii skanującej a drugi poniżej

Rozwiązanie:

Linie skanujące przemieszczają się

w jednym kierunku. Eliminowanie

z listy odcinków stykających się z linią,

takich które leżą powyżej linii.

Efekt uboczny 1: optymalizacja algorytmu

Efekt uboczny 2: możliwa utrata niektórych pikseli wypełnienia

Podstawowe operacje rastrowe

Wypełnianie obszarów

Metoda wypełniania wielokątów – skanowanie liniami poziomymi

Obliczanie przecięcia linii z odcinkiem

Kolejne wykorzystanie algorytmu przyrostowego:

- odcinek ma współrzędne (x1,y1, x2,y2)

- współrzędna ys linii skanującej wzrasta o 1

- Jeżeli ys=y1 to współrzędna xp przecięcia = x1

Dla każdej kolejnej wartości ys aż do ys=y2, xp przecięcia można

wyliczyć ze wzoru: xp(y+1)=xp(y)+dx

gdzie dx=(x2-x1)/(y2-y1)

Podstawowe operacje rastrowe

Obcinanie

Obcinanie ma miejsce w sytuacji gdy obraz nie mieści się

na ekranie / w oknie wyświetlania.

Sensowną i często niezbędną praktyką jest usunięcie elementów

obrazu leżących poza obszarem wyświetlania

Obcięcie obrazu rastrowego jest sprawą trywialną. Sytuacja

komplikuje się gdy obraz zawiera obiekty zdefiniowane wektorowo

a algorytm ma wybrać tylko te obiekty i ich części, które znajdują się

w oknie wyświetlania

Podstawowe operacje rastrowe

Obcinanie

Jednym z najbardziej rozpowszechnionych algorytmów obcinania

odcinków jest algorytm Cohena-Sutherlanda.

Bazuje on na podziale obrazu na 9 części i przypisaniu im

odpowiednich kodów bitowych

Algorytm obcinania odcinków Cohena-Sutherlanda

1001 1000 1010

0001 0000 0010

0101 0100 0110

Okno wyświetlania

/ pole obcinania

Podstawowe operacje rastrowe

Obcinanie

Kody poszczególnych pól

dobrane zostały w określony

sposób

Dwie pierwsze cyfry definiują

wiersz (10xx, 00xx, 01xx)

dwie kolejne kolumnę pola

(xx01, xx00, xx10)

Końce odcinków przyjmują kody

pól, w których leżą.

Algorytm obcinania odcinków Cohena-Sutherlanda

1001 1000 1010

0001 0000 0010

0101 0100 0110

xxx1

1xxx

Podstawowe operacje rastrowe

Obcinanie

Odcinki mogą być usytuowane różnie

względem pola obcinania

A. Odcinek leży po jednej stronie poza

obszarem obcinania.

B. Odcinek leży „ukośnie” poza

obszarem obcinania

C. Odcinek leży jednym końcem

w obszarze obcinania

D. Odcinek przechodzi przez obszar

obcinania

E. Odcinek zawiera się w obszarze

obcinania

Algorytm obcinania odcinków Cohena-Sutherlanda

1001 1000 1010

0001 0000 0010

0101 0100 0110

A

B

C

D

E

Podstawowe operacje rastrowe

Obcinanie

Procedura wykonuje dwa przebiegi,

w jednym przebiegu:

Korzystając z prostych testów można

rozpoznać odcinki typu E

- Kod obu końców odcinka = 0000

Oraz odcinki typu A

- Bitowy iloczyn logiczny kodów obu

końców odcinka będzie > 0

Algorytm obcinania odcinków Cohena-Sutherlanda

1001 1000 1010

0001 0000 0010

0101 0100 0110

A

B

C

D

E

A 1001 1010 = 1000

B 0001 1000 = 0000

C 0000 0010 = 0000

itd..

Oba rodzaje odcinków można wyeliminować z dalszego sprawdzania

Podstawowe operacje rastrowe

Obcinanie

Algorytm obcinania odcinków Cohena-Sutherlanda

1001 1000 1010

0001 0000 0010

0101 0100 0110

B

C

D

Pozostałe odcinki musza być poddane

procedurze obcinania.

1. Wybierany jest punkt końca o kodzie

różnym od 0000

Podstawowe operacje rastrowe

Obcinanie

Algorytm obcinania odcinków Cohena-Sutherlanda

1001 1000 1010

0001 0000 0010

0101 0100 0110

B

C

D

Pozostałe odcinki musza być poddane

procedurze obcinania.

1. Wybierany jest punkt końca o kodzie

różnym od 0000

2. W zależności od kodu punktu

wybierana jest linia obcinania (0010).

xk

Podstawowe operacje rastrowe

Obcinanie

Algorytm obcinania odcinków Cohena-Sutherlanda

Pozostałe odcinki musza być poddane

procedurze obcinania.

1. Wybierany jest punkt końca o kodzie

różnym od 0000

2. W zależności od kodu punktu

wybierana jest linia obcinania (0010)

3. Znajdowany jest punkt przecięcia

odcinka z linią

xk

(x2,y2)

(x1,y1)

k

k

xx

xx

xxyyyy

'

'12

1121

Podstawowe operacje rastrowe

Obcinanie

Algorytm obcinania odcinków Cohena-Sutherlanda

1001 1000 1010

0001 0000 0010

0101 0100 0110

B

D

Pozostałe odcinki musza być poddane

procedurze obcinania.

1. Wybierany jest punkt końca o kodzie

różnym od 0000

2. W zależności od kodu punktu

wybierana jest linia obcinania (0010)

3. Znajdowany jest punkt przecięcia

odcinka z linią

4. Nowy punkt przyjmowany jest za

koniec odcinka, obliczany jest nowy

kod tego końca.

xk

C

Podstawowe operacje rastrowe

Obcinanie

Algorytm obcinania odcinków Cohena-Sutherlanda

1001 1000 1010

0001 0000 0010

0101 0100 0110

B

D

Pozostałe odcinki musza być poddane

procedurze obcinania.

1. Wybierany jest punkt końca o kodzie

różnym od 0000

2. W zależności od kodu punktu

wybierana jest linia obcinania (0010)

3. Znajdowany jest punkt przecięcia

odcinka z linią

4. Nowy punkt przyjmowany jest za

koniec odcinka, obliczany jest nowy

kod tego końca.

Analogicznie dla wszystkich pozostałych odcinków

C

Podstawowe operacje rastrowe

Obcinanie

Algorytm obcinania odcinków Cohena-Sutherlanda

1001 1000 1010

0001 0000 0010

0101 0100 0110

D

Drugi przebieg eliminuje w początkowej

fazie odcinki typu B i C

Dla procedury obcinania pozostają odcinki

typu D.

Podstawowe operacje rastrowe

Obcinanie

Algorytm obcinania wieloboków Sutherlanda-Hodgmana

W przypadku wieloboków mamy do czynienia z listą odcinków

tworzących zamknięty obszar (często wypełniony).

Obcięcie wiąże się więc nie tylko z usunięciem bądź skróceniem

odpowiednich odcinków ale również z uzupełnieniem krawędzi

wieloboku aby nadal tworzył obszar zamknięty.

Algorytm Sutherlanda-Hodgmana wykorzystuje zapis wieloboku

w postaci listy punktów – wierzchołków wieloboku.

Przetwarza on zbiór P(p1,p2,…,pn) w zbiór Q(q1,q2,…,qm) gdzie n nie

musi być równe m

Podstawowe operacje rastrowe

Obcinanie

Algorytm obcinania wieloboków Sutherlanda-Hodgmana

Wielobok może być w jednej z 4 pozycji w stosunku do obszaru

obcinania. Pierwsze 3 pozycje nie stanowią problemu.

Podstawowe operacje rastrowe

Obcinanie

Algorytm obcinania wieloboków Sutherlanda-Hodgmana

Kłopotliwa jest sytuacja 4 gdy wielokąt

zawiera się częściowo o obszarze obcinania.

Algorytm wykonuje 4 przebiegi po

wierzchołkach, zawsze w tą samą stronę.

Za każdym przebiegiem brana jest pod

uwagę jedna z linii obcinania.

w1

w2

w3

Podstawowe operacje rastrowe

Obcinanie

Algorytm obcinania wieloboków Sutherlanda-Hodgmana

Wierzchołek znajdujący się po wewnętrznej stronie linii obcinania jest

przepisywany do nowego zbioru.

Wierzchołek znajdujący się po zewnętrznej stronie jest usuwany.

Testowane jest również to czy poprzedni wierzchołek znajduje się po

tej samej stronie linii. Jeżeli nie, wyliczany jest punkt przecięcia

odcinka z linią i dodawany do zbioru

Nw1

w3 w4

w2

Podstawowe operacje rastrowe

Obcinanie

Algorytm obcinania wieloboków Sutherlanda-Hodgmana

Cztery przebiegi algorytmu są wykonywane dla czterech linii

obcinania

Podstawowe operacje rastrowe

Obcinanie

Algorytm obcinania wieloboków Sutherlanda-Hodgmana

Szczególnym przypadkiem obcinania jest sytuacja gdy obcinany

obiekt jest wielokątem wklęsłym. W takim przypadku algorytm może

wytworzyć zdegenerowany obiekt pochodny, zawierający kilka

obszarów połączonych liniami.