Co to jest grafika komputerowa, przetwarzanie obrazu i rozpoznawanie obrazu?
Grafika komputerowa: tworzenie obrazów na podst. informacji opisowej:
- szerokie zastosowania
- różna złożoność programów i nakładów obliczeniowych koniecznych do utworzenia obrazu
- wykresy funkcji
- kompozycje obrazów
- sceny w symulatorach
Przetwarzanie obrazu: wszystkie operacje, w których dane wejściowe i wyjściowe mają postać obrazów:
- usuwanie zakłóceń, poprawa jakości obrazu
- filtrowanie obrazu
- kompresja danych obrazowych
- redukcja obrazu do konturów
- redukcja obrazu konturowego do figur kreskowych
- tworzenie przekrojów obrazu
Rozpoznawanie obrazu: tworzenie opisu obrazu, zakwalifikowanie obrazu do pewnej szczególnej klasy
- odwrotność grafiki komputerowej
- w wyniku analizy obrazu powstaje opis matematyczny, ciąg symboli lub graf
- dalsze przetwarzanie danych opisowych pozwala na wyciąganie wniosków analitycznych
Omówić klasy danych obrazowych
4 klasy danych obrazowych:
KLASA I: Obrazy monochromatyczne i kolorowe.
Dokładnie odzwierciedlają rzeczywistość. Reprezentowane jako macierze pamięci, gdzie komórkami są pixele. Możliwe są różne struktury komórek w zależności od głębi barw.
KLASA II: Obrazy binarne:
Obrazy monochromatyczne, czarno-białe(tekst). Element obrazu opisywany przez 1bit. Reprezentowane jako macierze pamięci, lub mapy bitowe, brak standardowego sposobu grupowania bitów w bajty, a bajtów w słowa w pamięci systemu graficznego.
KLASA III: Linie proste i krzywe:
Na przykład wykresy, kontury obrazów, krzywe nieregularne.
Reprezentacja danych: a) współrzędne X i Y kolejnych punktów b) przyrosty ΔX i ΔY c) kody łańcuchowe, w których wektor łączący dwa kolejne punkty jest określony jednym symbolem ze skończonego zbioru symboli d) różnicowy kod łańcuchowy – gdzie reprezentacją każdego punktu jest różnicą pomiędzy dwoma kolejnymi kodami. Zbiór symboli jest również 8-elementowy {0, ±1, ±2, ±3, 4}. Lecz prawdopodobieństwo ich pojawienia się nie jest takie same. Można zatem użyć kodu o zmiennej długości.
KLASA IV: Punkty i wieloboki:
Klasa najczęściej wykorzystywana w grafice komputerowej. Obraz reprezentowany jest przez współrzędne punktów i funkcje. Punkty charakterystyczne połączone są liniami prostymi lub krzywymi opisanymi przez funkcje. Różnorodność funkcji i metod opisujących kształt generowanych obiektów.
Napisać program wyznaczający histogram rozkładu jasności obrazku kolorowego o 24-bitowej strukturze piksela
struct pixel {
int R;
int G;
int B;
}
int main()
{
pixel OBRAZ[K+1][L+1];
// Tutaj pobieramy obraz gdzies z zewnatrz
int histogramR[256];
int histogramG[256];
int histogramB[256];
for(int i=1;i<=L;i++)
{
for(int j=1;j<=K;j++)
{
histogramR[OBRAZ[i][j].R]++;
histogramG[OBRAZ[i][j].G]++;
histogramB[OBRAZ[i][j].B]++;
}
}
int histogramL[256];
for(int i=1; i<=K;i++)
for(int j=1;j<=L;j++)
histogramL[((max(OBRAZ[i][j].R, OBRAZ[i][j].G, OBRAZ[i][j].B)
+min(OBRAZ[i][j].R, OBRAZ[i][j].G, OBRAZ[i][j].B))/2]++;
}
Metoda poprawy jakości obrazu poprzez modelowanie histogramu
Modelowanie histogramu obejmuje procesy: 1. rozciągania histogramu; 2. wyrównywania histogramu; 3. normalizacji histogramu.
Rozciąganie histogramu: Operacji rozciągania histogramu dokonuje się wówczas, gdy nie pokrywa on całego zakresu poziomów jasności - na histogramie nie występują bardzo ciemne i bardzo jasne składowe. Rozciąganie histogramu polega na takiej konwersji poziomów jasności obrazu wejściowego, by rozkład poziomów jasności na histogramie obrazu wyjściowego obejmował wszystkie poziomy jasności.
Wyrównywanie histogramu: Celem wyrównania histogramu obrazu jest uzyskanie możliwie równomiernego rozkładu poziomów jasności obrazu dla całego jego zakresu. Skutkiem wyrównania histogramu jest poprawa kontrastu obrazu. Wyrównanie histogramu pozwala na podkreślenie w obrazie tych szczegółów, które są mało widoczne z powodu niewielkiego kontrastu. Nie jest to metoda uniwersalna i w przypadku histogramów o określonym kształcie nie daje zadowalających rezultatów.
Normalizacja histogramu: Operacja normalizacji histogramu zmienia zakres zmienności poziomów jasności obrazu wyjściowego.
Metoda poprawy jakości obrazu poprzez korekcję tonalną
Korekcja tonalna jest przykładem operacji punktowej, czyli takiej, która jest wykonywana na pojedynczym px obrazu. W wyniku korekcji tonalnej wykonać można:
- rozjaśnienie obrazu;
- przyciemnienie obrazu;
- obniżenie kontrastu;
- zwiększenie kontrastu.
- zmniejszenie kontrastu
Korekcja tonalna wykonywana jest na krzywej tonów. Krzywa ta jest wykresem opisującym zależności pomiędzy wielkością poziomów jasności na wejściu (obraz przed korekcja) a poziomami jasności na wyjściu (obraz po korekcji). Krzywa odwzorowania tonów jest początkowo linia prosta nachylona pod kątem 45°. Na osi poziomej zaznaczone są poziomy jasności obrazu wejściowego, a na osi pionowej poziomy jasności obrazu wyjściowego. Przed korekcja krzywa przypisuje identyczne poziomy jasności obrazowi wejściowemu i wyjściowemu. W trakcie korekcji kształt krzywej jest zmieniany. Krzywa posiada umowne zakresy (obszary) jasności:
1. Cienie
2. Tony średnie
3. światła
Obszary zajmują dokładnie 1/3 osi każdy.
Wyróżniamy 2 rodzaje korekcji tonalnej:
- liniową
- nieliniową
Liniowa korekcja Tonalna – krzywa zależności tonów jest linią prostą lub łamaną nachyloną do osi pod pewnym kątem. Wadą takiej korekcji jest obcięcie pewnych tonów i utrata szczegółów w skrajnych tonach. Efektów takich nie powoduje korekcja nieliniowa.
Napisać program zmieniający jasność obrazu poprzez liniową korekcję tonalną
struct pixel {
int R;
int G;
int B;
}
int main()
{
pixel OBRAZ[K+1][L+1];
// Tutaj pobieramy obraz gdzies z zewnatrz
double n; // Jakaś wartość od 0 do 1
for(int i=1;i<=K;i++)
for(int j=1;j<=L;j++)
{
if(OBRAZ[i][j].R+N*256>=255)
OBRAZ[i][j].R=255;
else if(OBRAZ[i][j].R+N*256<=0)
OBRAZ[i][j].R=0;
else
OBRAZ[i][j].R=N*256+OBRAZ[i][j];
if(OBRAZ[i][j].G+N*256>=255)
OBRAZ[i][j].G=255;
else if(OBRAZ[i][j]GR+N*256<=0)
OBRAZ[i][j].G=0;
else
OBRAZ[i][j].G=N*256+OBRAZ[i][j];
if(OBRAZ[i][j].B+N*256>=255)
OBRAZ[i][j].B=255;
else if(OBRAZ[i][j].B+N*256<=0)
OBRAZ[i][j].B=0;
else
OBRAZ[i][j].B=N*256+OBRAZ[i][j];
}
}
}
Napisać program zmieniający kontrast obrazu poprzez liniową korekcję tonalną
struct pixel {
int R;
int G;
int B;
}
int main()
{
pixel OBRAZ[K+1][L+1];
// Tutaj pobieramy obraz gdzies z zewnatrz
int a; // Współczynnik kierunkowy prostej
for(int i=1;i<=K;i++)
{
for(int j=1;j<=L;j++)
{
if((a*(OBRAZ[i][j].R-128)+128)<=0)
OBRAZ[i][j].R=0;
else if((a*(OBRAZ[i][j].R-128)+128)>=255)
OBRAZ[i][j].R=255;
else
OBRAZ[i][j].R = a*(OBRAZ[i][j].R-128)+128;
if((a*(OBRAZ[i][j].G-128)+128)<=0)
OBRAZ[i][j].G=0;
else if((a*(OBRAZ[i][j].G-128)+128)>=255)
OBRAZ[i][j].G=255;
else
OBRAZ[i][j].G = a*(OBRAZ[i][j].G-128)+128;
if((a*(OBRAZ[i][j].B-128)+128)<=0)
OBRAZ[i][j].B=0;
else if((a*(OBRAZ[i][j].B-128)+128)>=255)
OBRAZ[i][j].B=255;
else
OBRAZ[i][j].B = a*(OBRAZ[i][j].B-128)+128;
}
}
}
Metoda poprawy jakości obrazu poprzez filtrowanie przestrzenne
W metodach filtrowania przestrzennego przetwarzaniu podlega bezpośrednio funkcja jasności (obraz jest reprezentowany jako macierz poziomów jasności). Funkcję działającą na obraz wejściowy można opisać wyrażeniem:
g(x, y) = T[ f (x, y)]
gdzie:
f(x,y) - funkcja reprezentująca obraz wejściowy;
g(x,y) - funkcja reprezentująca obraz przetworzony;
T - operator lokalny działający na określonym obszarze obrazu np.: (3x3, 5x5 lub 7x7 pikseli).
Wartość jasności piksela obrazu wyjściowego obliczana jest na podstawie jasności pikseli obrazu wejściowego leżących w bezpośrednim sąsiedztwie danego piksela. W metodach tych definiowana jest maska, która przemieszcza się w obrębie obrazu z krokiem równym odstępowi między pikselami i zgodnie z definicją operatora T wyznaczana jest nowa wartość g(x,y) dla każdego piksela obrazu.
Przykłady filtrów:
- Filtr rozmywający (dolnoprzepustowy)
- Filtr wyostrzający (górnoprzepustowy)
- Detekcja krawędzi
- Konturowanie obrazu
- Filtr medianowy
Omówić zasadę działania filtru medianowego do usuwania zakłóceń typu punktowego
Filtr medianowy, jest to filtr przetwarzania przestrzennego i służy do usuwania zakłóceń typu punktowego. Działa erozyjnie, co jest zjawiskiem niepożądanym. Polega to na tym, że po wielokrotnym użyciu filtru medianowego krawędzie obiektów o różnych poziomach jasności stają się poszarpane. W wyniku działanie filtru medianowego piksel obrazu wyjściowego przyjmuje wartość mediany z wartości pikseli obrazu wejściowego znajdujących się w jego otoczeniu. Medianę wyznacza się w ten sposób, że wartości pikseli z otoczenia sortuje się od największego do najmniejszego a następnie wybiera się wartość środkową ciągu. W przypadku masek o parzystej liczbie pikseli w otoczeniu, medianę oblicza się przez uśrednienie wartości dwóch pikseli środkowych posortowanego ciągu.
Wyznaczyć szerokość pasma video (VBW) karty graficznej generującej obraz o rozdzielczości KxL z częstotliwością odświeżania VFreq i czasami wygaszania HBlank i Vblank
Wyznaczyć częstotliwość sygnału synchronizacji poziomej (HFreq) karty graficznej generującej obraz o rozdzielczości KxL z częstotliwością odświeżania VFreq i czasami wygaszania HBlank i Vblank
Jeśli mamy obliczyć HSync to:
Omówić kryterium wyboru pikseli w algorytmie Bresenhama kreślenia odcinka
Rysowanie odcinka metodą Bresenhama opiera się na zmiennej decyzyjnej, której znak decyduje o kolejnym kroku algorytmu. Zmienna określa kierunek poziomy, pionowy lub idealnie skośny rysowania kolejnego piksela odcinka. Algorytm działa na liczbach całkowitych.
Założenia:
-
odcinek określony przez współrzędne początku i końca (x0
,y0)
i (xk
,yk);
- x0 < xk
- współczynnik kierunkowy odcinka spełnia nierówność: 0<dy/dx ≤ 1
gdzie: dy = yk - y0
dx = xk – x0
Rysowanie zaczynamy od piksela P0 = (x0 ,y0). Ponieważ kąt nachylenia odcinka jest ograniczony do przedziału [0, 45°], więc po znalezieniu kolejnego Pi = (xi ,yi) następny piksel wybieramy z pośród tylko dwóch: Si+1= (xi+1, yi) i Ti+1= (xi+1, yi+1)
Wielkości s i t są określone równaniami:
Odejmując te równania stronami i mnożąc przez dx otrzymujemy:
Ponieważ dx > 0, więc znak di określa, która z wielkości s i t jest większa.
Jeśli di > 0, to i za Pi+1 przyjmujemy piksel Ti+1, w przeciwnym razie, jeżeli di < 0, wybierzemy piksel Si+1.
Równość di = 0 oznacza, że oba piksele Si+1 i Ti+1 leżą w tej samej odległości od odcinka i wtedy możemy arbitralnie decydować, np., że
Pi+1 = Ti+1.
Dla i+1 wzór (1) ma postać:
Odejmując od niego stronami równanie (1) uzyskujemy zależność:
stąd:
gdyż:
Jeżeli di ≥ 0 (wybieramy wtedy Pi+1 = Ti+1) to yi+1 = yi + 1 i zależność rekurencyjna (2) upraszcza się do postaci:
a jeżeli di < 0 (wybieramy wtedy Pi+1 = Si+1) to yi+1 = yi i mamy:
Dla i = 0, ze wzoru (1) dostajemy wartość początkową zmiennej decyzyjnej
Omówić kryterium wyboru pikseli w algorytmie Bresenhama kreślenia okręgu
Założenia:
- promień okręgu R jest liczbą naturalną, a jego środek leży w początku układu współrzędnych;
- ośmiokierunkowy wybór piksela;
- ze względu na symetrię okręgu ograniczymy wyznaczanie piksela tylko do 1/4 okręgu (dla a = 1 wystarczy rozważenie 1/8 okręgu).
Rysowanie zaczynamy od piksela P0=(0,R), następne wyznaczamy zgodnie z kierunkiem obrotu wskazówek zegara. Po znalezieniu piksela Pi, wybór następnego Pi+1 ogranicza się do jednego z trzech pikseli oznaczonych na rysunku literami A, B lub C.
Punkt Z, w którym współczynnik kierunkowy wektora stycznego:
jest równy -1, dzieli ćwiartkę okręgu na dwa wycinki:
- w wycinku 1: p 2 x < q 2 y - wybieramy piksel Pi+1 spośród pikseli A i B zwiększając kolejno wartość x;
- w wycinku 2: p 2 x ≥ q 2 y - wybieramy piksel Pi+1 spośród pikseli B i C zmniejszając kolejno wartość y.
Wybór piksela leżącego bliżej okręgu (A czy B lub B czy C) można dokonać wyznaczając wartości f(x,y) dla odpowiednich współrzędnych (x i y). Sposób nie efektywny – działa na liczbach rzeczywistych. W przypadku krzywych opisanych równaniem wyższego stopnia złożony obliczeniowo.
Omówić modelowanie powierzchni metodą Coonsa
Dane są 4 krzywe definiujące brzeg płatu powierzchni. Zakładamy, że wycinek powierzchni S(u,v) jest znormalizowany do kwadratu jednostkowego, parametry u i v należą do przedziału <0, 1>. Krzywe brzegowe można przedstawić jako: P(u,0), P(u,1), P(0,v) i P(1,v). Płat powierzchni Coonsa buduje się interpolując punkty leżące na przeciwległych krzywych brzegowych. Utworzona powierzchnia przedstawiona jest równaniem parametrycznym:
gdzie: Fi są odpowiednio dobieranymi funkcjami interpolującymi spełniającymi warunki brzegowe:
F0(0) = 1, F0(1) = 0, F1(0) = 0 i F1(1) = 1
Najprostszymi funkcjami Fi są funkcje: /złożenie liniowe powierzchni prostoliniowych ang. ruled surfaces/
F0(u) =1-u i F1(u) =u oraz F0(v) =1-v i F1(v) =v
Omówić funkcję składową i własności krzywych Beziera
Krzywe Beziera definiujemy przez łamaną kontrolną o N+1 wierzchołkach P0, P1,..., PN. Początkowy i końcowy punkt leżący na krzywej pokrywa się z pierwszym i ostatnim punktem kontrolnym. Krzywe Beziera są styczne do łamanej kontrolnej w punkcie początkowym i końcowym. Umożliwia to łączenie ze sobą krzywych i powierzchni Beziera z zachowaniem ciągłości klasy C1 połączenia. Powierzchnia Beziera jest powierzchnią parametryczną S(u, v) wyznaczoną na podstawie siatki punktów kontrolnych, zwanej grafem kontrolnym określonej wg. odpowiedniego wzoru. Powierzchnia Beziera jest iloczynem tensorowym krzywych Beziera krzywych większość własności krzywych Beziera przenosi się również na powierzchnie.
Właściwości krzywych i powierzchni Beziera:
- nie przechodzą przez wszystkie punkty kontrolne
- krzywe pozostają w wypukłej części łamanej kontrolnej, a powierzchnie leżą w powłoce wypukłej grafu kontrolnego
- nie umożliwiają lokalnej kontroli kształtu. Punkty kontrolne mają wpływ nie tylko na punkty leżące w najbliższym otoczeniu, lecz także na punkty na całej długości krzywej lub powierzchni. Przesunięcie dowolnego punktu kontrolnego powoduje zmianę położenia wszystkich punktów tworzących krzywą lub powierzchnię
- dla N punktów kontrolnych generowana jest krzywa stopnia N- 1. Wpływa to na złożoność obliczeniową algorytmów realizujących operacje na krzywych i powierzchniach
- Krzywa
Beziera jest styczna do łamanej kontrolnej w punktach węzłowych.
Styczne w tych punktach pokrywają się z odcinkami odpowiednio P0P1
i PN-1PN
łamanej kontrolnej. Umożliwia to łączenie krzywych z zachowaniem
ciągłości połączenia C1.
Filtrowanie przestrzenne
W metodach filtrowania przestrzennego przetwarzaniu podlega
bezposrednio funkcja jasnosci (obraz jest reprezentowany jako
macierz poziomow jasnosci). Funkcje dzialajaca na obraz
wejsciowy mozna opisac wyrazeniem:
[ g(x, y) = T f (x, y)]
gdzie:
f(x,y) - funkcja reprezentujaca obraz wejsciowy;
g(x,y)- funkcja reprezentujaca obraz przetworzony;
T - operator lokalny dzialajacy na okreslonym obszarze obrazu
np.: (3x3, 5x5 lub 7x7 pikseli).
Filtr rozmywajacy (dolnoprzepustowy)
Filtr rozmywajacy stosowany jest glownie w celu ukrycia drobnych
znieksztalcen lub redukowania szumow, powstalych np. w wyniku
skanowania obrazow rastrowych (efekt mory). Filtr rozmywajacy
nazywany jest czesto filtrem dolnoprzepustowym poniewaz
przepuszcza elementy obrazu o malej zmiennosci (czestotliwosci),
tlumi natomiast albo blokuje elementy o wiekszych
czestotliwosciach (szumy).
Filtry wyostrzajace (gornoprzepustowe) sa uzywane do
wzmocnienia szczegolow obrazu o duzej zmiennosci.
Wykorzystywane sa do zaakcentowania obiektow w obrazie albo
ich identyfikacji. Ujemnym skutkiem filtracji gornoprzepustowej
jest wzmacnianie szumu w obrazie. Zastosowanie filtrow
wyostrzajacych pozwala na osiagniecie wyrazistosci wiekszej niz w
oryginale. Filtry wyostrzajace dzialaja w ten sposob, ze akcentuja
(wzmacniaja) roznice pomiedzy sasiadujacymi ze soba jasnymi i
ciemnymi punktami.Detekcja krawedzi
Operatory Laplace'a wykrywaja krawedzie we wszystkich
kierunkach. Metody wykrywania krawedzi korzystajace z
Laplasjanow daja w efekcie ostrzejsze krawedzie niz wiekszosc
innych metod.K onturowanie obrazu
Filtry uzywane do wykrywania krawedzi i tworzenia konturu
obrazu sa nazywane filtrami konturowymi. Sa uzywane czesto w
procesie segmentacji obrazu i rozpoznawania ksztaltow obiektow
w obrazie. Dzialaja one na zasadzie gradientowej. Gradient
okresla, jak w obrazie zmieniaja sie jasnosci pomiedzy sasiednimi
pikselami. Gradient osiaga najwieksza wartosc tam, gdzie w
obrazie istnieja najwieksze zmiany jasnosci przy przejsciu od
piksela do piksela. Przykladami filtrow konturowych sa filtry
Sobela i filtry Prewitta.
Filtr medianowy sluzy do usuwania zaklocen typu punktowego.
Dziala erozyjnie, co jest zjawiskiem niepozadanym Polega to na
tym, ze po wielokrotnym uzyciu filtru medianowego krawedzie
obiektow o roznych poziomach jasnosci staja sie poszarpane. W
wyniku dzialanie filtru medianowego piksel obrazu wyjsciowego
przyjmuje wartosc mediany z wartosci pikseli obrazu wejsciowego
znajdujacych sie w jego otoczeniu.
Omówić funkcję składową i własności krzywych B-sklejanych
Krzywa B-sklejana jest definiowana przez N+1 punktów kontrolnych Pi, tworzących łamaną kontrolną o N+1 wierzchołkach na której określone są węzły ti. Funkcja bazowa Ni,k(t) jest wielomianem stopnia k-1, k-2 który zapewnia ciągłość klasy Ck-2 na całej długości definiowanej krzywej. Wartość krzywej zależy od położenia węzłów ti i ti+k. modyfikacja punktu kontrolnego zmienia lokalnie kształt krzywej. Kształt krzywej może być modyfikowany poprzez wielokrotne zdefiniowanie tego samego punktu kontrolnego. Stopień k funkcji bazowej wpływa na odległość krzywej od punktów definiujących.
Właściwości krzywych i powierzchni B-sklejanych:
- definiowane są na podstawie łamanych lub grafów kontrolnych
- umożliwiają lokalną kontrolę kształtu tworzonej krzywej lub powierzchni
- stopień k funkcji bazowej zapewnia ciągłość klasy Ck-2 na całej długości definiowanej krzywej
- gładkość powierzchni jest kontrolowana przez stopień k i l funkcji bazowych
- stopień funkcji bazowych nie zależ od liczby punktów kontrolnych
Omówić funkcję składową i własności krzywych β-sklejanych
Właściwości krzywych i powierzchni β-sklejanych:
- mogą być wykorzystywane w interakcyjnych systemach graficznych, w których wymagana jest dokładana kontrola kształtu generowanych obiektów
- kontrola kształtu oraz transformacje mogą być dokonywane lokalnie
- parametry β1 i β2 mogą być przedstawione w formacie funkcji, co umożliwia ciągłą kontrolę kształtu
- stopień bazowych funkcji β-sklejanych jest stały (3 dla krzywych i 6 dla powierzchni)
- nie przechodzą przez punkty kontrolne, nawet przez punkt początkowy i końcowy. Dla zapewnienia przejścia przez określony punkt kontrolny należy do łamanej kontrolnej lub grafu dołożyć dodatkowy punkt
Parametr β1 wpływa na symetrię krzywej, natomiast β2 kontroluje stopień przylegania krzywej do łamanej kontrolnej. Je żeli β1=1 i β2=0 to funkcje bazowe β-sklejane redukują się do funkcji bazowych B-sklejanych 3-go stopnia.
Omówić klasy ciągłości w procesie modelowania krzywych i powierzchni nieregularnych- GDZIe to jest??!
Omówić na przykładzie funkcji biblioteki OpenGL przekształcenia geometryczne w przestrzeni 3D
W środowisku OpenGL rozróżniamy 3 podstawowe operacje przekształcenia geometryczne:
- przesunięcie – translację
- skalowanie
- rotację – obrót
Przesunięcie – jest wykonywane poprzez przesunięcie obiektu o zadany wektor. Realizowane przez funkcję glTranslate*();
Skalowanie – zmienia rozmiar obiektu.
S = <SX, SY, SZ> P(PXSX, PYSY, PZSZ). Realizowane jest przez funkcję glScale*().
Rotacja – obrót obiektu wokół środka układu współrzędnych. Realizowana przez funkcję glRotate*(). Jej parametry to kąt obrotu, oraz osie wokół których nabyć wykonany obró t.
Omówić na przykładzie funkcji biblioteki OpenGL rzutowanie perspektywiczne i równoległe
Rzut perspektywiczny nadaje realizm symulacjom i animacjom oraz imituje wrazenie glebi obrazu. Wielkosc rzutu obiektu jest odwrotnie proporcjonalna do odleglosci obiektu od srodka rzutowania. Rzuty tego typu nie nadaja sie jednak do rejestrowania ksztaltu obiektu i dokonywania pomiarow (np. katy na ogol nie sa zachowywane). Punkt zbieznosci dla peku prostych rownoleglych do danej osi ukladu wspolrzednych, okreslamy jako osiowy punkt zbieznosci. W zaleznosci od liczby istniejacych osiowych punktow zbieznosci rozrozniamy rzuty jedno-, dwu- i (rzadko stosowane) trzy-punktowe. Liczba osiowych punktow zbieznosci zalezy od tego ile osi ukladu wspolrzednych przecina rzutnia. W OpenGL za rzut perspektywiczny odpowiada funkcja glFrustnum(), jej parametry to kolejno krawędzie lewa, prawa, dolna, górna bliższej płaszczyzny odcięcia, oraz paramRetry odległość bliższej i dalszej płaszczyzny odcięcia
Rzut równoległy (ortagonalny) jest najprostszym rodzajem rzutow, dla ktorego obraz punktu jest sladem normalnej do plaszczyzny rzutowania przechodzacej przez ten punkt. Jezeli plaszczyzna rzutowania jest XY wowczas wspolrzednej Z przypisuje sie wartosc 0. Tego typu rzutowanie okresla sie stosujac prostokatna lub szescienna bryle rzutowania. Nic, co znajduje sie poza ta bryla nie jest rzutowane. Bryle rzutu okresla sie podajac blizsza, dalsza, lewa, prawa, gorna i dolna plaszczyzne obcinania. Rzuty te latwo uzyskac jednak nie daja one obrazow realistycznych chyba, ze obserwator znajduje sie daleko od obiektu. Ten rodzaj rzutowania stosuje sie w projektowaniu architektonicznym i programach CAD. Do określenia parametrów tego rzutu w OpenGL służy funkcja glOrtho przyjmująca kolejno za parametry lewą prawą, dolną, górną, bliższą i dalszą płaszczyznę odcięcia.
Omówić składanie przekształceń z wykorzystaniem funkcji biblioteki OpenGL działających na stosie macierzy modelowania
Operacje obrotu, translacji oraz skalowania można przedstawić za pomocą macierzy, przez którą należy pomnożyć współrzędne wierzchołka którego chcemy zmodyfikować. Ogólna postać takiej macierzy to:
Następuje złożenie wszystkich przekształceń, w postaci jednej macierzy przekształceń. UWAGA Przekształcenia macierzowe w OpenGL wykonywane są w odwrotnej kolejności niż wynikałoby to z kodu programu.
Funkcje działające na stosie macierzowym:
void glPushMatrix(void) – Skopiowanie macierzy na wierzchołku stosu.
void glPopMatrix(void) – Zdjęcie macierzy z wierzchołka stosu.
void glLoadIdentity(void) – Załadowanie macierzy jednostkowej na wierzchołek stosu
void glMatrixMode(GLenum tryb) – Wybór aktywnego stosu macierzowego (tryb = GL_MODELVIEW – stos macierzy modelujących, tryb = GL_PROJECTION – stos macierzy rzutujących).
Funkcje przekształceń – patrz wyżej!
Prymitywy geometryczne dostępne w bibliotece OpenGL
Podstawowymi funkcjami służącymi do definiowania kształtów obiektów są glBegin(), glEnd() oraz glVertex*()
glVertex*() - Definiuje pojedynczy wierzchołek figury podstawowej. Jako parametry pobiera jego współrzędne w przestrzeni x, y, z, w.
glBegin(GLenum mode) – Rozpoczyna definicję obiektu. Z wierzchołków zdefiniowanych pomiędzy glBegin() oraz glEnd() tworzone będą figury podstawowe. Ich rodzaj określa parametr mode, który może przyjmować następujące wartości:
GL_POINTS – definiuje punkty p1, ...pn
GL_LINES – definiowane są niepołączone ze sobą odcinki prostej pomiędzy punktami: p1 oraz p2, p3 oraz p4 itd.
GL_LINE_STRIP – definiowane są połączone ze sobą odcinki prostej. Pierwszy od p1 do p2, drui od p2 do p3,..., ostatni od pn-2 do pn
GL_LINE_LOOP – podobnie jak w przypadku GL_LINE_SYTRIP, definiowane są połączone ze sobą odcinki prostej, z tym że automatycznie dodawany jest odcinek pomiędzy punktami p1 oraz pn, dopełniając w ten sposób pętlę.
GL_TRIANGLES – definiowane są niepołączone ze sobą trójkąty. Pierwszy o wierzchołkach w p1, p2, p3, drugi p4,p5,p6 itd. Jeżeli n nie jest wielokrotnością 3, wówczas punkty, które pozostają bez swojego dopełnienia do 3, zostają odrzucone
GL_TRIANGLE_STRIP – definiowane są połączone ze sobą trójkąty, w taki sposób że pierwszy tworzą wierzchołki p1,p2,p3, drugi p3,p2,p4,..., ostatni p1, pn-1, pn.
GL_TRIANGLE_FAN - podobnie jak w przypadku GL_TRIANGLE_STRIP definiowane są połączone ze sobą trójkąty, z tym że wszystkie one mają wspólny wierzchołek p1. Kolejne trójkąty tworzą wierzchołki: pierwszy p1, p2, p3, drugi, p1,p3,p4, …, ostatni p1, pn-1,pn
GL_QUADS – definiowane są niepołączone ze sobą czworokąty o wierzchołkach w punktach: pierwszy p1, p2, p3, p4; drugi p5, p6, p7, p8; itd. Jeżeli n nie jest wielokrotnością 4, wówczas punkty, które pozostają bez swojego dopełnienia do 4, zostają odrzucone.
GL_QUAD_STRIP – definiowane są połączone ze sobą czworokąty. Pierwszy tworzą wierzchołki p1, p2, p4, p3, drugi p3, p4, p6, p5, …, ostatni pn-3, pn-2, pn, pn-1.
GL_POLYGON – definiowany jest wielokąt o wierzchołkach p1, p2, …, pn.
glEnd() - funkcja oznaczająca koniec definicji obiektu.
Wykorzystując wskazaną funkcję modelowania geometrycznego biblioteki OpenGL napisać program generujący obraz bryły o zadanych parametrach
Np. Ostrosłup prawidłowy czworokątny o boku a jak na rysunku:
// Dolna podstawa
int a =4;
glBegin(GL_QUADS);
glVertex3f(a/2,0,-a/2);
glVertex3f(a/2,0,a/2);
glVertex3f(-a/2,0,a/2);
glVertex3f(-a/2,0,-a/2);
glEnd();
// Sciana 1 , a*sqrt(3)/2 – wysokość ostrosłupa
glBegin(GL_TRIANGLES);
glVertex3f(a/2,0,-a/2);
glVertex3f(a/2,0,a/2);
glVertex3f(0,a*(sqrt(3)/2),0);
// Sciana2
glVertex3f(a/2,0,a/2);
glVertex3f(-a/2,0,a/2);
glVertex3f(0,a*(sqrt(3)/2),0);
// Sciana3
glVertex3f(-a/2,0,a/2);
glVertex3f(-a/2,0,-a/2);
glVertex3f(0,a*(sqrt(3)/2),0);
// Sciana3
glVertex3f(-a/2,0,-a/2);
glVertex3f(a/2,0,-a/2);
glVertex3f(0,a*(sqrt(3)/2),0);
glEnd();
Narysować i opisać model procesu rzutowania 3D
Na wejściu do procesu podawana jest macierz współrzędnych we współrzędnych obiektu. Następnie wykonywane są:
1. macierz modelowania M
- translacja
- rotacja
- skalowanie
2. macierz rzutowania P
- rzut ortogonalny
- rzut perspektywiczny
3. Dzielenie perspektywiczne
Przekształcenie normalizujące w celu przejścia do wsp. w pixelach.
4. przekształcenie do wsp. ekranowych
Definiowanie okna zobrazowania.
Jakie czynniki fizyczne wpływają na wrażenie koloru? Podać ich interpretację na przykładzie wykresu rozkładu energii światła w funkcji długości fali
Barwa (ang. hue) – określana przez dominującą długość fali, czynnik jakościowy – to co odróżnia np. zieleń od błękitu.
Nasycenie (ang. saturation) – określane jako stosunek energii dominującej długości fali e2 do wypadkowej energii e1 pozostałych fal tworzących widmo świetlne. Nasycenie (czystość barwy) jest tym większe, im większa jest wartość e2 w stosunku do e1. Dla e1=0 nasycenie maksymalne, dla e2=e1 nasycenie zerowe (barwy achromatyczne).
Jasność (ang. ligthness) – określana stopniem podobieństwa barwy do bieli (dla odcieni jasnych) czy czerni (dla odcieni ciemnych), czynnik ilościowy proporcjonalny do całki z widmowego rozkładu energii światła.
Narysować i opisać model koloru CIE La*b. W jakim zakresie definiuje się parametry tego modelu
Opracowany przez Miedzynarodowa Komisje Oswietleniowa
(CIE) model barw CIE La*b* jest najwazniejszym modelem w
odniesieniu do grafiki komputerowej. Opisywane barwy
mieszaja sie w elipsoidzie o trzech prostopadlych osiach. Wzdluz
osi a barwy przechodza od zielonej do czerwonej, wzdluz osi b
od zoltej do niebieskiej, w punkcie zbiegu jest biel (szarosc).
Wzdluz osi pionowej L okreslajacej jasnosc, biegna barwy
achromatyczne - od bieli do czerni.
Barwy objete w kuli CIE La*b* tworza najszersza game barw,
model zostal opracowany na bazie modelu CIE Yxy.
Zastosowana transformacja wspolrzednych umozliwia latwiejsze
wyliczenie odleglosci pomiedzy dwoma barwami w przestrzeni.
Kazdy inny model barw da sie opisac we wspolrzednych La*b*,
ale nie na odwrot. Czyni to model ten niezaleznym od urzadzen
wejscia/wyjscia. Model wykorzystywany jest do obliczen na
barwach przez systemy zarzadzania barwami CMS.
a*,b*∈[-60;60]
L∈[0;100]
Narysować i opisać modele koloru RGB i CMY. Podać równanie konwersji RGB → CMY
RGB – w systemie wykorzystane są 3 barwy podstawowe Red,
Green, Blue. Odpowiadają one składowym koloru w monitorach
rastrowych. Model ten może zostać przedstawiony jako sześcian
o krawędzi jednostkowej. W punkcie (0,0,0) znajduje się barwa
czarna, w punkcie (1,1,1) barwa biała. Osie odpowiadają
odpowiednio barwom modelu RGB. Wierzchołki na osiach
reprezentują barwy podstawowe, zaś wierzchołki przeciwległe
barwy dopełniające. Jest to przykład systemu addytywnego,
ponieważ mieszanie barw odbywa się poprzez dodawanie
składowych w odpowiednich proporcjach.
CMY – barwy podstawowe: cyjan, magenta, yellow.
Odpowiadają one różnicy podstawowych barw systemu RGB.
Składowe te nazywane są substraktywnymi, ponieważ usuwają
składowe RGB z widma światła białego.
RGB→CMY:
Omówić model koloru CMYK. Podać równanie konwersji CMY → CMYK
Model CMYK jest rozszerzeniem modelu CMY o barwę czarną jest wykorzystywany szczególnie w urządzeniach drukujących. Dodanie barwy czarnej było konieczne z powodu iż suma barw systemu CMY nie daje barwy czarnej, a jedynie barwę szarą, lub popielatą.
Konwersja CMY→CMYK:
k to współczynnik regulacji kontrastu z zakresu [0;1]. Z reguły przyjmuje się k=1
Narysować i opisać model koloru HLS i HSV. W jakim zakresie definiuje się parametry tego modelu
Model HLS:
Kolor definiowany jest za pomocą trzech wielkości: barwy (H- hue), jasności (L- lightness) i nasycenia (S- saturation). Barwa jest reprezentowana za pomocą okręgu. Wartości definiujące barwę mieszczą się w przedziale (0°-360°). Trzy kolory podstawowe (red, green, blue) i trzy kolory dopełniające (cyan, magenta, yellow) są rozmieszczone regularnie na okręgu tworząc sześcian regularny. Jasność (L)definiuje wartościami od 0 (kolor czarny) do 1(kolor biały) wszystkie odcienie szarości (skala kolorów achromatycznych). Nasycenie (S) fizycznie odpowiada ilości fal o różnej długości składających się na dany kolor. Wartość 1 odpowiada kolorowi czystemu lub w pełni nasyconemu i tworzonemu za pomocą fal o tej samej długości.
Model HSV:
Model ten czesto nosi nazwe HSB, gdzie B oznacza jaskrawosc. Przedstawia sie go w postaci ostroslupa prawidlowego o podstawie szesciokatnej. Wierzcholki podstawy odpowiadaja barwom spektralnym, wierzcholek ostroslupa odpowiada barwie czarnej, a spodek wysokosci barwie bialej.
Barwa mierzona jest katem β wokol osi V: =0 dla barwy czerwonej; β=120 dla barwy zielonej; β=240 dla barwy niebieskiej. Barwe dopelniajaca do danej otrzymuje sie przez zwiekszanie β o 180. Wartosc nasycenia okresla wzgledna odleglosc punktu od pionowej osi , dla punktow lezacych na osi V wartosc nasycenia jest rowna zero, a dla punktow lezacych na trojkatnych scianach ostroslupa wartosc nasycenia wynosi jeden. Barwa ma najmniejsza wartosc V=0 w wierzcholku ostroslupa, maksymalna wartosc V=1 osiaga w punktach podstawy. Okreslanie barwy uzytkownik moze rozpoczac od podania kata i V=S=1; wybiera on
Operacje w przestrzeni kolorów RGB
1. Operacje bezpośrednie
- dodawanie kolorów C1+C2=[r1+r2, g1+g2, b1+b2]
- mnożenie przez skalar αC=[αr, αg, αb] α € <0;1>;
2. Operacje pośrednie
Obliczenia w przestrzeni kolorów
3. Nakładanie kolorów
i ze starej ściągi
zmiana jasnosci
filtr kolorowy
zwiekszenie kontrastu
utrata ostrosci
wygladzanie (smoothing)
uwypuklenie (relief)
redukcja liczby barw
zmiana nasycenia
zmiana barwy
przejscie na obraz monochromatyczny
progowanie
fotoinwersja
Cieniowanie powierzchni metodą Gourauda
1. Wyznaczenie barwy w wierzchołkach trójkąta:
- wyznaczenie wektorów normalnych do wszystkich wierzchołków jako średniej arytmetycznej wektorów normalnych wszystkich ścian, do których ten wierzchołek należy.
- na podstawie wektora normalnego wyznaczenie barwy wierzchołka korzystając z wybranego modelu oświetlenia
2. Liniowa interpolacja barwy dla wszystkich punktów wielokąta zgodnie z zaprezentowanymi wzorami:
Cieniowanie powierzchni metodą Phonga
Cieniowanie metoda Phonga polega na interpolacji wektora normalnego dla każdego punktu wielokąta, a następnie wyznaczenie na tej podstawie intensywności barwy.
Etapy:
1. Wyznaczenie wektorów normalnych do wszystkich wierzchołków wielokąta jako średniej arytmetycznej wektorów normalnych wszystkich ścian, do których ten wierzchołek należy.
2. Liniowa interpolacja wartości wektorów normalnych dla wszystkich punktów wielokąta (dla wszystkich pikseli):
2.1. Interpolacja wzdłuż krawędzi;
2.2. Interpolacja wzdłuż linii horyzontalnych.
3. Na podstawie wartości wektorów normalnych wyznaczenie barwy dla wszystkich punktów wielokąta zgodnie z przyjętym modelem oświetlenia
Model oświetlenia Phonga
- uwzględnia odbicie kierunkowe (zwierciadlane) światła
- powierzchnia odbijająca ma charakter lustrzany: powierzchnie gładkie z połyskiem (światło odbijane w jednym kierunku)
- zapewnia złudzenie odblasku światła na powierzchni obiektów
- w miejscu rozświetlenia barwa zbliżona do barwy padającego światła
- efekty oświetlenia zależne od położenia obserwatora (kata pomiędzy kierunkiem światła odbitego a kierunkiem do obserwatora)
Równanie renderingu
- globalny model oświetlenia
- rozwiązuje problem propagacji energii świetlnej w środowisku, nie zajmuje się interakcją światła z danym rodzajem powierzchni
- oparte na znanym w termodynamice zjawisku transferu ciepła drogą promieniowania i zasadzie zachowania energii
- modelowanie oświetlenia poprzez wielokrotne rozwiązanie równania renderingu dla każdego punktu lub powierzchni elementarnej wizualizowanej sceny
gdzie:
g(x,x’) – czynnik geometryczny określający położenie punktu x w stosunku do punktu x’
- jeżeli x i x’ są dla siebie niewidoczne to: g(x,x’) = 0
- w pozostałych przypadkach: g(x,x’) = 1/r2 gdzie r jest odległością między x i x’
ε(x,x’) – intensywność światła emitowanego z punktu x’ w kierunku punktu x , różna od zera jedynie dla powierzchni aktywnych oświetleniowo (pierwotne źródła światła)
I(x’,x”) – intensywność światła w punkcie x’ emitowanego lub odbijanego w punkcie x” w kierunku punktu x’
ρ(x,x’,x”) – współczynnik odbicia światła I(x’,x”) w kierunku punktu x