zÁklady po Č Íta Č ovej grafiky

83
P Ř ÍRODOV Ě DECKÁ FAKULTA ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY ALEXEJ KOLCUN OSTRAVA 2003

Upload: trankien

Post on 02-Feb-2017

239 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

P Ř Í R O D O V Ě D E C K Á F A K U L T A

Z Á K L A D Y P O Č Í T A Č O V E J G R A F I K Y

A L E X E J K O L C U N

OSTRAVA 2003

Page 2: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

Obsah Obsah.......................................................................................................................................... 2 Úvod ........................................................................................................................................... 4

Vektorová grafika................................................................................................................... 4 Rastrová grafika ..................................................................................................................... 5 Sprievodca textom.................................................................................................................. 6

1 Formalizácia vnímania farieb – čiernobiele videnie ............................................................... 8 1.1 Intenzita žiarenia .............................................................................................................. 8 1.2 Emulácia šedých odtieňov................................................................................................ 8

1.2.1 Metóda konštantného prahu ...................................................................................... 9 1.2.2 Metóda náhodného rozptýlenia ................................................................................. 9 1.2.3 Maticové rozptýlenie............................................................................................... 10 1.2.4 Korekcia veľkosti obrázku ...................................................................................... 12 1.2.5 Distribúcia chyby .................................................................................................... 13

2 Formalizácia vnímania farieb – farebné videnie ................................................................... 16 2.1 Aditívny a subtraktívny model miešania farieb ............................................................. 16 2.2 Grassmannove zákony.................................................................................................... 16 2.3 Chromatický diagram..................................................................................................... 17 2.4 Trochu geometrie ........................................................................................................... 23 2.5 Farebné modely .............................................................................................................. 25

2.5.1 RGB model.............................................................................................................. 26 2.5.2 HSL model .............................................................................................................. 27 2.5.3 HSV model .............................................................................................................. 27

3 Spracovanie rastrového obrazu ............................................................................................. 30 3.1 Priama zmena škály intenzity......................................................................................... 31 3.2 Konvolučné metódy ....................................................................................................... 31 3.3 Detekcia hrán.................................................................................................................. 33 3.4 Bezstratová komprimácia ............................................................................................... 34 3.5 Komprimácia so stratou ................................................................................................. 35

3.5.1 Trochu vysokej matematiky .................................................................................... 35 3.5.2 Mechanizmus JPEG formátu................................................................................... 38

4 Rýchly algoritmus rasterizácie kriviek.................................................................................. 41 4.1 „Jednoduchý“ algoritmus s reálnou aritmetikou – DDA ............................................... 42 4.2 Celočíselný (Bresenhamov) algoritmus ......................................................................... 43 4.3 Rasterizácia kužeľosečiek .............................................................................................. 47

5 Krivky v počítačovej grafike................................................................................................. 49 5.1 Matematický formalizmus generovania kriviek............................................................. 49 5.2 Bézierove krivky ............................................................................................................ 50 5.3 Spájanie bézierovych kriviek ......................................................................................... 52 5.4 Implementačná efektivita ............................................................................................... 52

6 Algoritmy orezávania............................................................................................................ 56 6.1 Orezávanie izolovaných bodov ...................................................................................... 57 6.2 Orezávanie úsečky.......................................................................................................... 58

6.2.1 Triviálne orezávanie ................................................................................................ 58 6.2.2 Cohen – Sutherlandov algoritmus (Co-Su) ............................................................. 59 6.2.3 Algoritmus Skala – Bui (Sk-Bu) ............................................................................. 63 6.2.4 Algoritmus Cyrus – Beck (Cy-Be)......................................................................... 63

Page 3: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

6.3 Orezávanie plošných útvarov ......................................................................................... 65 7 Vyplňovacie algoritmy.......................................................................................................... 66

7.1 Scan-line algoritmus....................................................................................................... 66 7.2 Inverzné vyplňovanie ..................................................................................................... 68 7.3 Zobecnené vyplňovanie – Z-buffer ................................................................................ 69 7.4 Rastrové vyplňovanie..................................................................................................... 71

8 Telesá a ich reprezentácie ..................................................................................................... 72 8.1 Objemové reprezentácie................................................................................................. 72 8.2 Povrchové reprezentácie ................................................................................................ 72

8.2.1 Reprezentácia mnohostenov.................................................................................... 72 8.2.2 Viditeľnosť konvexných mnohostenov................................................................... 73 8.2.3 Okrídlená hrana ....................................................................................................... 75 8.2.4 Parametrické plochy................................................................................................ 75

9 Tuhé transformácie v rovine a priestore................................................................................ 78 9.1 Transformácie v 2D........................................................................................................ 78 9.2 Maticové vyjadrenie....................................................................................................... 78 9.3 Transformácie v 3D........................................................................................................ 79 9.4 Transformačný reťazec................................................................................................... 80 9.5 Urýchlenie operácií ........................................................................................................ 82

10 Literatura ............................................................................................................................. 83

Page 4: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

Úvod Človek vníma vonkajší svet na základe piatich zmyslov: zrak, sluch, hmat, čuch, chuť. Pritom prvé dva informačné kanály – obrazový a zvukový majú pre nás dominantné postavenie. Povedané „jazykom informatiky“, zrak využívame hlavne ako obrovskú vonkajšiu pamäť, zvukový kanál je náš dominantný prostriedok pre interaktívny vstup-výstup. Keď sa zamyslíme nad tým, aké technológie používal človek v minulosti na uchovanie vizuálnej a zvukovej informácie, zistíme, že s „konzervovaním“ vizuálnej informácie si poradil podstatne skôr ako so zvukom. Napr. kým verné uchovanie obrazového vnemu zvládal človek už od pradávna (odhaduje sa, že napr. nástenné maľby v jaskyniach Lescaux sú zhruba 10—17 tisíc rokov staré), verné zachovanie zvukovej informácie sa pripisuje až. T.A.Edisonovi v 2.pol. 19.storočia — fonograf. Preto je asi zákonité, že pre komunikáciu s novým svetom, ktorý je postavený na realizácii algoritmov a žije vďaka počítačom, svetom, ktorý v nedávnej dobe dostal módny názov virtuálna realita, si človek zvolil zrakovú komunikáciu: najprv vo forme symbolov, no s postupujúcim zdokonaľovaním používaného hardveru sa presadzuje čím ďalej tým viac skutočne grafická komunikácia. Počítačová grafika zahŕňa metódy a techniky konštrukcie, manipulácie, ukladania a zobrazenia obrazov pomocou počítača. [Ferko]. V skutočnom svete sú naše vizuálne vnemy výsledkom fyzikálnych zákonitostí, ktorými sa tento náš svet riadi. V prípade virtuálneho sveta musíme tieto zákonitosti sami vytvárať tak, aby boli v súlade s našou skúsenosťou. Nasledujúci text ukazuje niektoré základné algoritmické postupy nutné k tomu, aby počítačový systém toto zvládal. V počítačovom svete pracujeme s grafickou informáciou dvojakým spôsobom, preto sa používajú dva pojmy:

• vektorová grafika, • rastrová grafika.

Vektorová grafika Vo vektorovom vyjadrení je objekt určený podobne, ako sme zvyknutí z geometrických konštrukcií v deskriptívnej geometrii: bod je daný svojimi súradnicami, úsečka svojimi krajnými bodmi, lineárne lomená čiara je daná usporiadanou množinou bodov, n-uholník je určený svojou hranicou, tj. uzavretou lineárne lomenou čiarou, mnohosten je daný množinou svojich stien, atď. Nezastupiteľné miesto má vektorový prístup napr. v konštrukčných systémoch CAD/CAM (Computer Aided Design/Machinery) (napr. v strojníctve, architektúre), pri riadení manipulátorov a robotov, kde trajektórie sú dané ako krivky, resp. lineárne lomené čiary, a sú určené príslušnou postupnosťou bodov. Podobne v geografických informačných systémoch

Page 5: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

(GIS) veľa geografických objektov prírodného charakteru (výškové izolínie, vodné toky, …) alebo človekom vytvorené (cesty, inžinierske siete, …) majú charakter kriviek. Správnejšie by bolo asi používať názov procedurálna reprezentácia. Napr. úsečku charakterizujeme jej krajnými bodmi a atribútmi (typ, hrúbka a farba čiary, prípadne ešte i spôsob, akým sa realizujú konce úsečky). Vo svojej podstate je geometria daná len koncovými bodmi, všetko ostatné je vec určitých činností – procedúr: krajné body spoj rovnou čiarou, použi pri tom zadanú farbu, konce úsečky označ predpísaným spôsobom .... I zložitejšie objekty sa dajú charakterizovať podobne. Napr. často používaná CSG-reprezentácia (Constructive Solid Geometry) vychádza z

1. vopred definovaných primitívnych telies (napr. kolmý kváder, valec, rotačný elipsoid), 2. parametrov, určujúcich tieto primitívne telesá (napr. dĺžky hrán kvádra, polomer a výška

valca, veľkosti hlavných poloosí elipsoidu), 3. polohy vybraného bodu primitívneho telesa (napr. ťažiska), 4. množinových operácií nad primitívnymi telesami (pre dvojice telies generujeme

zjednotenie, prienik, rozdiel). Keďže použité množinové operácie sú binárne, táto reprezentácia vedie k použitiu formalizmu – ohodnotený binárny strom. Editácia telies je v tejto reprezentácii veľmi jednoduchá a intuitívne pochopiteľná. Nevýhodou takej reprezentácie je skutočnosť, že pre zobrazovanie telies potrebujeme informáciu o povrchu telesa. Kým pre jednotlivé primitívne telesá toto spravidla nie je problém, množinové operácie (hlavne zjednotenie a rozdiel), to komplikujú. Preto sa vo veľkej miere používajú také reprezentácie telies, ktoré priamo pracujú s povrchmi (resp. hraničnými prvkami telies) – podrobnejšie sa tomu budeme venovať v kapitole 8.

Rastrová grafika Je veľa grafických aplikácií, kde sa na obraz pozeráme ako na systém malých, farebne homogénnych plôšok. Koniec koncov, takýmto spôsobom pracujú maliari, tento mechanizmus je využívaný pri fotografii, takto registruje grafickú informáciu oko. V počítačovej grafike je pre tieto účely vytvorená pravidelná štruktúra – pravouhlá mriežka, zvaná raster s ďalej nedeliteľnými bunkami, ktoré nesú názov pixel (Picture Element). V tejto reprezentácii je každá zobrazovaná situácia vyjadrená celou rastrovou mriežkou. Rozdiel vo vyjadrení rôznych situácií je v tom, ktoré pixely majú akú farbu. (Napr. pri reprezentácii jedného bodu na farebne homogénnom pozadí sú všetky pixely, až na jeden, rovnakej farby). Rastrová reprezentácia je pravdaže pamäťovo veľmi náročná. Pamäť, kde sa táto informácia ukladá, sa nazýva VideoRAM (VRAM). Napr. u digitálnych fotoaparátov je ich kvalita daná hlavne charakteristikou rozlíšenia, tj. počtom bodov (v megapixeloch), ktoré je fotoaparát schopný registrovať. Často (hlavne v prípade tlačiarní) sa stretneme s charakteristikou rozlíšenia udávaného v jednotkách DPI (Dots Per Inch) tj. počet bodov na jeden palec (cca 2,5cm). Napr. dnes používané tlačiarne mávajú rozlíšenie od 300 do 1200 DPI.

Page 6: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

• Koľko pamäti potrebujeme v prípade rastrovej mriežky 1000x1000 pixelov v prípade, že pre každý pixel potrebujeme 1 byte pamäti?

• Vyjadrite rozlíšenie v DPI pre 17” monitor, ktorý má rozlíšenie 1024x768 pixelov. • Vyjadrite rozlíšenie v pixeloch pre formát A4 pri hustote bodov 300, 600, 1200 DPI.

Rozvoj príslušných technológií (pamäte a rýchly prístup do nich) spôsobili, že základné výstupné grafické zariadenia (obrazovka, tlačiareň) sú dnes realizované práve rastrovým spôsobom. K tomu prispieva i fakt, že mnohé algoritmy sú pre rastrovú reprezentáciu oveľa jednoduchšie ako pre reprezentáciu vektorovú. V žiadnom prípade však nemožno povedať, že rastrová grafika vytlačí grafiku vektorovú. Vekorová grafika ponúka v mnohých prípadoch jednak úspornejší zápis, jednak dovoľuje väčšie možnosti grafickej editácie celých objektov. Rozdiely medzi rastrovou a vektorovou grafikou demonštrujeme na jednoduchom príklade: V aplikácii Paintbrush (Malování), ktorá je súčasťou MS Windows, vygenerujte úsečku. Keďže daná aplikácia je rastrová, jediná možnosť ako s úsečkou ďalej pracovať, je editovať každý pixel zvlášť. (Jedinou výnimkou je posunutie celej úsečky – v zmysle presunutia celej 4-uholníkovej oblasti, v ktorej sa úsečka nachádza.) Na druhej strane, jednoduchú grafiku má v sebe implementovanú napr. i MS Word. Tu však môžeme v prípade úsečky dodatočne meniť polohu krajných bodov, meniť farbu, prípadne hrúbku čiary. To je možné práve preto, že informácia o úsečke je uchovávaná vo „vektorovom tvare“, tj.: súradnice krajných bodov + atribúty (farba, typ a hrúbka čiary). Skúste sa zamyslieť nad tým, ako bude vyzerať zväčšený detail obrázku, ktorý je zadaný vektorovo a obrázku, ktorý je zadaný rastrovo.

Sprievodca textom Predkladaný text ukazuje základné problémy, ktoré počítačová grafika rieši.

Úvodné kapitoly sú venované rastrovej grafike. • Keďže základom rastrovej grafiky je pixel, a pixel má jediný atribút – farbu, tak

v prvých dvoch kapitolách sú ukázané prístupy pre formalizáciu farieb. • Tretia kapitola sa venuje základným prístupom pri spracovaní rastrového obrazu. Táto

problematika sa s rozširovaním prístrojov, ako sú napr. scanner a digitálny fotoaparát, stáva aktuálnou pre čoraz širší okruh ľudí.

Nasledujúce kapitoly pojednávajú o rasterizácii obrazu, tj. o prechode od vektorovej grafiky k rastrovej. Dôležitosť tohto procesu je v tom, že základné výstupné zariadenia sú rastrového charakteru, a preto sa rasterizácii vektorových dát nevyhneme. • Štvrtá kapitola demonštruje, akým spôsobom sa prevádza vektorový obraz do rastrovej

formy v najjednoduchšej forme, tj. pre prípad úsečky. Prístup je zovšeobecnený na kužeľosečky a je ukázané obmedzenie použitej idey.

• Piata kapitola patrí svojim obsahom viac do poslednej časti textu – vektorovej grafiky, no logicky nadväzuje na predošlú kapitolu: je v nej vysvetlený mechanizmus, aký sa používa pre generovanie kriviek – parametrické vyjadrenie. Sú sformulované

Page 7: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

základné vlastnosti Bézierovych kriviek, ktoré sú v dnešnej dobe veľmi rozšíreným nástrojom na generovanie kriviek.

• Nasledujúca kapitola ukazuje záludnosti počítačového sveta v situácii, keď je vykresľovaný objekt mimo zobrazovanú oblasť. Sú popísané metódy, ako sa takéto problémy riešia (pravdaže opäť na jednoduchých príkladoch – úsečkách).

• Siedma kapitola je venovaná vyplňovacím algoritmom Záverečná časť textu je venovaná 3-rozmernej vektorovej grafike. • V kap. 8 sú ukázané princípy, na ktorých sú konštruované3D modely. • Posledná kapitola popisuje základné operácie pri práci s vektorovo orientovanými

datami, s tuhými transformáciami. Tie nám dovoľujú s objektom hýbať, tj. rotovať, posúvať, približovať, a taktiež zobraziť 3D objekt na 2D plochu.

Nebolo cieľom tohto textu podať vyčerpávajúce informácie z oblasti počítačovej grafiky. Záujemcom o detailnejšie prenikutie do problematiky nech poslúži zoznam použitej literatúry. Neoddeliteľnou súčasťou tohto učebného textu sú zdrojové texty okomentovaných programov, u ktorých sa predpokladá, že ich čitateľ využije pri tvorbe vlastných grafických procedúr v súlade s textom. Z hľadiska dnešného stupňa vývoja je použitá platforma (MS DOS) archaická. Programy pracujú v základnom grafickom mode, pričom sa využívajú len tri elementárne grafické procedúry:

• ch_gr_mode() pre prepnutie počítača do grafického módu, • put_256_Pixel(x,y,color) pre vykreslenie pixelu, • pal_256_set() pre nastavenie farebnej palety.

Daná platforma je zvolená preto, že text kladie dôraz na algoritmizáciu a toto nám dáva minimálne, no dostatočné prostriedky pre precvičenie tejto problematiky. Po úspešnom preštudovaní tohto textu by ste mali byť schopni vytvoriť jednoduchý system na spracovanie rastrového obrazu a taktiež system pre manipuláciu s vektorovo orientovanými datami.

Page 8: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

1 Formalizácia vnímania farieb – čiernobiele videnie Všetky naše vizuálne vnemy majú jedného spoločného menovateľa – svetlo. Vo svojej fyzikálnej podstate je to elektromagnetické žiarenie. Jeho prirodzeným zdrojom je Slnko. Na rozhraní rôznych prostredí sa svetlo môže lámať, odrážať, pohlcovať, prípadne ohýbať. Napr. na rozhraní sklo-vzduch môžeme pozorovať lom svetla, pričom uhol lomu vzrastá so zmenšujúcou sa vlnovou dĺžkou. Takto sa dá ukázať, že prirodzené svetlo je zmesou svetiel s vlnovými dĺžkami v rozpätí cca 380 - 780 nm. (Podobný jav – dúhu – môžeme pozorovať v prírode na rozhraní kvapiek vody a vzduchu.) Svetlo s konkrétnou vlnovou dĺžkou budeme nazývať monochromatické. Rôzne monochromatické svetlá vnímame ako rôzne farby. Prirodzené slnečné svetlo nazývame tiež achromatické, resp. biele, či „bezfarebné“. Možno to interpretovať tak, že v achromatickej zmesi nie sme schopní rozlíšiť, ktorá z farieb je dominantná, tj. všetky sú vo vzájomnej rovnováhe. Rozklad zmesi svetiel rôznych farieb na monochromatické svetlá nazývame spektrum. U svetiel tak prirodzeným spôsobom rozlišujeme tri vlastnosti: 1. intenzitu – tj. mieru energie žiarenia, 2. farebný tón – ktorý súvisí s vlnovou dĺžkou, 3. sýtosť – tj. mieru primiešavania achromatického svetla k svetlu monochromatickému.

1.1 Intenzita žiarenia U monochromatického svetla, a tiež u achromatického, vnímame len jeden atribút – intenzitu. Je to miera energie daného žiarenia. Vzťah medzi vnímanou intenzitou svetla I a jeho energetickou bilanciou W (Lambert-Beerov zákon) je logaritmický,

( 1.1) ).log(WI ≈

Znamená to, že aby sme dosiahli vnemy postupne sa zväčšujúcej intenzity, musíme znásobovať dodanú energiu: .2 2

1212 WWII =⇒=V prípade bieleho svetla intenzitu popisujeme ako rôzne úrovne šedi. Bežne sme schopní rozlíšiť približne 100 stupňov. Z dôvodov používaných číselných reprezentácií sa spravidla používajú škály 2-stupňová (1 bit), 16-stupňová (4 bity), 256 stupňová (8b = 1 byte). Napr. VGA grafická karta dovoľovala využívať 64-stupňovú škálu (6 bitov).

1.2 Emulácia šedých odtieňov Typické HW zariadenie, ktoré pracuje s 2-stupňovou škálou šedých farieb, je ČB tlačiareň. Táto používa len jeden – čierny toner. Napriek tomu tlačiareň dokáže šedé farby „vyrobiť“. Metódy, ktoré toto realizujú, tj. vyrábajú širokú škálu odtieňov pri obmedzenej farebnej palete, nazývame poltónovacie metódy (halftoning), resp. rozptyľovacie metódy (dithering). K tomu sa využíva integračná schopnosť oka. Ako pre každý iný receptor, aj pre oko existujú obmedzenia geometrického i energetického vnímania. Tj. objekty, ktoré sú menšie ako nejaká medzná hodnota, nevidíme. Podobne objekty, ktorých celková vyžarovaná energia je menšia, ako nejaká prahová hodnota, sú pre

Page 9: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

nás čierne. No tieto podprahové hodnoty oko neignoruje, ale je schopné ich sčítať. Napr. na nočnej oblohe voľným okom vidíme Mliečnu cestu – svetlý pás, tiahnúci sa celou oblohou (najlepšie vidieť v lete). V skutočnosti je to obrovské množstvo hviezd, z ktorých každá je z hľadiska nášho vnímania podprahová (možno sa presvedčiť pohľadom cez ďalekohľad). Nemusíme však čakať na bezoblačnú noc a zháňať ďalekohľad – skúste sa pozrieť na šedú plochu – výstup z čiernobielej tlačiarne – za pomoci lupy. V prípade emulácie šedých odtieňov budeme postupovať tak, že každý pixel nahradíme štvorcom pixelov. (Tým pravdaže pôvodný obrázok zväčšíme n-krát) Predpokladáme pritom, že zrakom neregistrujeme jednotlivé pixely, ale väčšie celky, pritom stupeň šedi budeme vnímať ako pomer počtu bielych a čiernych pixelov v danom štvorci. Plochu o veľkosti pixelov sme tak schopní vnímať v odtieňoch šedej farby.

nn ×

nn × 12 +nTakto vytvorená škála šedi je však z hľadiska zrakového vnemu nerovnomerná. Je to spôsobené tým, že na rozdiel od ( 1.1) v tomto prípade aplikujeme pre intenzitu a energiu lineárny vzťah

( 1.2) .WI ≈

Nesúlad medzi ( 1.1) a ( 1.2) sa rieši tzv. gamma korekciou, ktorá býva implementovaná v softvéroch na úpravu obrazu – viď kapitola o spracovaní obrazu. V nižšieopísaných metódach uvažujeme „elementárnu oblasť“ veľkosti 4x4 pixely. Pritom emulujeme 17-stupňovú škálu šedých odtieňov

16,...,1,0=inC . V prípade tlače 0-vý stupeň považujeme biely (čistý papier) a postupným pridávaním intenzít vyrábame tmavšie šedé odtiene. Hodnote 16 bude zodpovedať čierna farba. V prípade výstupu na obrazovku je to naopak, tj. 0-vý stupeň je čierny a maximálnej hodnote zodpovedá biela farba.

1.2.1 Metóda konštantného prahu Najjdednoduchšia metóda je založená na priamom nahradení vstupnej hodnoty inin Cc ∈ nejakou výstupnou . Použité kritérium má tvar: outout Cc ∈ ( 1.3) if ( [ix][iy]>H) [ix][iy]=1; inc outc

else [ix][iy]=0;, outc kde H je prahová hodnota, , napr. McH ≤≤0 2/McH = . Vo svojej podstate táto metóda šedé odtiene neemuluje, no je východiskovou pre ostatné metódy.

1.2.2 Metóda náhodného rozptýlenia Myšlienka spočíva v náhodnom rozmiestňovaní čiernych pixelov na biely podklad, pričom k-temu stupňu zodpovedá k čiernych pixelov. Takto sa emulujú šedé odtiene na tryskových tlačiarňach, kde sa pigmentové zrnká „rozprašujú“ tj. umiestňujú náhodne.

Page 10: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

Myšlienka spočíva v nahradení dostatočne veľkej farebne homogénnej plochy s N pixelami, kde každý pixel má intenzitu cin, plochou s náhodne rozmiestnenými čiernymi a bielymi pixelami. Vzájomný pomer počtu čiernych a bielych pixelov je vybalancovaný tak, aby výsledná energia žiarenia plochy zodpovedala žiareniu pôvodnej plochy. Kritérium je nasledujúce ( 1.4) if ( [ix][iy]>random( )) [ix][iy]=1; inc Mc outc

else [ix][iy]=0;. outc Pritom predpokladáme, že funkcia random() generuje hodnoty z s rovnomerným rozdelením.

inC

Pod vzťahom ( 1.4) si môžeme predstaviť nasledujúci mechanizmus: na intervale A= Mc,0 označíme podinterval B= inc,0 . Budeme náhodne „strieľať“ do intervalu A, a v prípade, že sa trafíme do B, vezmeme čierny pixel. Každému pixelu plochy odpovedá jeden pokus. Pri N-násobnom opakovaní pokusu (tj. pre farebne homogénnu plochu

s N pixelami) dostaneme M

in

cc

NAB

N = čiernych pixelov, z celkového počtu N pixelov, čo

odpovedá stupňu šedého odtieňa cin.

Obr. 1.1. Emulácia škály šedých odtieňov náhodným rozptýlením.

Nevýhodou tejto metódy je, že náhodné rozmiestnenie čiernych a bielych pixelov spôsobuje, že vznikajú väčšie čierne, resp. biele súvislé plôšky. Majú rôzne tvary a rozmery, ktoré už sú nad prahom nášho priestorového rozlíšenia. Preto výsledný obraz je silne zrnitý. Budeme sa teda snažiť riadiť vzájomnú polohu rozmiestňovania čiernych a bielych pixelov podľa nejakej pravidelnej schémy, napr. tak, aby boli podľa možností rozmiestnené rovnomerne.

1.2.3 Maticové rozptýlenie Budeme používať pravidelné vzory. Každý vzor vyjadríme maticou, ktorá obsahuje prvky s hodnotami 0,1. Pritom sa využíva taký spôsob generovania vzorov, že dvojici susedných odtieňov šedi zodpovedajú matice, ktoré sa líšia len v jednej pozícii. Stupeň šedi zodpovedá počtu nenulových prvkov matice vzoru. Tento mechanizmus dovoľuje všetky vzory vyjadriť jednou kódovacou maticou ( )ijmM = , kde pre daný stupeň šedi h bude vzor obsahovať všetky tie prvky, pre ktoré . hmij ≤ Pre rozlíšenie vstupných hodnôt šedí a výstupných hodnôt matice vzorov, budeme matice vzorov písať bez zátvoriek. Napríklad pre elementárnu oblasť 2x2 pixely, tj. pre 5 stupňov šedej farby, môžeme použiť nasledujúce vzorovacie matice

Page 11: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

( 1.5) , 1111

1011

1001

0001

0000

ktoré vyjadríme kódovacou maticou

. ⎟⎟⎠

⎞⎜⎜⎝

⎛=

2431

iM

Iný možný spôsob je určený napr. kódovacou maticou

⎟⎟⎠

⎞⎜⎜⎝

⎛=

3421

iiM .

V praxi sa používajú spravidla väčšie matice, napr. 8x8 – my pre sa pre jednoduchosť obmedzíme na matice 4x4.

⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜

61481610212471551311391

⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜

37164151112861091321451

I. II. Kódovacia matica I. vzniká rekurentným vnorením vyššieuvedenej matice . Môžeme to interpretovať aj tak, že

iM

• aplikujeme maticu pre prípad výstupnej 5-stupňovej škály šedi 0 – 4. Dostávame nasledujúcu postupnosť kódovacích matíc

iM

⎟⎟⎠

⎞⎜⎜⎝

⎛⎟⎟⎠

⎞⎜⎜⎝

⎛⎟⎟⎠

⎞⎜⎜⎝

⎛⎟⎟⎠

⎞⎜⎜⎝

⎛⎟⎟⎠

⎞⎜⎜⎝

⎛⎟⎟⎠

⎞⎜⎜⎝

⎛⎟⎟⎠

⎞⎜⎜⎝

⎛⎟⎟⎠

⎞⎜⎜⎝

⎛⎟⎟⎠

⎞⎜⎜⎝

⎛4444

4344

2112

1112

1111

1011

1001

0001

0000

L

• každý stupeň šedi 0 – 4 nahradíme príslušnou vzorovacou maticou z ( 1.5). Tak napr.

pre prvých šesť stupňov šedi (vynechajúc bielu, ktorej zodpovedá matica s nulovými prvkami) dostaneme nasledujúce vzory

1 0 0 0 1 0 0 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1

Vyjadrenie tejto postupnosti kódovaciou maticou dáva maticu I. Podobne matica II. vzniká z rekurentným vnorením s pootočením o 90iiM o v smere hodinových ručičiek.

Page 12: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

Obr. 1.2. Metódy maticovej emulácie šedej farby: a) emulácia maskou I., b) emulácia maskou II.

Na obrázku 2.2 vidíme, že maska I. rozmiestňuje čierne subpixle čo najrovnomernejším spôsobom, kým maska II. zväčšuje čierny subpixel. Pozrite sa pod lupou na šedý výstup z ČB tlačiarne, a určte, ktorý z typov emulácie bol použitý. Zamyslite sa, prečo je zvolený daný typ emulácie.

1.2.4 Korekcia veľkosti obrázku Ako už bolo uvedené, priama aplikácia vyššieuvedených metód očividne zväčšuje veľkosť výsledného obrázku. Pre zachovanie pôvodného rozmeru je možné postupovať dvojakým spôsobom: a) najprv zmenšíme pôvodný obrázok (tj. pre 17 odtieňov berieme vždy zo štvorca 4x4

pixelov napr. „ľavý horný“), a potom aplikujeme emuláciu, b) najprv vykonáme emuláciu a potom obrázok zmenšujeme. Na prvý pohľad by sa mohlo zdať, že oba postupy sú rovnocenné. No nie je tomu tak. Postup b) dáva lepšie výsledky. Overme si to na situácii, keď originálny obrázok obsahuje nasledujúcu oblasť veľkosti 4x4.

0 16 16 16 0 16 16 16 0 16 16 16 0 16 16 16

Aplikovaním postupu a) dostaneme pixel s hodnotou 0 a aplikovaním ľubovoľnej z uvedených metód emulácie dostaneme výslednú oblasť z Obr. 1.3 a). Keď použijeme postup b), tj. nahradíme každú hodnotu 0 nulovou maticou 4x4, a hodnotu 16 maticou 4x4, ktorá obsahuje samé jednotky, a až potom budeme obraz „redukovať“, výsledkom bude oblasť z Obr. 1.3 b).

0 0 0 0 0 1 1 1 0 0 0 0 0 1 1 1 0 0 0 0 0 1 1 1 0 0 0 0 0 1 1 1

a) b) Obr. 1.3. Redukcia veľkosti obrazu.

Pri redukcii obrazu v prípade postupu b) musíme byť obozretní. Keď je použitá náhodná emulácia, pri zmenšovaní môžeme tiež použiť náhodný výber pixelu, alebo berieme vždy

Page 13: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

napr. pixel z oblasti „vľavo hore“. Keď ale bolo použité maticové emulovanie, musíme postupovať podľa schémy z Obr. 1.4.

Obr. 1.4. Redukcia matice rozptýlenia: pixel (svetlošedý) nahradíme maticou, z nej vyberieme len príslušný jeden element (tmavošedý), ktorý zobrazujeme.

Keby sme napr. vo farebne homogénnej oblasti, Obr. 1.5a) po nahradení každej vstupnej hodnoty vzorovou maticou Obr. 1.5b), z tejto vybrali vždy „konštantne umiestnený“ pixel, napr. ľavý horný, výsledkom by bol evidentne nesprávny vzor Obr. 1.5c). Postupujúc podľa schémy z Obr. 1.4 dostávame požadovaný výsledok – Obr. 1.5d).

6 6 6 6 1 0 1 0 1 1 1 1 1 0 1 0 6 6 6 6 0 1 0 0 1 1 1 1 0 1 0 0 6 6 6 6 1 0 1 0 1 1 1 1 1 0 1 0 6 6 6 6 0 0 0 1 1 1 1 1 0 0 0 1

a) b) c) d)

Obr. 1.5. Redukcia veľkosti obrazu.

Schému redukcie z Obr. 1.4 môžeme vyjadriť v tvare

( 1.6) if( [ix][iy]>M[ix mod 4][iy mod 4]) [ix][iy]=1; inc outc else [ix][iy]=0;. outc

1.2.5 Distribúcia chyby Vráťme sa na chvíľu k metóde konštantného prahu. Nahradenie vstupnej hodnoty výstupnou vedie k strate farebnej informácie. Najväčšej chyby sa pritom dopúšťame u hodnôt z okolia prahu. Napr. pri 64 stupňovej vstupnej škále a prahu H = 31, sa vstupná hodnota 30=inc zmení na a jej blízka vstupná hodnota 0=outc 32=inc sa zmení na . 1=outcMyšlienka, ako toto eliminovať, spočíva v prenose informácie, ktorá sa prahovaním stratí, do ešte neanalyzovaného okolia. Tj. keď pri použití konštantného prahu,vstupnej hodnote hcin < všetkých jasových jednotiek nenávratne stratíme, teraz sa budeme snažiť vzniknutý jasový deficit eliminovať tak, že o práve túto stratenú hodnotu zvýšime hodnotu jasu v ešte neanalyzovanom okolí.

inc

Page 14: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

Naopak, v prípade, že pôvodná hodnota je väčšia ako prahová, dosadením maximálnej možnej výstupnej hodnoty neúmerne zvýšime jas daného pixelu. Teraz chybu eliminujeme tak, že “prebytok” jasu uberieme z okolia. Týmto postupom vyrovnáme globálnu bilanciu vyžiarovaného svetla v okolí daného pixelu. Proces spracovania prebieha spravidla z ľava do prava, z hora dole, preto okolie kam distribuujeme chybu prahovania, je pravé dolné. Keďže susednosť dvoch pixelov môže byť daná buď celou spoločnou hranou, alebo len vrcholom, chybu distribuujeme spravidla nerovnomerne – hranovo susedným pixelom viac ako susedom cez vrchol. Hodnoty príslušných deliacich pomerov sú podľa rôznych autorov rôzne – v [Žára] sú napr. uvedené nasledujúce (Floyd-Steinberg):

16/116/516/316/7*0

000

Schéma, ktorá distribúciu chyby realizuje, je nasledujúca:

if (cin[ix][iy]< h) e= cin; cout[ix][iy]=0; ( 1.7) else e= h–cM; cout[ix][iy]=1;

cin[ix+1][iy] = cin[ix+1][iy] + 7/16*e;

cin[ix+1][iy+1] = cin[ix+1][iy+1] + 1/16*e; cin[ix][iy+1] = cin[ix][iy+1] + 5/16*e; cin[ix-1][iy+1] = cin[ix-1][iy+1] + 3/16*e;

Výsledkom pre 17-stupňovú škálu šedých odtieňov je Obr. 1.6.

Obr. 1.6. Distribúcia chyby pre 17-stupňovú škálu šedých odtieňov.

Popísali sme rôzne metódy emulovania šedých odtieňov. Hovoríme tomu emulovanie farieb pri obmedzenej palete.

• Konštantné prahovanie je vo svojej čistej podobe nepoužiteľné, ale je základom pre ďalšie metódy.

• Náhodné rozptýlenie dáva dobrý výsledok len v prípade veľmi jemného rastru – v opačnom prípade je výsledok príliš “zrnitý”.

• Maticové rozptýlenie sa používa pomerne často, musíme ale riešiť zväčšenie pôvodného obrázku. Pravidelná štruktúra masky môže niekedy pôsobiť rušivo.

• Distribúcia chyby z uvedených postupov dáva asi najlepší výsledok. Nie je lepšej metódy pre pochopenie problému, ako skúsiť ho vyriešiť vlastnými silami.

Page 15: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

Pre jednoduchý rastrový obraz” so vstupnou škálou 0 – 16 šedých odtieňov

16161616161616161616161616161616

4444444444444444

3333333333333333

2222222222222222

1111111111111111

0000000000000000

L

realizujte metódy emulácie šedých odtieňov maticovým rozptýlením a metódou distribúcie chyby. U maitcového rozptýlenia použijte masky I. a II. Prípadne skúste vytvoriť nejakú vlastnú masku. Pri realizácii použijte priložené procedúry. Výsledok musí byť zhodný s Obr. 1.1, Obr. 1.2, Obr. 1.6. Po úspešnej realizácii na testovacom príklade aplikujte uvedené metódy na „reálnych obrázkoch” vo formáte *.SBM.

Page 16: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

2 Formalizácia vnímania farieb – farebné videnie Farebné videnie berieme ako životnú samozrejmosť, no je to vec veľmi netriviálna. Je zarážajúce, aké obrovské „nevedomosti“, prípadne skreslené vedomosti z tejto oblasti poznania sú všeobecne rozšírené. I v odbornej literatúre z počítačovej grafiky sú v nej medzery. Preto je táto kapitola dosť podrobne vysvetlená. Záujemci o detailnejšie znalosti z oblasti fyziológie farebného vnímania nech siahnu napr. po knihách [Novák], [Feynman]. My sa budeme venovať len základným otázkam formalizácie farebných vnemov.

2.1 Aditívny a subtraktívny model miešania farieb Každý z nás má tú skúsenosť, že zmiešaním červenej a zelenej vodovej farby nikdy nedostaneme farbu žltú. Naproti tomu, všade nás uisťujú, že žltá farba na monitoroch je výsledkom zmiešavania červenej a zelenej. A skutočne sa o tom môžeme presvedčiť, napr. pohľadom na obrazovku s použitím lupy. Ako je to vlastne možné, vyplýva z nasledujúceho. Keď na biely papier svietime červeným reflektorom, papier svieti červene. Analogicky, pri použití zeleného reflektoru bude papier svietiť zelene. To znamená, že keď budeme súčasne svietiť oboma reflektormi, budú sa odrážať obe svetlá a my vnímame ich zmes. A tento vnem nazývame žltou farbou. Podobne sa správa monitor, keď z trojice základných farebných bodov (zelený, červený a modrý) svietia len prvé dva. My tak vidíme zmes “červeno-zelenej”, tj. žltú. Toto je mechanizmus, nazývaný aditívne miešanie farieb a uplatňuje sa u farebného výstupu na monitor. V prípade miešania vodových farieb je situácia úplne iná. Pigmentové zrnká, ktoré farbu tvoria, sú vlastne farebné filtre. Napr. červený filter prepustí zo zmesi svetiel len červené svetlo – ostatné farby sa pohltia. Keď ešte pred neho umiestnime filter zelený, ktorý prepúšťa len zelené svetlo a ostatné pohlcuje, sústava týchto filtrov neprepustí žiadne svetlo. Preto výsledný vnem miešania červenej a zelenej vodovej farby by mal byť farba čierna. Že to tak nie je, je dôsledkom toho, že nie sme schopní zaistiť, aby jednotlivé pigmentové zrnká boli rovnakého tvaru a veľkosti, a naviac, nie sme schopní docieliť presné prekrytie pigmentových zŕn. Tento mechanizmus nazývame subtraktívne miešanie farieb. Toto je podstata fungovania farebných tlačiarní. Vyššieuvedené tiež objasňuje, prečo sa okrem farebných pigmentov používa aj pigment čierny. (Nehľadiac na to, že i v prípade „dokonalých pigmentov” by „dvojfarebné“ generovanie čiernej farby bolo zbytočne drahé.) Ďalej v celej tejto budeme uvažovať aditívny farebný model.

2.2 Grassmannove zákony Významnou vlastnosťou nášho farebného vnímania je skutočnosť, že napr. v zmesi dvoch monochromatických svetiel nie sme schopní rozlíšiť jednotlivé zložky, a vnímame to ako jedinú farbu. Napr. na jednej strane existuje žlté monochromatické svetlo, tj. monochromatické žiarenie konkrétnej vlnovej dĺžky (napr. 580 nm), no na druhej strane, žlté svetlo môžeme získať aj ako zmes červeného a zeleného monochromatického svetla. Oba tieto prípady sú z hľadiska fyzikálnej podstaty rôzne, no z hľadiska nášho vnímania rovnaké.

Page 17: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

(Úplne iná situácia je u vnemov zvukových, ktoré majú tiež charakter vlnenia, no z akordu, tj. zmesi tónov, vždy vieme vyseparovať jednotlivé tóny, ktoré daný akord tvoria, a žiadny z akordov nemožno nahradiť jediným tónom.) Podstatné rysy nášho farebného vnímania sú sformulované v Grassmannových zákonoch, napr. [Horňák]:

1. Ľubovoľná štvorica farieb je lineárne závislá (tj. ľubovoľný farebný podnet možno nahradiť aditívnou zmesou troch lineárne nezávislých, ale ľubovoľne zvolených merných svetelných podnetov).

2. Pri spojitej zmene spektrálneho zloženia svetla sa spojite mení aj náš vnem — farba. 3. Farba zmesi je určená len farbou miešaných zložiek a nezávisí od ich spektrálneho

zloženia (tj. napríklad vo vyššieuvedenom príklade je jedno, či budeme k nejakej farbe pridávať monochromatickú žltú, alebo žltú, ktorá je zmesou červenej a zelenej - výsledný farebný vnem bude rovnaký).

2.3 Chromatický diagram Kvantitatívne vyjadrenie 1. Grassmannovho zákona je dané kolorimetrickými vzťahmi a je výsledkom nasledujúceho experimentu: Zoberieme tri reflektory rôznych farieb. Za základ kolorimetrickej sústavy boli Medzinárodnou komisiou pre osvetlenie - CIE - v r.1931 vzaté žiarenia o vlnových dĺžkach 700 nm (R-červená), 546,1 nm (G-zelená), 435,8 nm (B-modrá). Tieto svetlá (farby) nazveme etalónové. Svietime nimi na jedno miesto. Pritom intenzity jednotlivých reflektorov môžeme rôzne meniť – dostaneme tak rôzne svetelné zmesi. Na druhej strane, zoberme monochromatické svetlo vybranej vlnovej dĺžky (označme ho X). Budeme sa snažiť namiešať svetelnú zmes tak, aby jej farba zodpovedala vybranému monochromatickému svetlu X. Formálne vyjadrené dostaneme

X = rR + gG +bB, kde r, g, b sú reálne nezáporné čísla vyjadrujúce intenzitu príslušných etalónových svetiel. Môžeme sa obmedziť na . 1,,0 ≤≤ bgrUkazuje sa však, že pre dosiahnutie ekvivalentnosti farebných vnemov pre niektoré monochromatické svetlá je nutné experiment modifikovať: hľadá sa farebná rovnosť zmesi skúmaného a jedného z etalónových svetiel, so zmesou ostatných dvoch etalónových svetiel. Najmarkantnejšie sa to prejavuje v oblasti vlnových dĺžok 450-550 nm, kde ku skúmanému monochromatickému svetlu X treba „pridať červené svetlo. Tentokrát teda hľadáme rovnosť

X + rR = gG +bB.

Pri prepise do tvaru

X =- rR + gG +bB tak dostávame zápornú hodnotu – koeficient -r. Treba si uvedomiť, že r, g, b sú intenzity, a preto samy nemôžu byť záporné.

Page 18: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

Výsledné hodnoty koeficientov r, g, b pre jednotlivé vlnové dĺžky sú uvedené v tab. 2.1 [Horňák], [Skala], resp. v grafe - Obr. 2.1. Všimnime si napr. farebné vnemy zodpovedajúce nm. Všetky sa dajú vyjadriť len na základe červeného podnetu, s rôznou intenzitou tohto podnetu. Ináč povedané, všetky tieto farby môžeme vyjadriť ako výsledok vzájomného pomeru

690>L

0:0:1:: =BGR , no pri rôznej intenzite samotného vnemu. Podobne aj u ostatných vlnových dĺžok je vo vyjadrení z tab. 2.1 zahrnutá okrem vzájomného pomeru aj celková intenzita jednotlivých zložiek.

Farebné koeficienty

-0 ,1

-0 ,05

0

0,05

0,1

0,15

0,2

0,25

0,3

0,35

375 400 425 450 475 500 525 550 575 600 625 650 675 700 725 750 775

λ [nm]

r,g,b

b g r

Obr. 2.1 Farebné koeficienty r, g b v závislosti na vlnovej dĺžke λ.

Page 19: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

λ r g b λ r g b

380 0,00003 -0,00001 0,00117 580 0,24526 0,13610 -0,00108385 0,00005 -0,00002 0,00189 585 0,27989 0,11686 -0,00093390 0,00010 -0,00004 0,00359 590 0,30928 0,09754 -0,00079395 0,00017 -0,00007 0,00647 595 0,33184 0,07909 -0,00063400 0,00030 -0,00014 0,01214 600 0,34429 0,06246 -0,00049405 0,00047 -0,00022 0,01969 605 0,34756 0,04776 -0,00038410 0,00084 -0,00014 0,03707 610 0,33971 0,03557 -0,00030415 0,00139 -0,00070 0,06637 615 0,32265 0,02583 -0,00022420 0,00211 -0,00110 0,11541 620 0,29708 0,01828 -0,00015425 0,00266 -0,00143 0,18575 625 0,26348 0,01253 -0,00011430 0,00218 -0,00119 0,24769 630 0,22677 0,00833 -0,00008435 0,00036 -0,00021 0,29012 635 0,19233 0,00537 -0,00005440 -0,00261 0,00149 0,31228 640 0,15968 0,00334 -0,00003445 -0,00673 0,00379 0,31860 645 0,12905 0,00199 -0,00002450 -0,01213 0,00678 0,31670 650 0,10167 0,00116 -0,00001455 -0,01874 0,01046 0,31166 655 0,07857 0,00066 -0,00001460 -0,02608 0,01485 0,29821 660 0,05932 0,00037 0465 -0,03324 0,01977 0,27295 665 0,04366 0,00021 0470 -0,03933 0,02538 0,22991 670 0,03149 0,00011 0475 -0,04471 0,03183 0,18592 675 0,02294 0,00006 0480 -0,04939 0,03914 0,14494 680 0,01687 0,00003 0485 -0,05364 0,04713 0,10968 685 0,01187 0,00001 0490 -0,05814 0,05689 0,08257 690 0,00819 0 0495 -0,06414 0,06948 0,06246 695 0,00572 0 0500 -0,07173 0,08536 0,04776 700 0,00410 0 0505 -0,08120 0,10593 0,03688 705 0,00291 0 0510 -0,08901 0,12860 0,02698 710 0,00210 0 0515 -0,09356 0,15262 0,01842 715 0,00148 0 0520 -0,09264 0,17468 0,01221 720 0,00105 0 0525 -0,08473 0,19113 0,00830 725 0,00074 0 0530 -0,07101 0,20317 0,00549 730 0,00052 0 0535 -0,05316 0,21083 0,00320 735 0,00036 0 0540 -0,03152 0,21466 0,00146 740 0,00025 0 0545 -0,00613 0,21487 0,00023 745 0,00017 0 0550 0,02279 0,21178 -0,00058 750 0,00012 0 0555 0,05514 0,20588 -0,00105 755 0,00008 0 0560 0,09060 0,19702 -0,00130 760 0,00006 0 0565 0,12840 0,18522 -0,00138 765 0,00004 0 0570 0,16768 0,17087 -0,00135 770 0,00003 0 0575 0,20715 0,15429 -0,00123 775 0,00001 0 0

tab. 2.1 Numerické hodnoty farebných koeficientov r, g b v závislosti na vlnovej dĺžke λ [nm]. Prevzaté zo [Skala].

Aby sme sa priblížili popisu vnímania v zmysle úvodu kap.2, treba oddeliť vzájomné pomery základných vnemov a intenzitu výsledného vnemu. Preto sa namiesto hodnôt r, g, b používajú normované hodnoty s normou r+g+b:

Page 20: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

bgrr

++=ρ ,

bgrg

++=γ ,

bgrb

++=β .

Normované farebné koeficienty

-1,5

-1

-0 ,5

0

0,5

1

1,5

2

375 400 425 450 475 500 525 550 575 600 625 650 675 700 725 750 775

λ [nm]

ρ, γ , β

ργβ

Obr. 2.2 Normované farebné koeficienty.

Vzhľadom na to, že ρ+γ+β=1, normované farebné koeficienty vyjadrujú pomerné zastúpenie etalónovej farby pre danú konkrétnu farbu, čiže môžeme tak používať terminológiu, aká je bežná pri definovaní zmesí. Z Obr. 2.2 je vidieť, že naše oko je rôzne citlivé na rôzne farby, napr. citlivosť na modrú farbu je v porovnaní s červenou veľmi malá: k modrej farbe stačí pridať len veľmi málo červenej a výsledný vnem bude fialový. Normované koeficienty majú i ďalšiu veľmi užitočnú vlastnosť. Keďže ρ+γ+β=1, na vyjadrenie každej farby spektra nám stačia len dva koeficienty, napr. ρ a γ. Koeficient β jednoznačne vyjadríme ako β=1- ρ-γ. Dve veličiny sa dajú názorne zobraziť i graficky. Obr. 2.3 – chromatický diagram – vyjadruje vzťah normovaných farebných koeficientov ρ a γ.

Page 21: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

Chromatický diagram

-0,05

0,45

0,95

1,45

1,95

-1,4 -0,9 -0,4 0,1 0,6 ρ

γ

560

500

520

540

480

Obr. 2.3 Chromatický diagram – vzájomná závislosť normovaných (pomerných) farebných zložiek ρ a γ. Spektrálne farby dávajú otvorenú krivku (susedné body na krivke zodpovedajú rozdielu vlnovej dĺžky 5nm).

Pre ďalšie vysvetlenie si potrebujeme uvedomiť jednu veľmi dôležitú algebraickú vlastnosť úsečky: úsečka je váženým priemerom svojich krajných bodov. Vskutku, body úsečky P a Q sa dajú vyjadriť v tvare

( )QaaPX −+= 1 , kde 10 ≤≤ a ,

alebo trochu ináč ( 2.1) bQaPX += , kde 1,1,0 =+≤≤ baba . Znamená to, že vnútorné body úsečky reprezentujú rôzne zmiešavacie pomery krajných bodov. Pritom rôznym bodom zodpovedajú rôzne váhy a, b a váhy musia byť zviazané vzťahom a+b = 1. V našej interpretácii to znamená, že keď zoberieme dve farby z krivky na Obr. 2.3, tak na úsečke, ktorá ich spája, dostávame všetky možné farebné zmesi týchto farieb. Napr. úsečka spájajúca oba konce krivky (červený a fialový) vyjadruje rôzne zmesi červeno-fialových, tj. „purpurových“ farieb. (Na rozdiel od farieb z krivky, pre ktoré existujú vlnové dĺžky, t.j. existujú pre ne monochromaticé svetlá, purpurové farby nemajú svoju vlnovú dĺžku – sú to vždy len zmesi monochromatických svetiel). Preto farby z krivky na Obr. 2.3 nazývame spektrálne a purpurové farby nazývame nespektrálne Všetky tieto farby, tj. spektrálne a purpurové, sa označujú ako čisté (sýte) farby a hovoríme, že poloha bodu na uzavretej krivke z Obr. 2.3 určuje farebný tón analyzovaného farebného vnemu. Celú plochu, ktorá je ohraničená práve analyzovanou uzavretou krivkou nazývame chromatický diagram.

Page 22: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

Vzniká zákonite otázka: dá sa nejakým spôsobom v chromatickom diagrame vyjadriť biela farba? V úvode kap.2 sme uviedli, že achromatické svetlo, tj. svetlo, ktoré sa prejavuje „bielou farbou“, je zmesou všetkých monochromatických svetiel, pričom žiadne z nich neprevláda, čiže všetky sú v tejto zmesi rovnocenné. Prevedené do formálneho vyjadrenia to znamená, že achromatické svetlo je aritmetickým priemerom všetkých uvažovaných monochromatických svetiel, preto jeho normovaný farebný koeficient ρa získame ako aritmetický priemer hodnôt normovaných koeficientov ρ uvažovaných monochromatických svetiel. Podobným spôsobom dostaneme aj γa a βa.

∑∑∑ ===L

LaL

LaL

La LLLββγγρρ 1,1,1 .

Pritom L znamená počet uvažovaných monochromatických svetiel.

V našom prípade (tab. 2.1) 80=L (vlnové dĺžky 380 –775 nm s krokom po 5 nm) dostávame hodnoty normovaných koeficientov achromatického svetla ρa=0,368; γa=0,301; βa=0,331. Keďže z geometrického (a taktiež mechanického) hľadiska je aritmetický priemer množiny bodov ťažiskom uvažovanej množiny bodov, bielej farbe zodpovedá ťažisko bodov, na základe ktorých sme skonštruovali chromatický diagram na Obr. 2.3.

Obr. 2.4 Body určujúce chromatický diagram (tmavomodré) a ťažisko (červené), zodpovedajúce bielej farbe. Každá z úsečiek reprezentuje farby s rovnakým farebným tónom.

Na úsečke, ktorá spája ťažisko a hraničný bod chromatického diagramu tak dostávame farby, ktoré sa vzájomne líšia iba mierou achromatickej zložky. Majú teda jeden farebný tón. Čím bližšie k okraju, tým menej achromatickej zložky, tým viac je farba výrazná (čistá, sýta). Vidíme, že chromatický diagram dovoľuje formalizovať dva atribúty všetkých farebných vnemov prirodzeným spôsobom:

• farebný tón – je daný polohou hraničného bodu v chromatickom diagrame,

Page 23: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

• čistota (sýtosť) farby – je daná polohou na spojnici ťažiska a hraničného bodu (čím bližšie k hranici, tým sýtejšia farba).

Čitateľovi možno príde na myseľa možno napadne otázka: keď sme našli v chromatickom diagrame bielu farbu, kde sa nachádza šedá farba? Pri hľadaní odpovede si treba uvedomiť, že u šedej farby, podobne ako u bielej, nie je žiadna farebná zložka prevládajúca. Takže povedané obrazne, „šedá je vo svojej podstate biela, ale nižšej intenzity“. Pritom pri konštrukcii chromatického diagramu sme sa intenzity zámerne zbavili prechodom od farebných koeficientov k normovaným farebným koeficientom. Preto v chromatickom diagrame nie sme schopní rozlíšiť farebné vnemy líšiace sa len svojou intenzitou. Zákonite vznikne však ďalšia otázka – ako je to s farbou čiernou? – Celý experiment vedúci k chromatickému diagramu vychádzal z predpokladu existencie svetla. Keďže čierna farba znamená neexistenciu žiadneho svetla, principiálne nemožno čiernu farbu v danom kontexte, tj. pomocou chromatického diagramu vyjadriť. V počítačovej literatúre, sa stretneme s trochu iným tvarom chromatického diagramu, kde koeficienty sú vybrané tak, aby

• farby monochromatických svetiel na krajoch krivky neboli tak „zhustené”, • koeficienty nadobúdali len nezáporné hodnoty.

Toto sa dá dosiahnuť nasledujúcou transformáciou farebných koeficientov, ktoré sú stanovené CIE normou [Skala]

( 2.2) ⎟⎟⎟

⎜⎜⎜

⎟⎟⎟

⎜⎜⎜

⎛=

⎟⎟⎟

⎜⎜⎜

bgr

zyx

594,5057,0000,0060,0591,4000,1130,1752,1769,2

a následným normovaním

zyxy

zyxx

++=

++= ωξ , .

Kým vo vyjadrení na základe ρ,γ je škálovanie „rovnomerné vzhľadom na vzájomné energetické pomery” jednotlivých zložiek, vyjadrenie na základe ξ,ω dáva „rovnomernejšiu škálu vzhľadom na naše vnímanie”. Vyjadrenie farieb pomocou hodnôt ξ,ω môžeme nájsť v literatúre pod názvom CIE kolorimetrická sústava. Pomocou bežne dostupných prostriedkov (napr. tabuľkový procesor Excel) transformujte hodnoty farebných koeficientov (tab. 2.1) do CIE kolorimetrickej sústavy a pre takto získané hodnoty vytvorte chromatický diagram.

2.4 Trochu geometrie V predošlej podkapitole sme si ukázali, že váženému priemeru dvoch bodov P,Q zodpovedá nejaký vnútorný bod tejto úsečky ( 2.2). Pritom poloha tohto bodu závisí od hodnôt zvolených

Page 24: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

váh. Stred úsečky je zároveň jej ťažiskom. Jemu zodpovedá aritmetický priemer krajných bodov úsečky. Zovšeobecnením tejto konštrukcie na tri body P,Q,R dostávame ( 2.3) cRbQaPX ++= , kde 1,1,,0 =++≤≤ cbacba . čomu zodpovedá celý trojuholník, vytýčený bodmi P,Q,R. Ťažisku trojuholníka odpovedá aritmetický priemer jeho vrcholov. Túto konštrukciu môžeme pravdaže zovšeobecňovať ďalej. Tj. zoberieme množinu bodov P0,P1,…Pn a budeme vytvárať ich všetky možné vážené priemery

P=a0 P0,+a1P1+…+anPn, čo znamená, že od koeficientov požadujeme, aby

1,,,0 10 ≤≤ naaa L a zároveň

a0 +a1+…+an=1. Takto dostaneme konvexný obal danej množiny bodov P0,P1,…Pn. Ťažisko tejto množiny bodov je prostý aritmetický priemer uvedených bodov. Tento aparát využívame pri formalizácii farebných vnemov, a stretneme sa s ním tiež v kapitole, venovanej generovaniu kriviek. Vráťme sa naspäť k trojuholníku a vytvorme navonok veľmi podobnú konštrukciu:

( 2.4) cRbQaPX ++= , kde 1,,0 ≤≤ cba .

To znamená, že tentokrát nekladieme podmienku a+b+c=1. Takáto konštrukcia má tiež veľmi názornú geometrickú interpretáciu: keď body P,Q,R interpretujeme ako bázové vektory 3D priestoru, P = (1,0,0), Q=(0,1,0), R=(0,0,1), potom pri meniacich sa koeficientoch a,b,c vyplníme celý jednotkový kváder

Page 25: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

Obr. 2.5 Vzájomný vzťah konštrukcií ( 2.2) – vyznačený trojuholník a ( 2.3) – jednotkový kváder.

2.5 Farebné modely Ako bolo popísané v časti 2.3, ľubovoľnú farbu síce môžeme vyjadriť na základe troch vhodne zvolených základných farieb, no pre niektoré z nich musíme využiť mechanizmus „záporných koeficientov“. Monitor (a podobne i všetky ostatné výstupné zariadenia) nie je schopný tento mechanizmus realizovať. Rôzne odtiene môžeme vyrábať len ako vážené priemery vybraných „základných farieb”. Použime tri základné farby – nech im v chromatickom diagrame zodpovedajú body A,B,C. (Keďže chromatický diagram vyjadruje všetky možné farebné odtiene vyskytujúce sa v reálnom svete, body A,B,C nemôžu byť mimo chromatický diagram.) Farebné odtiene, ktoré môžeme vyrobiť, sa nachádzajú vo vnútri trojuholníka ABC. Kvalita farebného výstupu, tj. množstvo reprodukovateľných farebných odtieňov, závisí od voľby základných farieb. Pri ich výbere sú preto prirodzené dve podmienky. Snažíme sa, aby:

1. plocha trojuholníka ABC bola čo najväčšia, 2. oblasť bielej farby bola vo vnútri trojuholníka ABC.

Často sa môžete stretnúť s metodicky nesprávnymi interpretáciami chromatického diagramu: farebne sa vypĺňa celá jeho plocha, ako je to na príklade Obr. 2.6b). To však principiálne nie je možné – farebne správne sa môže vyplniť len vnútro trojuholníka tvoreného vrcholmi, ktoré zodpovedajú základným farbám (pigmentom) daného zariadenia. Napr. nemôžeme na monitori vyrobiť „viac červenú farbu”, ako je základný červený bod monitora (ktorý sa zobrazí do vrcholu trojuholníka), aj keď si takú farbu vieme predstaviť a v reálnom svete ju môžeme registrovať(resp. nachádza sa v reálnom spektre).

Page 26: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

a) b)

Obr. 2.6 Chromatický diagram v CIE kolorimetrickej sústave. a) Správne interpretovaný, b) nesprávne interpretovaný: všetky zobrazené farby musia byť vo vnútri vyznačeného trojuholníka. (Pritom vrcholy trojuholníka by mali mať „najviac červenú”, „najviac zelenú” a „najviac modrú” farbu dosiahuteľnú daným výstupným zariadením.) Farby, ktoré sú v chromatickom diagrame mimo trojuholník nie sme schopní v skutočnosti zobraziť, hoci v prírode ich dokážeme vidieť.

To znamená, že pre dané konkrétne výstupné zariadenie sú čisté farby tie, ktoré tvoria hranicu trojuholníka základných farieb tohto zariadenia (a chromatickým diagramom daného zariadenia môžeme nazývať práve tento trojuholník) – tak to budeme chápať v ďalšiom texte. Pravdaže čitateľovi príde na myseľ pochybnosť – z bežného života máme takú skúsenosť, že dnešné monitory, ale i ostatné výstupné zariadenia sú schopné verne zobrazovať farby (a reklama nás uisťuje, pravdaže nesprávne!!! že najnovšie monitory zobrazujú všetky farby). To je práve preto, že základné farby tvoria trojuholník, ktorý pokrýva veľkú časť chromatického diagramu a preto pre bežný život nám vlastne nezobraziteľné farby ani veľmi nechýbajú. Ale na pochopenie problému je možné vykonať nasledujúci experiment z oblasti chuťových vnemov: na krabičke sacharínu sa dočítate, že je zhruba 100-krát sladší ako bežný cukor. Tým síce získate nejakú predstavu, ako asi je sacharín sladký (tj. môžete to nejako, dokonca i graficky zobraziť – toto je v prípade farieb chromatický diagram), ale skutočnú jeho sladkosť môžete vnímať len jeho ochutnaním. Ochutnaním cukru v žiadnom prípade nie! (Cukor v tomto kontexte predstavuje základný pigment nášho výstupného zariadenia. Teraz, keď už vieme, aký formalizmus sa používa pre vyjadrenie farebnosti (farebný odtieň a sýtosť, resp. čistota farby) pozrime sa na mechanizmus, ktorý nám dovolí zahrnúť aj tretí atribút – intenzitu.

2.5.1 RGB model Vyššieuvedené farby A,B,C interpretujme ako bázové vektory 3D priestoru. A = (1,0,0), B=(0,1,0), C=(0,0,1). Všetky dosiahnuteľné farby sa dajú vyjadriť v tvare

Page 27: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

, cCbBaAX ++=kde . 1,,0 ≤≤ cba Ako sme uviedli vyššie, takto definovaná oblasť tvorí jednotkový kváder. Keďže za bázové farby sa vyberajú červená, zelená a modrá, namiesto všeobecného označenia A,B,C, a,b,c sa zaužívalo R,G,B, r,g,b (R=Red, G=Green, B=Blue). RGB model je základným modelom pre formálne spracovávanie farieb počítačom. Každý z farebných kanálov sa uvažuje ako nezávislý. Vrcholy sa zvyknú označovať ako K=blacK, R=Red, Y=Yellow, G=Green, C=Cyan, B=Blue, M=Magenta, W=White, Obr. 2.7 a). Na telesovej uhlopriečke KW sú šedé odtiene. Farby na uzavretej lineárne lomenej čiare RYGCBMR (všimnite si, že je priestorová!) sú čisté farby pre dané výstupné zariadenie, tj. práve tie, ktoré sú v chromatickom diagrame výstupného zariadenia na hranici trojuholníka. Preto v skutočnosti nemožno vložiť chromatický diagram výstupného zariadenia do jeho RGB modelu tak jednoducho, ako by čitateľ očakával z Obr. 2.5. A práve preto sa konštruujú nasledujúce modely.

2.5.2 HSL model Hue (odtieň), Saturation (čistota), Lightness (svetelnosť). Transformáciu RGB modelu do modelu HSL si môžeme predstaviť nasledujúcim spôsobom: budeme „deformovať” kocku tak, že vrcholy tvoriace priestorový 6-uholník presunieme do jednej roviny a vrchol

RGB ,,,,,, MBCGYRW umiestnime symetricky (podľa tejto roviny)

k vrcholu K. Výsledkom je 6-boký dvojihlan s vrcholmi W a K, Obr. 2.7 b). Záverečnou „deformáciou” zmeníme tento dvojihlan na dvojkužeľ, Obr. 2.7 c).

2.5.3 HSV model Vyššie vytvorený dvojkužeľ budeme ďalej deformovať tak, že „biely” vrchol W „vtlačíme” do roviny vrcholov R,Y,G,C,B,M, do stredu podstavy, Obr. 2.7 d).

a) b) c) d)

Obr. 2.7 Schématické porovnanie modelov a) RGB, b),c) HSL, d) HSV.

Umiestníme takto vytvorený kužeľ s polomerom podstavy r a výškou h=1 do cylindrickej sústavy zr ,,φ tak, aby vrchol kužeľa bol v bode ( )0,0,0 a os kužeľa bola totožná s osou " z ", potom pre bod Q (Obr. 2.8) získame hodnoty farebných charakteristík

H=φ (Hue - farebný odtieň), Szr =/ (Saturation - sýtosť),

Vz = (Value - intenzita).

Page 28: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

Obr. 2.8. Geometrické vyjadrenie farebných charakteristík modelu HSV.

Oba modely HSL a HSV sú prirodzenejšie pre pre ľudské vnímanie ako RGB, pričom očividne HSL je bližší modelu RGB, kým HSV model je bližší fyzikálnej podstate – chromatickému diagramu. Napr. L - lightness vyjadruje symetriu bielej a čiernej pri miešaní farebných pigmentov: z červenej vyrobíme ružovú pridaním bieleho pigmentu. Tmavočervenú naopak, pridaním čierneho pigmentu. Preto je z hľadiska technológií miešania farieb HSL model prirodzený. HSV model viac vystihuje fyzikálnu podstatu: horizontálny rez kužeľom dáva vlastne chromatický diagram zariadenia pre fixovaný stupeň intenzity žiarenia. (Pravdaže „deformovaním” sme zmenili trojuholník na kružnicu.) Z ďalších farebných modelov stoja za zmienku systémy, ktoré pracujú zároveň vo farebnom i čierno-bielom režime. Pre prevod farieb na adekvátnu škálu šedých odtieňov tak, aby výsledok zostal prirodzený, je používaný empirický vzťah

( 2.5) BGRY .114,0.578,0.299,0 ++= .

Pozor, y zo vzťahu ( 2.2) a Y zo vzťahu ( 2.5) nesúvisia! Napr. pri prenose TV signálu z dôvodu spätnej kompatibility ČB príjmačov na farebný signál, nie je priame používanie RGB modelu vhodné. Preto jedna z prenášaných zložiek je totožná s uvedenou zložkou Y v (3.4). Napr. podľa normy PAL sa farebný signál prenáša v zložkách Y,U,V:

( 2.6) . ⎟⎟⎟

⎜⎜⎜

⎟⎟⎟

⎜⎜⎜

−−−−=

⎟⎟⎟

⎜⎜⎜

BGR

VUY

100,0515,0615,0437,0289,0141,0114,0587,0299,0

Existujú i ďalšie modely pre podobné účely (SECAM, NTSC, YCBCR). Spoločným pre nich je práve prenos zložky Y.

Page 29: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

Na záver krátke zhrnutie:

• Existujú dva základné mechanizmy pre miešanie farieb – aditívny a subtraktívny. • Formalizmus farebného videnia popisujú Grassmannove zákony. • Na jednoznačné určenie farby potrebujeme tri hodnoty. • Chromatický diagram formalizuje dve zložky farebného vnímania ľudského oka –

čistotu farby a farebný tón. • Farebné modely zjednodušujú mechanizmus miešania farieb.

A ešte niekoľko kontrolných otázok:

1. Čo znamená lineárna závislosť farieb (ukážte v chromatickom diagrame trojicu takých farieb, z ktorých sa nedá namiešať ľubovoľná farba).

2. Akú hodnotu y v ( 2.5) má žltá farba maximálnej intenzity (jasu)? 3. Aký musí byť vzájomný pomer intenzít červenej a modrej farby, aby sa v Č/B

zobrazení javili rovnako? 4. V MS-windows-ovských aplikáciách nájdete pre prácu s farbami grafický

nástroj z Obr. 2.9, prezentovaný ako HSL model. Ako by ste našli vzťah medzi ním a HSL modelom, vysvetleným v texte?

Obr. 2.9. HSL model v MS-windows-ovských aplikáciách.

Page 30: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

3 Spracovanie rastrového obrazu Medzi typické úlohy spracovania rastrového obrazu patria 1. zmena intenzít jednotlivých farebných zložiek, 2. odstránenie nežiadúcich náhodných chýb - šumu, 3. potlačenie nežiadúcej "schodovitosti" použitého vzorkovania, 4. kompresia obrazu. S takými úlohami sa stretávame čoraz častejšie, keďže zariadenia, produkujúce rastrové obrazy (digitálne fotoaparáty a scannery) sú čím ďalej, tým viac dostupné: nezriedka automatická expozícia fotoaparátu nezvládne naše požiadavky, najmä v extrémnych svetelných podmienkach (1), pri „záchrane“ starých fotografií sa spravidla nevyhneme nutnosti odstrániť dôsledky poškodenia, či ušpinenia (2), veľké dátové súbory sú pre manipuláciu (napr. elektronický spôsob posielania) nevhodné (4). V tejto kapitole sa zmienime o metódach podobných gamma-korekcii ktoré potrebujeme pre úlohy typu 1, ukážeme princípy jednej veľmi dôležitej matematickej operácie – konvolúcie, ktorá nám pomôže riešiť úlohy typu 2 a 3. Tiež si vysvetlíme niektoré postupy, využívané pri kompresii rastrových obrázkov – úloha typu 4. K riešeniu týchto úloh môžeme používať priame metódy, tj. také, že vstupný obraz sa úpravami mení bezprostredne na výstupný obraz, alebo nepriame metódy, keď k obrazu vytvoríme určitú charakteristiku, tú zmeníme a na základe toho vytvoríme transformovaný obraz. Z minulej kapitoly vieme, že na jednoznačné určenie farby potrebujeme tri hodnoty. Keď budeme uvažovať napr. RGB model, obraz môžeme rozložiť na tri monochromatické obrazy a každý farebný kanál spracovávať zvlášť. Preto úplne stačí, keď idey, ktoré sú v pozadí metód na spracovanie obrazu, vysvetlíme na achromatických obrázkoch, tj. takých, ktoré používajú len škálu šedých odtieňov. Rastrový obraz sa vyznačuje tým, že je v ňom obsiahnutá dvojaká diskretizácia: • priestorová diskretizácia – vzorkovanie, tj. rozklad plochy na pixely, • jasová diskretizácia – kvantovanie, tj. diskretizácia oboru hodnôt obrazovej funkcie. Ľudské oko je schopné rozlíšiť zhruba 100 stupňov šedi, pričom veľakrát i menšia škála stačí k tomu, aby prechody medzi jednotlivými stupňami sme vnímali spojite – skúste si to overiť pri nastavení rôznych farebných paliet. Kvantovanie – to je práve určenie počtu stupňov šedi, ktoré v obrázku vyžadujeme. Z matematického hľadiska je rastrový obraz (obrazová funkcia) po častiach konštantná funkcia dvoch premenných, pričom oblasti konštantnej hodnoty sú z oboch strán obmedzené (z jednej strany veľkosťou pixelu, z druhej strany veľkosťou obrazu). Diskretizácia vedie k určitému nesúladu reálnej predlohy a výsledného rastrového obrázku – aliasing. Spravidla sa pod aliasingom rozumie chyba vzorkovania.

Page 31: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

3.1 Priama zmena škály intenzity V tejto metóde ide o bezprostrednú zmenu oboru hodnôt obrazovej funkcie, meníme teda kvantovanie. To znamená, že hodnotu intenzity každého pixelu zameníme novou hodnotou podľa vopred zvoleného pravidla. Sem patrí i gamma korekcia – metóda, ktorá potlačuje nežiadúci efekt linearizácie intenzity (ktorý je spôsobený rozdielom logaritmickej škály vnímania a lineárnej škály emulácie intenzity) – Obr. 3.1b).

a) b) c) d)

Obr. 3.1 Zmena intenzity: a) originál, b) výrazné zosvetlenie „tmavších šedých odtieňov“ (gamma korekcia – číselná hodnota gamma vyjadruje mieru odchýlenia danej krivky), c) výrazné zosvetlenie „svetlejších šedých odtieňov“ d) automatické vyváženie šedých odtieňov. (spracované pomocou Corel PHOTO-PAINT v.9). V grafoch je na horizontálnej osi vynášaná pôvodná hodnota intenzity, na vertikálnej osi nová hodnota intenzity.

Táto metóda býva v určitej forme implementovaná spravidla do každého bežného SW pre spracovanie obrázkov. Funkcie pre zmenu intenzity bývajú preddefinované, prípadne interaktívne modifikovateľné.

3.2 Konvolučné metódy Konvolúcia patrí medzi veľmi dôležitý nástroj, používaný pri spracovávaní obrazu. Ukážeme si jeho využitie pre riešenie troch rozdielnych problémov:

1. potlačenie „kostrbatosti“ rastrovej reprezentácie, tj. anti-aliasing, 2. potlačenie šumu v rastrových obrazoch, 3. nájdenie hranice oblasti

Page 32: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

Konvolúciu si môžeme predstaviť ako pohľad cez okienko, ktorým sa na rastrovú mriežku pozeráme. Pixelu, ktorý je uprostred okienka, priradíme aritmetický priemer hodnôt všetkých pixelov, ktoré cez okienko vidíme. Pre najjednoduchší prípad – okno veľkosti 3x3 pixely, to formálne zapisujeme takto:

( ) ( )jyixfayxFj

iji

−−= ∑∑−=−=

,91,

1

1

1

1

.

Používa sa i viac „skratkovitá“ symbolika

( ) ( )( ),,, yxfayxF ⊗=

kde ⎟⎟⎟

⎜⎜⎜

⎛=

111111111

91a je konvolučná maska,

a f(x,y) je pôvodná hodnota pixelu so súradnicami (indexami) x,y.

Operácia ⊗ sa nazýva konvolúcia. Prostý aritmetický priemer znamená, že všetky pixely okienka považujeme za rovnocenné. V skutočnosti však niektoré pixely majú spoločnú celú hranu, niektoré len jeden vrchol. Teda miera ich vzájomnej blízkosti je rôzna. Preto pre zachytenie rôznej miery susednosti, a tým pre vyjadrenie rôznej miery vplyvu pixelov z okolia na hodnotu obrazovej funkcie v danom bode (x,y) sa často používa konvolučná maska

⎟⎟⎟

⎜⎜⎜

⎛=

121242121

161a ,

tj. namiesto prostého priemeru sa používa vážený priemer hodnôt z okolia. Takéto priemerovanie má za následok, že veľké rozdiely hodnôt susedných pixelov sa zmenšujú, čím sa zmenšuje i efekt „kostrbatosti” rastrového obrazu. S potlačením chyby vzorkovania tieto metódy zároveň potlačujú i náhodný šum v obraze. Vskutku, napr. na čiernom pozadí ( ) 0, =yxf bude mať izolovaný biely pixel s hodnotou

po aplikovaní prostého priemerovania hodnotu ( ) 63, =yxfin ( ) 7, =yxfout Je ale pravdou, že plocha izolovaného bodu sa po priemerovaní zväčší – hodnotu 7 budú mať i bezprostrední susedia pixelu (x,y).

.

Aplikujte konvolučnú metódu prostého priemerovania s maskami rôznych veľkostí, napr. 3x3, 5x5, a metódu váženého priemerovania s maskou 3x3 na obrázok so vstupnou škálou intenzít 0 – 9.

Page 33: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

0999099900090009

9999999999999999

9999999099009000

0000000000000000

9999999099009000

0000090000000000

Obr. 3.2 Jednoduchá predloha rastrového obrázku.

Konvolúcia je definovaná len na vnútorné pixely obrázku. Hraničné pixely je možné najjednoduchšie ošetriť tak, že pôvodný obraz rozšírime z každej strany o jeden pixel, jednoduchým prekopírovaním hodnôt pôvodnej hranice a konvolúciu aplikujeme na vnútorné pixely takto vzniknutého obrázku.

• Čo sa stane s rozhraním hodnôt 0 a 9? • Ako budú jednotlivé masky reagovať na náhodný šum dodaný do obrázku?

Viac o tejto problematike čitateľ nájde napr. v knihe [Ferko].

3.3 Detekcia hrán V kontexte konvolučných metód stojí za zmienku i metóda, ktorá vo svojej podstate patrí do inej, veľmi dôležitej oblasti — úlohy rozpoznávania obrazu. Detekovaním hrán sme totiž schopni vyseparovať z rastrového obrazu vektorový objekt. Ako bolo v úvode povedané, rastrová reprezentácia nemôže úplne nahradiť reprezentáciu vektorovú. S rozširovaním použitia scannerov, digitálnych kamier a digitálnych fotoaparátov, tj. rastrových vstupných zariadení, úloha rozpoznávania obrazu, tj. jeho prevod z rastrovej do vektorovej formy, sa stáva veľmi rozšírenou v rôznych oblastiach. Predpokladajme, že oblasti sa vyznačujú temer konštantnou hodnotou svojej farby, tj. rozdiel hodnôt susedných pixelov bude malý. Naopak, rozdiel hodnot susedných pixelov na hranici oblasti bude veľký. Vidíme tak, že rozdiel dobre indikuje hranicu oblasti. Pre výpočet rozdielu je vhodné uvažovať všetky možné smery. Najjednoduchšia forma rozdielových konvolučných masiek Rh, Rv, Rd1, Rd2, vedie k charakteristike, zvanej Robertsov operátor, ktorý má tvar: ( ) ( ) ( ) ( ) ( )yxfRyxfRyxfRyxfRyxR ddhv ,,,,, 21 ⊗+⊗+⊗+⊗= kde

⎟⎟⎠

⎞⎜⎜⎝

⎛−=⎟⎟

⎞⎜⎜⎝

⎛ −=⎟⎟

⎞⎜⎜⎝

⎛−=⎟⎟

⎞⎜⎜⎝

⎛−=

1001

,0110

,0011

,0101

21 ddhv RRRR .

Aplikujte Robertsov operátor na vyššieuvedený príklad.

Page 34: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

Viac o tejto problematike čitateľ nájde napr. v knihe [Ferko].

3.4 Bezstratová komprimácia Základný spôsob reprezentácie rastrového obrazu je sekvenčný zápis hodnôt jednotlivých pixelov. Pričom buď uchovávame každú farebnú zložku pre každý pixel osobitne (tj. pre každý pixel uchovávame tri číselné hodnoty), alebo vytvoríme paletu farieb, tj. každej použitej farbe priradíme jej index a pre každý pixel uchovávame len tento index. Tento prípad pravdaže vyžaduje pre každý obraz uchovávať niekde informáciu o použitej palete. Skúste sa zamyslieť nad tým, za akých podmienok bude pamäťovo výhodnejšie použiť prvý a kedy druhý spôsob. V ďalších úvahách pre jednoduchosť predpokladáme, že obraz je reprezentovaný pomocou palety, tj. jednou číselnou hodnotou pre každý pixel. Takúto reprezentáciu budeme nazývať základnou reprezentáciou. Keďže nároky na pamäť pri reprezentácii sú pomerne vysoké, (napr. pri použití 1 Byte na pixel potrebujeme pre obrázok s rozlíšením 1000x1000 pixelov 1 MB pamäti) je snaha o používanie úspornejších spôsobov ako je základná reprezentácia – komprimačné metódy. Používajú sa jednak všeobecné komprimačné metódy, použiteľné pre ľubovoľnú informáciu, jednak metódy vyslovene „grafické“. Základná vlastnosť všeobecných komprimačných metód spočíva v bezstratovosti komprimovania, tj. že pri komprimácii odstraňujeme len tú časť informácie, ktorá je v kódovanej sekvencii nejakým spôsobom viacnásobne uložená. Pri spätnej rekonštrukcii dostávame dáta, identické s originálom. Napr. Huffmanovo kódovanie využíva nerovnomernú dĺžku bitového kódu pre každý znak, pričom znaky s najväčším výskytom majú najkratší bitový kód a naopak. Dá sa pritom zostrojiť také kódovanie, že bitový kód žiadneho znaku nie je zároveň predponou bitového kódu iného znaku, čo dovoľuje jednoznačné dekódovanie i bez použitia oddeľovača. Táto vlastnosť sa volá prefixnosť kódu. Hlavná myšlienka LZW kódovania (Lempel-Ziv-Welch) spočíva v tom, že každé opakovanie slova v dátovej sekvencii je nahradené identifikátorom daného slova. Pritom prvý výskyt je vo výstupnej sekvencii nekomprimovaný - vtedy mu priradzujeme identifikátor. Takto dynamicky generovaný slovník identifikátorov nie je nutné uchovávať. Slovník sa generuje podobne aj pri dekompresii. Tento spôsob je použitý u štandardného komprimovania typu zip. Bližšie si popíšeme veľmi rozšírenú komprimačnú metódu, ktorá je vyslovene grafická. RLE (Run Length Encoding) je bezstratová metóda, ktorá vychádza z predpokladu, že v obrázku sú spravidla vždy väčšie plochy ako jeden pixel, ktoré sú jednej farby. Potom napr. namiesto postupnosti hodnôt pixelov

... 2 2 2 10 10 10 10 10 13 13 13 ... je výhodnejšie použiť zápis

Page 35: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

... 3 2 5 10 3 13 ..., tj. obrázok je kódovaný dvojicami čísel: počet, farba. Kompresný pomer (čiže pomer veľkostí súboru pred a po komprimácii) závisí na smere načítavania dát: spravidla sa používa načítavanie „po riadkoch“, resp. „po stĺpcoch“. Avšak nie vždy musí viesť táto metóda ku komprimácii. Skúste nájsť príklad, keď výsledok komprimácie bude horší, ako nekomprimovaná predloha. RLE kompresia sa uplatňuje napr. pri formátoch gif, tiff, bmp.

3.5 Komprimácia so stratou Pre grafické aplikácie je možné používať stratové kompresie, tj. taký spôsob uchovania pôvodného obrazu, pri ktorom jeho rekonštrukcia z komprimovaného kódu nie je totožná s originálom. V praxi sa ukazuje, že napr. zníženie kvality obrazu na 75% je vo väčšine prípadov nepozorovateľné, pritom možno dosiahnuť kompresné pomery až 25 : 1. Nástroj pre kreslenie – MS PaintBrush používa formát *.BMP v základnej forme, tj. základnú reprezentáciu bez komprimácií. Vygenerujte obrázok a postupne ho uchovávajte (režim Uložit jako) s rôznou škálou použitej palety. Zredukovaním použitej palety môžeme výrazne skomprimovať i základnú reprezentáciu. Rozumným zredukovaním použitej palety môžeme napr. vyrobiť varianty kompresie RLE so stratou. Predtým, než si vysvetlíme, ako funguje metóda, ktorá je základom dnes veľmi často používaného formátu JPEG, musíme aspoň trochu ozrejmiť nutný matematický aparát.

3.5.1 Trochu vysokej matematiky To, čo si budeme chcieť vysvetliť, je vyjadrenie jednej funkcie pomocou postupností iných, z určitého hľadiska jednoduchších funkcií. Pritom sa obmedzíme na bodové jednorozmerné funkcie. Predstavme si totiž jeden riadok rastrového obrazu, kde na osi x je index príslušného pixelu a na os y vynášame hodnotu intenzity jasu daného pixelu. Dostaneme tak „bodovú“ funkciu, tj. funkciu definovanú v izolovaných bodoch. V pozadí týchto metód je prístup, ktorý je možné ilustrovať geometricky: každý rozmerný vektor sa dá vyjadriť ako lineárna kombinácia bázových prvkov (vektorov) ,

−nnee rr ,...,1

( 3.1) nneaeax rrr ...11 +=

kde sú projekcie vektora na príslušné bázové prvky – zložky vektora. ia Podobným spôsobom sa dá pracovať aj s funkciami. Napr. hodnoty funkcie sin x sa dajú vypočítať pomocou mocninového radu (Taylorov rozvoj):

Page 36: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

( 3.2) L−⋅⋅⋅⋅

+⋅⋅

−=54321321

sin53 xxxx

Z hľadiska vyššieuvedeného to môžeme interpretovať tak, že máme bázové prvky – funkcie

( 3.3) ( ) ( ) ( ) ( ) LL ,,,,,1 2210

nn xxvxxvxxvxv ====

zložky

( ) ⎟⎟⎠

⎞⎜⎜⎝

⎛−−= LLL ,

!71,0,

!51,0,

!31,0,1,0,,, 10 naaa

a vzťah ( 3.2) je vlastne vyjadrením funkcie pomocou bázy ( 3.3), analogicky vyjadreniu ( 3.1), len namiesto konečnej sumy máme sumu nekonečnú:

xsin

( ) ( ) ( ) LL ++++= xvaxvaxvax nn1100sin

Je užitočné si uvedomiť, že tak to vlastne vypočítavajú počítače, pričom sa využíva vlastnosť konvergencie radu ( 3.2), tj. samozrejme namiesto nekonečného radu sa spočíta rad konečný. Dá sa dokázať, že pre „dobré“ funkcie (kam patria i naše bodové funkcie) je vhodnejšie niekedy používať namiesto ( 3.3) inú sadu bázových funkcií. Napr.

( 3.4) ( ) ( ) ( ) ( ) LL ,cos,,2cos,cos,1 210 xnxuxxuxxux ( )nu πππ ====

kde , sa nazýva Fourierova cosínusová báza. ⟩⟨∈ 1,0x Tieto bázové funkcie majú charakter vĺn rôznych frekvencií, preto zápis

( 3.5) ( ) ( ) ( )xuaxuaxf j

n

jjnj

jj ⋅=⋅= ∑∑

=∞→

= 00

lim

sa niekedy nazýva rozklad na spektrum. Keďže frekvencie bázových funkcií sa menia „skokom“ používa sa tiež označenie diskrétna Fourierova transformácia s bázou ( 3.4). Odpoveď na otázku, prečo je vhodná práve báza ( 3.4), ako i všeobecná formulácia podmienok, ktoré funkcia f(x) musí splniť, aby limita ( 3.5) vôbec existovala, je vec veľmi netriviálna, a ďaleko presahuje rámec tohto predmetu. Záujemci nech siahnu napr. po knihe [Kufner]. Pre nás je ale dôležité, že na naše bodové funkcie vzťah ( 3.5) aplikovať môžeme. V postupnosti konečných súčtov

( ) ( )xuaxS j

n

jjn ⋅= ∑

=0

Page 37: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

s rastúcim n približujeme pôvodnú funkciu zachytením čím ďalej, tým jemnejších jej detailov. Toto je podstatou • komprimačných metód (namiesto zápisu obrazovej funkcie „bod po bode“

vyjadrujeme ju približne, pomocou n+1 bázových funkcií, tj. stačí si pamätať práve n+1 koeficientov a miera kompresie je daná práve počtom uvažovaných naaa L,, 10

koeficientov), • odstraňovania náhodného bodového šumu. Na vyjadrenie izolovaného bieleho pixelu

potrebujeme bázové funkcie vysokej frekvencie, tj. ignorovaním vysokých frekvencií šum eliminujeme (ale bohužiaľ môžeme stratiť i jemné detaily, ktoré sú „považované za šum“).

Pre obrazové funkcie (vďaka konečnej veľkosti minimálneho delenia - pixelu) dokonca platí, že na jej presné vyjadrenie nepotrebujeme nekonečnú sumu ( 3.5), ale stačí nám len konečný počet bázových funkcií (Shannonova veta) [Žára]. Vplyv modifikácie spektra ukážeme na jednoduchom príklade. Pre výpočty sa obmedzíme na 8-bodovú obrazovú funkciu. (Také obmedzenie sa použije preto, že napr. pri realizácii JPEG formátu sa analogickým spôsobom 2D obraz rozdelí na podobrazy 8x8 pixelov a každý tento podobraz sa spracováva zvlášť.) V tomto prípade uvažujeme bázové funkcie

( 3.6) ( ) .7,1,

1612cos

21)(,

221)(0 L=

+== jjxxuxu j

π

Pre výpočet spektra platia vzťahy

( ) )(7

0xuxfa j

xj ⋅= ∑

=

a pre spätný výpočet funkcie máme vzťahy

. ( ) ∑=

=7

0)(

jjj xuaxf

Napríklad pre funkciu

x 0 1 2 3 4 5 6 7 f(x) 0 10 20 30 20 10 0 0

dostávame spektrum

j 0 1 2 3 4 5 6 7 aj 31,820 7,911 -26,924 -8,657 3,536 0,229 -0,328 -3,524

a čiastočné súčty

( ) 7,,0)(0

K=⋅= ∑=

nxuaxS j

n

jjn

sú nasledujúce

Page 38: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

X 0 1 2 3 4 5 6 7 S0(x) 11 11 11 11 11 11 11 11 S1(x) 15 15 13 12 10 9 8 7 S2(x) 3 9 19 24 23 14 3 -4 S3(x) 0 10 23 27 21 10 2 0 S4(x) 0 9 22 28 22 9 1 0 S5(x) 0 9 22 28 22 9 1 0 S6(x) 0 9 21 28 22 9 1 0 S7(x) 0 10 20 30 20 10 0 0

3.5.2 Mechanizmus JPEG formátu Medzi najvýznamnejšie dnes používané stratové metódy patrí metóda navrhnutá skupinou JPEG (Joint Photographic Expert Group). Hlavná myšlienka spočíva vo • využití vyššieopísanej diskrétnej Fourierovej transformácie

(ale dvojrozmerný variant!), • stratovej úprave spektra, • bezstratovej komprimácii upraveného spektra. Priblížime hlavné myšlienky metódy na 1-rozmernom príklade z minulej kapitoly. Vidíme, že S7 presne rekonštruuje pôvodnú funkciu – čo je síce dobré (bezstratovosť), ale samotný rozklad funkcie na spektrum sám o sebe ešte neprináša komprimáciu: na plné určenie funkcie potrebujeme 8 hodnôt; v prípade použitého spektra potrebujeme tiež 8 hodnôt. Podstatný je fakt, že napr. už čiastočná suma S3 (na jej generovanie potrebujeme vedieť iba štyri koeficienty a0 – a3 !) dostatočne dobre aproximuje pôvodnú funkciu. Tu nastáva jednak komprimácia, no bohužiaľ i stratovosť. Z tabuľky čiastočných súčtov vidíme, že s rastúcim indexom čiastočnej sumy zlepšuje sa i samotný výsledok – avšak na druhej strane, rastú i pamäťové nároky (na výpočet čiastočnej sumy Si potrebujeme vedieť i+1 koeficientov a0 a1 … ai). Dvojrozmerný variant funguje podobne: obraz sa rozdelí na podobrazy 8x8 pixelov a na každom z nich sa realizuje 2D diskrétna cosínusová transformácia s bázou ( 3.6).Výsledkom sú matice spektier veľkosti 8x8.

( ) )()(,7

0

7

0yuxuyxfa ji

x yij ⋅⋅= ∑∑

= =

.

Podľa požiadavkov na kvalitu sa každé spektrum A upravuje počlenným celočíselným

delením vopred definovanou maticou E, tj. ⎟⎟⎠

⎞⎜⎜⎝

⎛=

ij

ijij e

ab int , kde matica E je jedna pre celý

obraz. Napr. podľa [Žára] pre 75% kvalitu obrazu je matica

Page 39: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥

⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢

=

9910310011298959272101120121103877864499211310481645535247710310968563722186180875129221714566957402416131455605826191412126151402416101116

E

Takto upravené spektrum B obsahuje nenulové členy len v okolí nízkych frekvencií (okolo ľavého horného prvku), preto pre jeho uchovanie sa dá využiť napr. RLE kódovanie „po uhlopriečke“. Spätná transformácia je opäť realizovaná podobne ako 1D prípad:

( ) )()(,7

0

7

0yuxuayxf ji

x yij ⋅⋅= ∑∑

= =

.

Podrobnejší popis nájde záujemca v [Žára]. Pre ilustráciu uvedieme príklad spracovania pri 75% kvalite komprimovaného obrazu. pôvodný obrázok: spektrum ( )ijaA =

000001010000002163310000216363310002163636331001063636363310010313131312000000000000000000

⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜

−−−−−−−−−−−−−−

−−−−−−−−−−

−−−−−−−−−

=

19.951.264.540.050.283.249.394.135.619.711.507.664.018.218.267.089.283.1103.003.1954.431.944.479.2403.111.108.1088.736.1972.1691.1037.1310.412.590.700.930.2983.455.1908.075.143.534.760.044.1019.7836.1363.9807.586.156.144.1091.3380.885.2693.2008.287.983.738.2067.4126.8435.3913.125

A

uchovávané spektrum B = (bij), rekonštruované spektrum

kde ⎟⎟⎠

⎞⎜⎜⎝

⎛=

ij

ijij e

ab int ( ) ijijijij beaaA ⋅=′′=′ ,

⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜

−−−−−

−−−

=

0000000000000000000000010000000100001010000005170000212200013848

B

⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜

−−−−−

−−−

=′

00.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.2400.000.000.000.000.000.000.000.1800.000.000.000.000.2900.000.1700.000.000.000.000.000.000.8000.1300.9800.000.000.000.000.3800.1400.2400.2400.000.000.000.2400.4800.8000.4400.128

A

Page 40: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

rekonštruovaný obraz rozdiel pôvodného

a výsledného obrázku

5087822160602833462801142656643433725497069370021466166593496143236322615271400314735125793

−−−

−−−−

−−−

−−−

50878126060281217301145713337414766001117234396415155271400314735125793

−−−−−

−−−−−−

−−−−−−−−

−−−

br. 3.3 Grafická reprezentácia pôvodného a rekonštruovaného obrázku. Záporné hodnoty u 63.

a záver tejto náročnej kapitoly príde vhod zhrnutie.

edzi dôležité úlohy spracovania obrazu patria:

Ov rekonštruovanom obraze sú nahradené nulou, hodnoty väčšie ako 63 sú nahradené hodnoto

N M

• zmena intenzít jednotlivých farebných zložiek, • odstránenie nežiadúcich náhodných chýb - šumu, • potlačenie nežiadúcej "schodovitosti" použitého vzorkovania, • kompresia obrazu.

Významnú úlohu hrajú konvolučné metódy, ktoré dokážu

• eliminovať šum, • potlačiť „schodovitosť“ kontúr, ktorá je spôsobená rasterizáciou.

Najviac priestoru sme venovali metódam založeným na myšlienke rozkladu obrazovej funkcie na bázové funkcie. Tieto prístupy dovoľujú

• eliminovať šum ktorý sa nachádza v obraze, • významným spôsobom komprimovať grafickú informáciu.

Page 41: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

Po zvládnutí „rastrových problémov“ prejdeme teraz k problematike prevodu vektorovej grafickej informácie na rastrovú. Dôležitosť toho kroku je daná tým, že základné výstupné zariadenia sú rastrového typu, preto pri práci s vektorovou grafikou v každom prípade musíme proces rasterizácie podstúpiť.

4 Rýchly algoritmus rasterizácie kriviek Úsečka je asi najčastejšie sa vyskytujúci objekt v počítačovej grafike. Jej dôležitosť spočíva v tom, že postupnosťou úsečiek

( ) ( ) ( )mm PPPPPP ,,,,,, 12110 −K , kde ( )iii yxP ,= , tj. lineárne lomenou čiarou, môžeme pri vhodnom výbere bodov dostatočne dobre aproximovať ľubovoľnú spojitú krivku. Významným je i to, že úsečka je vlastne grafická reprezentácia lineárnej interpolácie – najjednoduchšieho, a pritom veľmi účinného spôsobu prenosu hodnôt z izolovaných uzlov do ich okolia.

iP

Keďže dnes bežné výstupné zariadenia sú rastrové, nevyhneme sa operácii, keď úsečku musíme transformovať z vektorovej reprezentácie do rastrovej. V kap. 3 sme sa stretli s úsečkou z pohľadu algebraického, tj. ako s množinou vážených priemerov krajných bodov. Vzhľadom na veľmi častý výskyt úsečky, je užitočné ukázať tento jednoduchý geometrický objekt i z pohľadu informatického, tj. z pohľadu efektivity algoritmickej realizácie. Pri riešení otázky efektivity si musíme uvedomiť, ktoré operácie sú „lacné“ a ktoré nie. Skúste sa zamyslieť nad tým, ako by ste zisťovali náročnosť jednotlivých „elementárnych“ operácií. V nasledujúcom texte budeme predpokladať, že

• operácie v celočíselnej aritmetike sú jednoduchšie ako operácie v reálnej aritmetike, • z aritmetických operácií je najnáročnejšie delenie, • operácia porovnania je jednoduchá.

Pri rastrovej reprezentácii potrebujeme nájsť tie uzly rastrovej mriežky, ktoré sú „najbližšie“ skutočným bodom zobrazovanej úsečky. Vychádzame z predpokladu, že úsečka je daná svojimi krajnými bodmi ( ) ( )KKKZZZ yxPyxP ,,, == a že hodnoty súradníc sú celočíselné. Budeme používať vyjadrenie úsečky v tvare

,BAxy += resp. 0=−+ yBAx ,

kde ZK

ZK

xxyyA

−−

= , ZZ AxyB −= , KZ xxx ≤≤ .

Je dostatočné obmedziť sa na prípady keď ,1||, << Axx KZ pretože

Page 42: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

• singulárne resp. sa riešia triviálne, KZ xx = KZ yy =• prípad prevedieme na požadovaný prehodením krajných bodov, KZ xx >• v prípade použijeme zápis v tvare 1|| >A

DCyABy

Ax +≡−=

1 , kde 1|| <C

a vo výslednom algoritme vzájomne zameníme x a y.

4.1 „Jednoduchý“ algoritmus s reálnou aritmetikou – DDA Budeme vypočítavať uzly rastrovej mriežky, ktoré reprezentujú úsečku. Pre hodnoty

KniiZ xxxxxx ≡+=≡ + ,1, 10 dostávame AyBAAXBAxyyy iiiiZ +=++=+=≡ ++ 110 , . Keďže nie je celočíselné (viď vyššieuvedený predpoklad), rastrovú reprezentáciu tvoria dvojice

A

( ) niyx ii ,...,0,)int(, = .

Z uvedeného vidíme, že podstatným rysom výpočtu (v literatúre sa uvádza pod názvom DDA, tj. Digital Differential Analyzer) je 1. použitie reálnej aritmetiky (výpočet hodnoty yi), 2. nutnosť použitia delenia reálných čísel (výpočet hodnoty ). A Zdrojový kód algoritmu možno vyjadriť napr. takto:

h1=2*(xk-xz); h2=h1-2*(yk-yz); h=h1-(yk-yz); A=(yk-yz)/(xk-xz); y=yz; for (x=xz; x<xk; x=x++) PutPixel(x,Int(y)); y=y+A;

kde procedúra PutPixel(x,y) vykresľuje bod na pozícii (x,y). Operácie v reálnej aritmetike sú však v porovnaní s aritmetikou celočíselnou spravidla podstatne pomalšie a môžu byť zdrojom nepresnosti (zaokrúhľovacia chyba). Preto algoritmy využívajúce len celočíselnú aritmetiku (tam, kde je to pravdaže možné), môžeme považovať

Page 43: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

za kvalitnejšie. Takže aj keď z pohľadu formulovania, je uvedený algoritmus jednoduchý, z pohľadu výpočtovej zložitosti to tak nie je. Ukážeme, že existuje algoritmus, ktorý využíva iba celočíselnú aritmetiku, a z hľadiska náročnosti realizovaných výpočtov je podstatne lepší.

4.2 Celočíselný (Bresenhamov) algoritmus Hlavnou myšlienkou toho, ako sa zbaviť reálnej aritmetiky je nasledujúca: Keď máme priamku v tvare

BAxy += znamená to, že výraz ( ) ( ) yBAxyxP −+== ,φφ klasifikuje body roviny do troch tried: ( yxP ,= ) ( ) PP ⇔< 0φ je „nad“ priamkou, ( ) PP ⇔= 0φ je „na“ priamke, ( ) PP ⇔> 0φ je „pod“ priamkou. Úsečku určujú jej krajné body, ( ) ( )KKKZZZ yxPyxP ,,, == , koeficienty A, B majú preto hodnoty

ZZZK

ZK AxyBxxyyA −=

−−

= , .

Pre zvolenú hodnotu x, pre ktorú KZ xxx ≤≤ hľadáme takú dvojicu bodov rastrovej mriežky

, že ( ) ( 1,,, +=′= yxPyxP ) ( ) 0≥Pφ a zároveň ( ) 0≤′Pφ . Takto nájdený bod P budeme považovať za bod rastrovej reprezentácie úsečky. Keďže súradnice krajných bodov môžeme uvažovať celočíselné (ide o body rastrovej

mriežky), koeficienty A,B sú racionálne čísla, cbB

caA == , , kde a,b,c sú celé, a

. 0≠−= ZK xxcNamiesto reálneho výrazu ( )Pφ , u ktorého nás zaujíma len znamienko, tak môžeme vyhodnocovať celočíselný výraz

( ) ( ) ( ) ( )PxxyBAxcP ZK φψ −=−+= .

Nasleduje detailné odvodenie algoritmu, ktorý okrem toho, že používa len celočíselnú aritmetiku, minimalizuje počet aritmetických operácií. To sa dosahuje tým, že vyhodnocovaný výraz ( )Pψ sa vypočítava rekurentne.

Page 44: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

Predpokladajme, že máme uzol rastru ( )iii yxP ,= , ktorý patrí do rastrovej reprezentácie analyzovanej úsečky. Takým bodom je napr. ( )ZZZ yxPP ,0 =≡ . Obmedzíme sa na prípad

( 4.1) ZKZKKZKZ xxyyyyxx −<−<< ,, ,

tj. na úsečky so sklonom menším ako 45°. Pre bod dostávame nasledujúce dve možnosti: 1+iP

( 4.2) ( ) ( ) ( ) 1,1,,1,, ''1

'1111 +++=∈= +++++ iiiiiiiii yxyxPPyxP .

Ináč povedané platí:

,11 +=+ ii xx 1,1 +∈+ iii yyy . Pre rozhodnutie o tom, ktorá z uvedených alternatív v( 4.2) nastane, budeme sa snažiť nájsť čo najjednoduchšie kritérium. Použijeme implicitný tvar priamky 0=−+ yBAx . Výraz

( 4.3) ( ) ( ) yBAxyxP −+== ,φφ

klasifikuje body roviny do troch tried: ( ) PP ⇔< 0φ je „nad“ priamkou,

( 4.4) ( ) PP ⇔= 0φ je „na“ priamke,

( ) PP ⇔> 0φ je „pod“ priamkou. Využijeme nasledujúcu úvahu: Vezmime stred úsečky 1+iQ ( )''

1'

1 , ++ ii PP :

⎟⎠⎞

⎜⎝⎛ +=

+= +

+++ 2

1,2 1

''1

'1

1 iiii

i yxPPQ

a analyzujme, do ktrorej z tried ( 4.4) bod patrí. Na základe obr 5.1. má zmysel nasledujúce rozhodovacie kritérium:

1+iQ

( 4.5) ( )( ) .10

,0

11

11

+=⇒≥=⇒<

++

++

iii

iii

yyQyyQ

φφ

Page 45: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

Obr. 4.1 Príklad kroku i, pre ktorý ( ) 01 >+iQφ . Vzhľadom na ( 4.4) to znamená, že bod Qi+1 je pod priamkou, tj. bod P’i+1 je k priamke bližšie, ako bod Pi+1. Preto v tomto prípade určíme yi+1 = yi+1.

Pre výpočet charakteristiky ( 1+= ii Qq )φ odvodíme rekurentný vzťah:

( ) =⎟⎠⎞

⎜⎝⎛ +==

21, 0110 yxQq φφ

( ) =−−++=−−+=211

21

0001 yBxAyBAx

( )21

21

21

000 −=−+=−+−+= AAPAyBAx φ

(keďže je z priamky, 0P ( ) 00 =Pφ ). Všeobecne pre dosadíme do ( 4.3): 1+iQ

( 4.6) ( )21

21, 111 −−+=⎟

⎠⎞

⎜⎝⎛ +== +++ iiiiii yBAxyxQq φφ .

Formálnym prepísaním vzťahu ( 4.6) pre ( )1+i -vý krok máme

21

21

11121 −−++=−−+= +++++ iiiii yBAAxyBAxq .

Odčítaním posledných dvoch vzťahov dostaneme ( )iiii yyAqq −−=− ++ 11 . Charakteristiky tak môžeme vypočítať postupne: iq

( 4.7) ( )iii yyAqqAqi

−−+=−= ++ 110 ,21

.

Využitím vzťahu ( 4.5) v ( 4.7) dostaneme

Page 46: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

21

0 −= Aq ,

( 4.8) 0≤iq ii yy =⇒ +1 , Aqq ii +=+1 ,

0>iq ii yy 11 +=⇒ + , 11 −+=+ Aqq ii . Keďže ( ) ( )ZKZK xxyyA −−= / , schéma ( 4.8) pracuje v reálnej aritmetike. Preto až doteraz táto metóda v porovnaní s DDA nedáva žiadne výhody (ba naopak, je ešte zložitejšia)! Použité kritérium je však zbytočne zložité: hodnotu totiž určujeme len na základe toho, 1+iyči charakteristika je kladná, resp. záporná. Z toho dôvodu sa snažíme pri výpočte hodnoty iq

iq zbaviť delenia. 1. dosadíme v ( 4.8) za ( ) ( )ZKZK xxyyA −−= / , 2. vynásobíme všetky vzťahy v ( 4.8) hodnotu ( )ZK xx −2 , 3. použijeme substitúciu ( ) 0,2 ≥−= iqxxh iZKi . Realizované operácie sú korektné, pretože podľa náško predpokladu ( 4.1) . 0>− ZK xx Dostávame tak výslednú schému, ktorá používa len celočíselnú aritmetiku: ( ) ( )ZKZKZZ xxyyhyyxx −−−=== 2,, 000

11 +=+ ii xx ,

( 4.9) ( )ZKiiiii yyhhyyh −+==⇒≤ ++ 2,0 11 ,

( ) ( ZKZKiiiii xxyyhhyy )−h −−+=+=⇒> ++ 22,10 11 . Ako bolo uvedené v predpoklade ( 4.1), schéma ( 4.9) pracuje pre úsečky so sklonom menším ako 45°. Ostatné prípady sa riešia jednoduchou modifikáciou uvedenej schémy. Napr. pre ZKZKKZKZ yyxxyyxx −<−<< ,, dostaneme ( ) ( )ZKZKZZ yyxxhyyxx −−−=== 2,, 000 , 11 +=+ ii yy

( 4.10) ( )ZKiiiii xxhhxxh −+==⇒≤ ++ 2,0 11 ,

( ) ( ZKZKiiiii yyxxhhxx )−−h −+=+=⇒> ++ 22,10 11 . Vidíme, že cesta k výslednému algoritmu síce nebola taká priamočiara ako v prípade DDA, ale odmenou je implementačne nenáročná procedúra, ktorá využíva len celočíselnú aritmetiku:

Page 47: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

1. hodnotu x zväčšujeme v každom kroku o jednotku, 2. k pomocnej charakteristike h pripočítavame buď jednu alebo druhú konštantu,

v závislosti na znamienku aktuálnej hodnoty h, 3. hodnotu y nemeníme, alebo zmeníme o jednotku, v závislosti na znamienku aktuálnej

hodnoty h. Pre prípad ( 4.9) zdrojový text vyzerá nasledujúco:

h1=2*(xk-xz); h2=h1-2*(yk-yz); h=h1-(yk-yz); for (x=xz; x<xk; x=x++) if (h>0) yz++; h+=h2; else h+=h1; PutPixel(x,yz);

Túto metódu v literatúre nájdete pod názvom Bresenhamov algoritmus. Pre svoju jednoduchosť je implementovaná hardverovo v grafických kartách, čo ešte zvyšuje výslednú rýchlosť realizácie.

4.3 Rasterizácia kužeľosečiek Vzniká zákonite otázka, či neexistuje praima analógia Bresenhamovho algoritmu i pre zložitejšie krivky, alebo či ich musíme realizovať v tvare lineárne lomenej čiary tak, ako bolo spomínané v úvode tejto kapitoly? Podobným prístupom, ako je opísaný vyššie, pre eliptický oblúk

12

2

2

2

=+by

ax

dostaneme schému:

babahbyx 222000 44,,0 −+===

, 11 +=+ ii xx

( 4.11) ( )324,0 211 ++==⇒≤ ++ iiiiii xbhhyyh ,

( ) ( 18324,10 2211 −−++=−=⇒> ++ iiiiiii yaxbhhyy )h

Skúste odvodiť sami. Pritom postupujte tak isto, ako v prípade úsečky, akurát 1. namiesto vyhodnocovania výrazu ( 4.3) je tentokrát nutné vyhodnocovať výraz

( ) ( ) 222222, bayaxbyxP −+== φφ , 2. generovanie začíname v bode PZ=(0,b), 3. podmienka obmedzeného sklonu, má tvar

,11 +=+ ii xx 1,1 −∈+ iii yyy . Podmienka obmedzeného sklonu však vedie k tomu, že schéma ( 4.11) je použiteľná len pre tú časť elipsy, ktorá má sklon dotyčnice menší ako , tj. pre o45

Page 48: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

)(0

22

2

baax

+≤≤ .

Na úseku axba

a≤≤

+ )( 22

2

musíme použiť symetrickú schému (podobne ako u úsečky

vzťah medzi schémami ( 4.9) a ( 4.10) ).

Obr. 4.2 Bod, v ktorom musíme prejsť od schémy ( 4.11) k symetrickej.

Analýza toho, kde pre danú krivku používame schému typu

,11 +=+ ii xx dyyy iii +∈+ ,1 , a kde typu

,11 +=+ ii yy , dxxx iii +∈+ ,1

1,1−∈d , môže byť u obecnejších kriviek natoľko zložitá, že celková efektivita takto koncipovaného algoritmu sa stráca. Preto všeobecnejšia krivka sa generuje nie priamou rasterizáciou, ale tak, ako bolo uvedené na začiatku kapitoly – ako lineárne lomená čiara, určená dostatočne veľkou množinou bodov krivky.

Page 49: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

5 Krivky v počítačovej grafike V minulej kapitole sme ukázali, ako vyrobiť úsečku. A uviedli sme taktiež, že všeobecná krivka sa v konečnom dôsledku realizuje tak, že vygenerujeme dostatočne reprezentatívnu množinu bodov krivky a tie spojíme lineárne lomenou čiarou. Teraz sa budeme venovať práve vygenerovaniu reprezentatívnej množiny bodov požadovanej krivky. Generovanie kriviek je problematika veľmi dôležitá. Dá sa povedať, že tvorí základ CAD systémov (Computer Aided Design). Ich rozvoj bol stimulovaný potrebami hlavne strojárenského priemyslu. Práve vývoj CAD systémov bol jedným z hlavných faktorov rýchleho vývoja počítačovej grafiky. Hlavné myšlienky sú z 50. - 60. rokov 20. storočia a možno povedať, že podstatným spôsobom zmenili prácu konštruktérov a návrhárov. V dnešnej dobe CAD/CAM (Computer Aided Machinery) systémy prenikli prakticky do všetkých priemyselných odvetví. S krivkami sa stretneme i v geografických informačných systémoch (GIS), krivky sú napr. i základom pre generovanie písmenných fontov textových editorov a DTP systémov (Desk Top Publishing).

5.1 Matematický formalizmus generovania kriviek Východiskom pri generovaní kriviek je matematické vyjadrenie používajúce parametrický tvar

( 5.1) nn PtfPtfPtftP )()()()( 1100 +++= L

kde • P0, P1 ... Pn, sú kontrolné body – body, ktoré zadáva užívateľ. Z užívateľského

hľadiska je dôležité, aby kotrolných bodov nebolo veľa, a aby ich vplyv na výsledný tvar krivky bol ľahko predstaviteľný,

• t je parameter u ktorého spravidla platí, 10 ≤≤ t , (a v nami uvažovaných prípadoch je to výslovne tak). Podľa toho, aké množstvo rôznych hodnôt t budeme uvažovať, takú veľkú výslednú množinu bodov krivky dostaneme.

• f0(x), f1(x), ... fn(x), sú určujúce funkcie. Kým kontrolné body majú zásadný vplyv na tvar konkrétnej realizácie krivky, určujúce funkcie definujú všeobecné vlastnosti danej triedy kriviek.

Vyjadrenie ( 5.1) dáva predpis pre výpočet každej súradnice, tj.

nn xtfxtfxtftx )()()()( 1100 +++= L ,

nn ytfytfytfty )()()()( 1100 +++= L , a v prípade 3-rozmerných kriviek ešte

nn ztfztfztftz )()()()( 1100 +++= L . Geometrický význam derivácie funkcie je smernica dotyčnice. V nami použitej formalizácii je derivácia určená deriváciami určujúcich funkcií

Page 50: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

nn PtfPtfPtftP )()()()( 1100 ′++′+′=′ L

a má podobný význam – určuje smerový vektor krivky v bode P(t).

5.2 Bézierove krivky V praxi sú veľmi populárne Bézierove krivky. Definujú ich nasledujúce určujúce funkcie:

( 5.2) iini tt

in

tf −−⎟⎟⎠

⎞⎜⎜⎝

⎛= )1()(

Väčšinou sa používajú Bézierove krivky do 3. stupňa – i my sa obmedzíme na tieto prípady. Prečo je to tak pokúsime sa vysvetliť v nasledujúcich riadkoch. Podrobnejšie informácie o danej problematike nájde čitateľ napr. v [Kolcun]. V prípade Bézierovych kriviek 1. stupňa (n=1) potrebujeme dva riadiace body P0, P1. Z ( 5.2) dostávame určujúce funkcie:

.)(),1()( 10 ttfttf =−= Dosadením do ( 5.1) tak vidíme, že Bézierova krivka 1. stupňa je úsečka. V prípade Bézierovych kriviek 2. stupňa potrebujeme tri riadiace body P0, P1, P2, a určujúce funkcie sú:

.)(,)1(2)(,)1()( 221

20 ttftttfttf =−=−=

Dosadením krajných hodnôt pre parameter t, t =0, t=1, do ( 5.1) dostávame

P(0) = P0, P(1) = P2.

Smer krivky v bode P(t) je daný prvou deriváciou P’(t).

P’(t) = f0’(t)P0 + f1’(t)P1 + f2’(t)P2 = = -2(1-t)P0 + 2(1-2t)P1 + 2tP2 .

V krajných bodoch tak dostávame

P’(0) = 2(P1 - P0), P’(1) = 2(P2 - P1). Analogicky pre prípad Bézierovych kriviek 3. stupňa potrebujeme štyri riadiace body P0, P1, P2, P3. Určujúce funkcie v tomto prípade sú:

Page 51: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

.)(,)1(3)(,)1(3)(,)1()( 33

22

21

30 ttftttftttfttf =−=−=−=

Pre krajné body krivky teraz dostávame

P(0) = P0, P(1) = P3. Smer krivky v krajných bodoch je ( 5.3) P’(0) = 3(P1 - P0), P’(1) = 3(P3 - P2).

Všeobecne pre Bézierovu krivku n-tého stupňa platí

P(0) = P0, P(1) = Pn, P’(0) = n(P1 - P0), P’(1) = n(Pn - Pn-1).

Z uvedeného vidíme, že vplyv riadiacich bodov na tvar krivky je ľahko pochopiteľný:

• krajnými riadiacimi bodmi krivka prechádza, • bezprostredne susedné riadiace body určujú smer krivky v koncových bodoch. Ďalšou, veľmi dôležitou vlastnosťou Bézierových kriviek je, že • krivka nevychádza mimo konvexný obal svojich riadiacich bodov.

Dôkaz vyplýva z toho, že

1. určujúce funkcie sú nezáporné, tj. pre , 0)( ≥tfi 01 ≥≥ t

2. , 1)(0

=∑=

n

ii tf

3. všetky možné vážené priemery bodov pri nezáporných váhach tvoria konvexný obal týchto bodov.

Nezápornosť funkcií pre je celkom zrejmá. 0)( ≥tfi 01 ≥≥ tDruhý vzťah dostaneme z binomickej vety:

( ) iinn

i

n BAin

BA −

=∑ ⎟⎟

⎞⎜⎜⎝

⎛=+

0

dosadením A=(1-t), B=t. Určujúce polynómy tak majú charakter „váh“ jednotlivých riadiacich bodov a výsledný bod P(t) v ( 5.1) je vlastne váženým priemerom riadiacich bodov. Vidíme, že kým v prípade Bézierovej krivky 2. stupňa zmena riadiaceho bodu P1 zmení smer krivky v oboch krajných bodoch, Obr. 5.1a), tak v prípade Bézierovych kriviek od 3. stupňa vyššie môžeme smery krivky v koncových bodoch meniť vzájomne nezávisle – smer v bode

Page 52: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

P3 nezávisí na bodoch P0 a P1 a podobne smer v bode P0 nezávisí na bodoch P2 a P3 (pozri vzťah ( 5.3), Obr. 5.1b) ). A toto je dôvod veľmi častého používania Bézierovych kriviek 3. stupňa a implementácie tohto typu kriviek v grafických softvéroch. Napr. generovanie kriviek v už spomínanej aplikácii MS-Paint (Malování) je založené na Bézierovych krivkách 2. a 3.stupňa.

a) b)

Obr. 5.1 Editovanie Bézierovej krivky 2. a 3. stupňa.

V prípade a) (Bézierova krivka 2. stupňa) posun riadiaceho bodu P1 zmení smer krivky v oboch koncových bodoch, v prípade b) (Bézierova krivka 3. stupňa) posun riadiaceho bodu P1 zmení smer krivky v koncovom bode P0, ale nezmení smer v bode P3.

5.3 Spájanie bézierovych kriviek Keď chceme spojiť dve bézierove kubické krivky určené riadiacimi bodmi P0,P1,P2,P3, Q0,Q1,Q2,Q3 tak, aby výsledná krivka bola hladká, tj. aby na spojení nebol „ostrý roh“, treba splniť nasledujúce podmienky:

• P3 = Q0 – to zabezpečí, že oblúky budú spojené, • body P2,P3,,Q1 ležia na jednej priamke – to zabezpečí, že spojenie bude hladké.

a) b) Obr. 5.2 a) Nehladké a b) hladké spojenie Bézierovych kubických oblúkov.

Mnohé grafické softvéry podmienku b) automaticky kontrolujú.

5.4 Implementačná efektivita Na výpočte bodov Bézierovej krivky je možné ukázať zmysel a dôležitosť distributívneho zákona pre urýchlenie výpočtov.

Page 53: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

Pri výpočte vnútorných bodov krivky 3. stupňa priamo podľa vzorca ( 5.1) ( 5.13) 3

32

21

20

3 )1(3)1(3)1()( PtPtttPtPttP +−+−+−= by cyklus výpočtu týchto bodov vyzeral asi takto:

for (t= 0; t<1; t=t+d) f0=(1-t)*(1-t)*(1-t); f1=3*(1-t)*(1-t)*t; f2=3*(1-t)*t*t; f3=t*t*t; x=f0*x0 + f1*x1 + f2*x2 + f3*x3; y=f0*y0 + f1*y1 + f2*y2 + f3*y3; z=f0*z0 + f1*z1 + f2*z2 + f3*z3;

tj. musíme pre každé t nájsť štyri polynómy 3. stupňa. Treba si uvedomiť, že súradnice riadiacich bodov P0 – P3 sa nemenia, tj. vo výpočtoch figurujú ako konštanty. Roznásobením vzťahu ( 5.13) dostávame

33

232

132

032 )(3)2(3)331()( PtPttPtttPttttP +−++−+−+−= ,

a preskupením jednotlivých členov tak, že združíme činitele s rovnakým stupňom mocniny, dostávame výsledný tvar:

)()2(3)(3)( 01233

0122

010 PPPPtPPPtPPtPtP −+−++−+−+= . Uvedenému postupu odpovedá nasledujúci maticový zápis Bézierovej krivky

( ) ( ) ( )( ) ( )⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜

⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜

−−−

−=

⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜

−−−=++=

3

2

1

0

32

3

2

1

0

32233300

1331036300330001

,,,1,13,13,1)()()(

PPPP

ttt

PPPP

ttttttPtfPtftP L.

Využijúc asociativitu násobenia matíc, dostávame 3

32

210)( QtQttQQtP +++= ,

kde )(),2(3),(3, 01233012201100 PPPPQPPPQPPQPQ −+−=+−=−== .

Vidíme, že v tomto tvare je výpočet podstatne jednoduchší:

qx0=x0; qx1=3(x1-x0); qx2=3(x2-2*x1+x0); qx3=x3-x2+x1-x0; qy0=y0; qy1=3(y1-y0); qy2=3(y2-2*y1+y0); qy3=y3-y2+y1-y0; qz0=z0; qz1=3(z1-z0); qz2=3(z2-2*z1+z0); qz3=z3-z2+z1-z0; for (t= 0; t<1; t=t+d) tt=t*t; ttt=tt*t; x=qx0 + qx1*t + qx2*tt + qx3*ttt; y=qy0 + qy1*t + qy2*tt + qy3*ttt; z=qz0 + qz1*t + qz2*tt + qz3*ttt;

Page 54: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

tj. konštanty závisiace len od riadiacich bodov vypočítame iba raz a vo vnútri cyklu sa realizuje podstatne menej operácií.

Page 55: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

Ďalšie urýchlenie sa dá získať rekurentným výpočtom hodnôt:

( ) ( ) ( )( ) dQtddQQtQdQddQtP

QdtQdtQdtQdtP

32

3233

22

1

33

22

10

332)(

)(

++++++=

=++++++=+.

Označiac dQRdQQRQdQddQR 323213

32

210 3,)32(, =+=++=

tak máme telo cyklu ešte jednoduchšie:

for (t= 0; t<1; t=t+d) tt=t*t; x+=(rx0 + rx1*t + rx2*tt); y+=(ry0 + ry1*t + ry2*tt); z+=(rz0 + rz1*t + rz2*tt);

Uvedená schéma spočívajúca v roznásobení, prípadne využití rekurentného vyjadrenia hodnôt je všeobecne platná i pre iný typ kriviek (tj. pre ľubovoľný výber určujúcich funkcií). Pre Bézierove krivky existuje ešte ďalšie podstatné zefektívnenie celého výpočtu – schéma de Casteljau [Kolcun], [Žára].

Page 56: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

6 Algoritmy orezávania Pri zobrazovaní objektov často vzniká úloha zobraziť len nejaký detail daného – rozsiahleho objektu. Keď samotné vymedzenie priestoru, odkiaľ chceme detail zobraziť, interpretujeme ako určitý objem – časť celého priestoru, môžeme takú úlohu formulovať ako nájdenie prieniku dvoch telies (zobrazovaného objektu a telesa, vymedzujúceho požadovaný detail). Budeme skúmať jednoduchú variantu sformulovaného problému, tj. prípad, keď objekt je úsečka v 2D a detail je pravoúhlý štvoruholník. Táto úloha vzniká tesne pred zápisom do obrazovej pamäti: do nej zapisujeme dvojrozmernú projekciu pôvodného objektu a samotná obrazová pamäť sa dá interpretovať ako pravouhlé okno. V tejto kapitole uvedieme niekoľko algoritmov, ktoré tento problém riešia. Snahou toho je ukázať, ako spolu vzájomne súvisia, i to akým spôsobom zmenené predpoklady zmenia výsledné riešenie. Nevyhnutnosť riešiť problém orezávania je daná spôsobom výpočtu adresy pre každý pixel pri rasterizácii objektu v scéne. Videopamäť je tvorená súvislou oblasťou pamäťových buniek s adresami Madradradradradr M +=+= 0010 ...,,1, . V prípade, že adresa požadovaného pixelu adr sa dostane mimo uvedený interval, určí sa hodnota skutočnej adresy ako ,mod Madradr = čo spôsobí ,,navinutie obrazu do obrazovej pamäti“.

a) b)

Obr. 6.1 Navinutie úsečky na obrazovku. a) Skutočná situácia. b) Výsledné vykreslenie.

Že je tomu skutočne tak, presvedčte sa sami, využijúc program G256_CLP. Bude nás však zaujímať i zobecnenie tejto jednoduchej varianty, orezávanie obecnejším oknom v 2D i v 3D. Takéto úlohy vznikajú • v snahe urýchliť celý proces vykresľovania (kým vo vyššie opísanom prípade všetky

procedúry zobrazovacieho reťazca predchadzajúce zápisu do obrazovej pamäti robíme s celým objektom, v prípade, že budeme orezávať na úrovni 3D modelu, tj. niekde na začiatku zobrazovacieho reťazca, zobrazovací reťazec aplikujeme len na daný detail, čo môže značne urýchliť celý proces zobrazovania),

Page 57: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

• v prípade zobrazenia s prihliadnutím na niektoré špeciálne aspekty (napr. vykreslenie tieňa, vrhnutého vybraným objektom na ostatné objekty v scéne vedie ku konštrukcii „tieňového telesa“ a hľadaniu prieniku ostatných objektov scény s ním).

6.1 Orezávanie izolovaných bodov Uvažujme pravoúhlé okno zadané hodnotami . Najjednodušší spôsob orezávania spočívá v tom, že tesne pred zápisom do videopamäti testujeme, či adresa pixelu je z požadovaného okna:

Ω mamimami yyxx ,,,

if ( ) ( ) ( ) ( )mamimami yyyyxxxx ≤≥≤≥ &&&&&& PutPixel ( )yx, ;

Pre izolované body je toto jediný spôsob. V prípade složitejších objektov sa budeme snažiť využiť určité geometrické vlastnosti, resp. budeme chcieť používať takú triedu objektov, ktorá dovoľuje jednoduché riešenie orezávania. Pre tieto účely sa ukazujú byť vhodné konvexné objekty. Pritom pre rešenie orezávania sa intenzívne využívá priamo vlastnosť, ktorá definuje konvexitu:

A je konvexná (body ⇔ ∈QP, A úsečka A). ⇒ ⊂PQ Využijeme i nasledujúcu vlastnosť konvexných množín,

A, B - konvexné množiny ⇒ A ∩ B - konvexná množina, ako i triviálný fakt, že pre ľubovoľné množiny A, B platí A B A , A B B . ∩ ⊆ ∩ ⊆ Uvažujme pravuhlé okno Ω ako prienik polrovín , Ω 4321 ππππ ∩∩∩= , kde ( ) ( ) mimi yRyxyxRyxxyx ≥∈=∈≥= :,,,:, 21 ππ , ( ) ( ) mama yRyxyxRyxxyx ≤∈=∈≤= :,,,:, 43 ππ . Hraničné priamky polrovín 4321 ,,, ππππ označíme . 4321 ,,, pppp

Obr. 6.2 Okno ako prienik polrovín.

Page 58: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

6.2 Orezávanie úsečky Pre body budeme používať nasledujúce značenie: BA,AB - priamka, AB - úsečka, AB - polopriamka z bodu A v smere bodu B . Uvažujme netrivialny prípad úsečky AB , ktorý nutne vyžaduje realizovať orezávanie, napr.

. V takom prípade musíme najsť priesečik Ω∉Ω∈ BA , ipAB ∩ s niektorou z hraničných priamok . Pre dostáváme ip ii pABP ∩=

( 6.1)

( ) ( )

( ) ( )

( ) ( )

( ) ( ) ⎟⎟⎠

⎞⎜⎜⎝

⎛−

−−

+==

⎟⎟⎠

⎞⎜⎜⎝

⎛−

−−

+==

⎟⎟⎠

⎞⎜⎜⎝

⎛−

−−

+==

⎟⎟⎠

⎞⎜⎜⎝

⎛−

−−

+==

maAmaAB

ABA

AmaAB

ABAma

miAmiAB

ABA

AmiAB

ABAmi

yyyyyxxxyxP

xxxxyyyxyxP

yyyyyxxxyxP

xxxxyyyxyxP

,,,

,,

,,

,,

444

333

222

111

.

6.2.1 Triviálne orezávanie Keďže oblasť je ohraničena priamkami , hľadaná orezaná úsečka 4321 ,,, pppp

• musí byť časťou úsečky AB , • jej krajné body sú niektoré z bodov . 4321 ,,,,, PPPPBA

Ponúka sa nasledujúci „triviálny” algoritmus orezavania úsečky.

1. Ak Ω∈∧Ω∈ BA , potom vykresli úsečku AB . Koniec.

2. Spočítaj body . 4321 ,,, PPPP3. Usporiadaj body , napr. vzostupne 4321 ,,,,, PPPPBA

podľa −x ovej súradnice (usporiadanie označíme ≤).

4. Ak žiaden z bodov , neleží v 4321 ,,,,, PPPPBA Ω ,

potom úsečka nemá s oknom Ω , prienik. Koniec.

5. Ak BAA ≤∧Ω∈ potom kresli úsečku 4321 ,,,, PPPPPAP ∈ ,

kde a PA ≤ P je bezprostredný pravý sused bodu A . Koniec.

6. Ak BAB ≤∧Ω∈ potom kresli úsečku 4321 ,,,, PPPPPBP ∈ ,

kde BP ≤ a P je bezprostredný ľavý sused boduB . Koniec.

7. Ak Ω∉∧Ω∉ BA potom

nájdi dvojicu bodov 4321 ,,,, PPPPQP ∈ takú, že Ω∈QP, .

Kresli úsečku . PQKoniec.

Page 59: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

Pre korektnosť uvedeného algoritmu je treba

a) ošetriť prípady , resp. BA xx = BA yy = v kroku 2, b) zabezpečiť existenciu bodu P v krokoch 5 resp. 6, c) zabezpečiť existenciu dvojice bodov v kroku 7, QP,d) nájsť jednoduchý spôsob vyhodnotenia vzťahu Ω∈P .

Podmienka a) znamená úsečku rovnobežnú s osou x , resp. . Orezanie takých úsečiek je triviálne.

y

Nad prípadmi b), c), d) nech sa zamyslí čitateľ. Hlavné rysy uvedeného algoritmu spočívajú v tom, že najprv spočítame všetky priesečiky , (s výnimkou prípadu iP Ω∈BA, ) a až potom, na základe usporiadania potenciálnych krajných bodov rozhodneme 4321 ,,,,, PPPPBAo výsledku orezávania. Ponúka sa otázka, či existuje efektívnější spôsob orezávania: jednako je vhodné preskúmať, či podobne ako v kroku 1, keď vykresľujeme úsečku bez nutnosti hľadať body , neexistujú iPprípady, keď úsečku môžeme vylúčiť z vykresľovania taktiež bez nutnosti hľadať body . iPĎalšie miesto možného zefektívnenia je fakt, že hľadané riešenie závisí na výsledku usporiadania potenciálnych krajných bodov. Vynasnažíme sa preto zaradiť bod do daného iPusporiadania bezprostredne po jeho výpočte, a tým vylúčiť niektoré „zbytočné” výpočty priesečikov. Nezanedbateľným faktom je i samotný výpočet priesečíkov , ktorý vyžaduje náročnú iPoperáciu – reálne delenie. Preto premyslená organizácia tohto výpočtu taktiež môže významne prispieť k celkovej efektivite orezávacieho procesu.

6.2.2 Cohen – Sutherlandov algoritmus (Co-Su) Každému bodu priradíme 4-bitový kód nasledujúcim spôsobom:

( yxP ,= ) PPPPP ccccc 4321=

tj. ,11 mi

P xxc <⇔= 1π∉P tj. ,12 mi

P yyc <⇔= 2π∉P

3

tj. ,13 ma

P xxc <⇔= π∉P tj. ,14 ma

P yyc <⇔= 4π∉P V ostatných prípadoch je . Dostávame tak rozklad roviny na 9 oblastí s rôznymi kódami. Príznaky charakterizujú polohu bodu vzhľadom k oknu, ktorú môžeme vyjadriť ako „vľavo“, „pod“, „vpravo“, „nad“. K vylúčeniu úsečky z orezávania sa využíva konvexita poloroviny a úsečky: napr. ak krajné body úsečky sú „pod“ oknom, potom celá úsečka je „pod“ oknom. Zobecnením tak dostávame

0=Pic

Page 60: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

(6.2) ( ) ( )00000& B /=Ω∩⇒≠ ABcc A .

kde je bitový súčin kódov, tj. B& cc A ( ) B

iAii

A cccc ∧=B& . Z druhej strany,

(6.3) ( ) ( )( ) ( )ABABcc BA =Ω∩⇒=∧= 00000000 .

Máme tak veľmi jednoduché kritérium pre úsečky, ktoré

1. môžeme úplne vylúčiť z vykreslovania – (6.2), 2. bez úpravy celé vykresľujeme – (6.3).

V prípade, že platí

(6.4) ( ) ( )( ) ( ) 0000c&00000000 B =∧=/∨=/ ABA ccc ,

nemôžeme jednoznačne rozhodnúť o orezávaní, viď Obr. 6.3.

Obr. 6.3 Úsečky, ktorých krajné body splňujú podmienku(6.4) oknom predchádza a oknom neprechádza.

11BA 2A 2B

V tejto situácii sa nevyheneme hľadaniu priesečikov . Použijeme pritom nasledujúcu konštrukciu:

iP

(6.5) ( ) ( ) ( )43214321 ππππππππ ∩∩∩∩=∩∩∩=Ω∩ ABBAABABrr

.

To znamená, že

• vyjadríme úsečku ako prienik polpriamok, • každú z polpriamok konfrontujeme s vybranými polrovinami, ktoré definujú , Ω• výsledok orezávania hľadáme ako prienik takto upravených polpriamok.

V prípade, že pre niektorú polrovinu platí,

ininin BA πππππππ ∈∈∈ ,,,,,, 4321 ,

Page 61: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

znamená to, že celá úsečka tj. . Preto také polroviny môžeme z orezávania (6.5) vylúčiť.

,inAB π∈ ABAB in =∩π

Je treba si opäť uvedomiť, že situácia

4321 ,,, πππππ ∈out , , B, outout ππ ∉∉A nastať nemôže, pretože toto je prípad (6.2), ktorý už je analyzovaný vyššie.

V (6.5) tak pre krajné body úsečky a polroviny, definujúce okno, platí nasledujúci vzťah:

( 6.6) . πππππππ ∈∉∈ BA ,,,,, 4321

Polrovinu π jednoducho určíme z kódu je to taká polrovina −Ac ,iπ ktorej odpovedá hodnota . 1=A

ic

Označme

( 6.7) PBAB =∩π .

P je tak „prvý bod“ z polpriamky AB , ktorý leží v polrovine π , a je to teda „prvý bod“ ktorý pripadá do úvahy, aby bol v okne Ω . Tento proces – ( 6.6) – ( 6.7) nazveme P je projekcia bodu A na polrovinu π .

Keďže kód ľubovoľného bodu A obsahuje hodnotu 1 maximálne na dvoch pozíciach, znamená to, že v najhoršom prípade je bod A vonkajší vzhľadom k dvom polrovinám, a preto projekciu bodu môžeme spraviť maximálne 2-krát. Nech napr. , tj. 1100=Ac

4321 ,,, ππππ ∈∈∉∉ AAAA .

V prípade, že Ω∈B , tj. ,,,, 4321 ππππ ∈∈∈∈ BBBB znamená to, že

,, 43224311 ππππππ ∩∩⊂∩∩⊂ BPBP

a preto ,432121 Ω=∩∩∩⊂∩ ππππBPBP tj. maximálne po dvoch projekciách bodu nájdeme hľadanú orezanú úsečku. (Podobnú konštrukciu môžeme spraviť pre ľubovoľný bod A s .)

A

0000≠Ac

V prípade, že tj. , spravíme projekciu bodu ,Ω∉B '' : ππ ∉∃ B B na π ´.

'π∩=′ BAAP .

Page 62: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

Platí teda:

( ) ( ) APPBBAABAB ′∩=∩∩∩⊆Ω∩ 'ππ . Skúsme zistiť, v akom prípade platí

( 6.8) 0' =∩ APBPrr

.

Toto nastáva vtedy, keď zároveň s bodom B leží mimo aj bod 'π P , (ktorý je projekciou bodu na niektorú polrovinu) – obr. 7.4. a to platí práve vtedy, keď . A 0000& ≠BP ccKeďže projekcie bodu sú maximálne dve, znamená to, že vzťah (7.7), tj. A

situáciu, že úsečka nepretína okno, zistíme najneskôr po dvoch projekciách jedného krajného bodu úsečky, ležiaceho mimo okna.

Obr. 6.4 Príklad prázdného orezávania pre krajné body s kódami (6.4): Po druhej projekcii P2 bodu A sú oba konce orezávanej úsečky, tj. P2B mimo okno.

Na základe uvedených vlastností je sformulovaný algoritmus – v literature známy pod názvom Cohen-Sutherlandov algoritmus orezávania (Co-Su). 1. Spočítaj kód krajného bodu Bc B úsečky . AB2. Spočítaj kód krajného bodu Ac A úsečky AB .

3. Ak ( ) ( ),00000000 =∧= BA cc potom kresli úsečku . ABKoniec.

4. Ak , úsečka nepretína okno. 0000& ≠BA ccKoniec.

5. Keď prehoď označenie krajných bodov. 0000=Ac6. Nájdi projekciu P bodu pBAPA ∩=

r, .

7. Priraď a pokračuj krokom 2. AP =: Ako vyplýva z vyššie uvedených úvah, tento algoritmus je podstatne efektívnější ako triviálny algoritmus, pretože úsečky, ktoré oknom neprechádzajú rozpozná maximálne po dvoch projekciách, tj. po nájdení max. dvoch priesečíkov. Bohužiaľ, v situácii, keď úsečka okno pretína, vždy existujú také prípady, že projekciu koncového bodu musíme realizovať 4-krát (2 – krát projekcia každého krajného bodu pôvodnej úsečky). Necháva sa čitateľovi také prípady ukázať.

Page 63: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

6.2.3 Algoritmus Skala – Bui (Sk-Bu) Z operácií, ktoré sú nutné v procese orezávania je najdrahšou delenie v reálnej aritmetike. Pre každú projekciu (krok 6 algoritmu Co-Su je nutné jedno delenie – (kap 6.2) Maximálny počet delení – 4 však môžeme zredukovať na polovicu, vzhľadom na to, že orezávacie priamky sú navzájom rovnoběžné, 4231 , pppp . Výpočet priesečíkov ( 6.1) zorganizujeme nasledujúco: ( ) ( ) =−−= 21 ,/ DyyxxD ABAB 1/1 D , ( ) ( )AmaAAmiA yyDxxyyDxx −+=−+= 1412 , , ( ) ( )AmaAAmiA xxDyyxxDyy −+=−+= 2321 , . Okrem toho, ďalšie urýchlenia sa dá získať nezávislou analýzou všetkých, do úvahy prichádzajúcich možností dvojíc kódov koncových bodov orezávanej úsečky. Experimentálne sa dosiahlo až dvojnásobné zrýchlenie oproti Co-Su algoritmu [Bui].

6.2.4 Algoritmus Cyrus – Beck (Cy-Be). Pozrime sa teraz na trochu obecnejší prípad – uvažujme okno ako konvexný uholník −mv 2D. Ukážeme, ako sa pri takomto zobecnení prejaví analogický postup, ako v prípade Co–Su algoritmu, tj. postup, keď • úsečku predstavujeme ako prienik dvoch polpriamok, • orezávanie realizujeme ako postupnú projekciu polpriamok, definujúcich okno

a príslušných polpriamok, ktoré definujú úsečku. Nech je okno dané postupnosťou bodov ( )iiim yxOOOO ,,...,, 21 = , pričom táto postupnosť orientuje hranicu okna proti smaru pohybu hodinových ručičiek. Každá z polrovín iπ , ktoré toto okno určujú, ( )mπππ ∩∩∩=Ω ...21 je daná hraničnou priamkou

⎩⎨⎧

=−=

= +

miOOmiOO

pm

iii

1

1 1,,2,1 K

a vonkajšou normálou

( )

⎩⎨⎧

=−−−=−−

= ++

.,2,...,2,1,

11

11

mixxyymixxyy

nmm

iiiiir

Uvažujme priamku ( ) RtABtAPPAB ∈−+== ,: . Pre vonkajšiu normálu polroviny in

iπ a smerový vektor AB −=νr priamky platí práve jeden zo vzťahov: ( ) ( ) ( ) .0,,0,,0, =>< iii nvnvnv rrrrrr

Page 64: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

Obr. 6.5 V danom prípade ( ) 0, 2 >nv rr , ostatné skalárne súčiny sú záporné.

Budeme sledovať pohyb bodu P po priamke s rastúcim : prvý prípad, tj. t ( ) 0, <inv rr , nastává, keď s rastúcim t v niektorom momente priamka vstupuje do polroviny iπ . Druhý prípad, ( ) 0, >inv rr , nastáva vtedy, keď v niektorom momente priamka vystupuje z polroviny iπ . V treťom prípade, ( ) 0, =inv rr , celá priamka je buď vo vnútri, alebo mimo polrovinu iπ . Prienikom polroviny a priamky je tak v prvom prípade ( ) ii ttABtAPPAB ≥−+==∩ ,:π . Keďže zo všetkých týchto prípadov hľadáme prienik, zo všetkých týchto prípadov nás bude zaujímať . im tt max≥ V druhom prípade je prienikom polroviny a priamky ( ) ii ttABtAPPAB ≤−+==∩ ,:π . Opäť nás zaujímá prienik týchto prípadov, čo vedie tentokrát k nájdeniu . iM tt min≤Výsledkom orezania priamky AB a okna Ω je tak úsečka ( ) Mm ttttABtAPP ≤∧≥−+= ,: . Hľadaný parameter ti pritom spočítame podľa vzťahu

( )( )i

iii nAB

nAOt r

r

,,

−−

= .

Algoritmus možno teda sformulovať nasledujúcim spôsobom:

Page 65: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

1. Inicializuj tm=0, tM=1. 2. Pre každý hraničný segment vykonaj kroky 3–8.

3. Spočítaj ( ) ( ).,,, iii nABunAOs rr−=−=

4. if u = 0 then 5. if s<0 then Koniec endif

else 6. t=s/u 7. if u<0 then t=maxt,tm else t=mint,tM

endif 8. if tm>tM then Koniec 9. Krajné body úsečky majú parametre tm,tM. 10. Koniec. Necháva sa čitateľovi dôkladne preanalyzovať prípad u=0 (kroky 4,5). Spoločným rysom oboch algoritmov (Co-Su, Cy-Be) je postupné projektovanie hraničných bodov úsečky na poloroviny, generujúce okno. Co-Su algoritmus pritom intenzívne využíva paralelnosť orezávacích priamok so súradnicovou sústavou, čo dovoľuje zredukovať počet delení v reálnej aritmetike na dva (Sk-Bu). Pre Cy-Be ktorý aplikujeme na obecné n-uholníkové konvexné okno, vždy existuje prípad, keď musíme bohužiaľ realizovať všetkých n delení.

• Výhodou algoritmu Cy-Be je fakt, že sa dá aplikovať taktiež na 3D situácie, pri orezávaní úsečky konvexným mnohostenom. Zamyslite sa nad tým, ako je treba v tomto prípade zmodifikovať uvedený algoritmus.

• Zamyslite sa nad tým, kde sa v uvedenom algoritme využíva podmienka konvexity orezávacieho okna. Tj. je podmienka konvexity nutná? Nedal by sa algoritmus použiť aj na nekonvexný prípad?

6.3 Orezávanie plošných útvarov Orezávanie plošných útvarov sa realizuje podobne ako orezávanie úsečky: postupne hľadáme prienik objektu s polorovinami, ktoré definujú okno. Podstatné pri tom je si uvedomiť, že nestačí len orezať všetky úsečky, tvoriace hranicu. Necháva sa čitateľovi toto ukázať.

• Spoločným rysom algoritmov orezávania úsečky konvexným oknom je postupné projektovanie hraničných bodov úsečky na poloroviny, generujúce okno. Co-Su, Cy-Be.

• V 2D prípade pravouhlého okna vystačíme len s dvomi operáciami delenia v reálnej aritmetike, Sk-Bu.

• Cy-Be algoritmus funguje prakticky bezo zmien na 2D i 3D prípady. • Pri orezávaní plošných útvarov že nestačí len orezať všetky úsečky, tvoriace hranicu.

Page 66: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

7 Vyplňovacie algoritmy Ďalšia, veľmi dôležitá činnosť pri rasterizácii obrazu je vyplňovanie oblasti. Samotná idea je veľmi prostá: predstavme si tenké pero a pomocou neho poďme vyplniť požadovanú oblasť. Jediné, čo môžeme robiť, je šrafovať vnútro oblasti, pričom čiary budeme klásť tak blízko, aby spolu splynuli do jedného celku. Keďže hrúbka našej „čiary“ je rovná rozmeru jedného pixelu, zdá sa všetko jednoduché. Aby však vyplňovanie bolo dostatočne efektívne, je treba prekonať niektoré úskalia. Problém vyplňovania oblasti zahrnuje dve rôzne úlohy. Buď riešime problém rasterizácie, tj. zároveň s rasterizáciou hraničnej krivky oblasti chceme vyplňovať aj vnútorné pixely oblasti, alebo ide o úlohu čiste rastrovú, tj. chceme vyplniť všetky vnútorné pixely oblasti, keď hranica je už predtým rasterizovaná. Ukážeme základné algoritmy oboch typov.

7.1 Scan-line algoritmus Tento algoritmus rieši úlohu 1. typu pre uzavreté polygóny. V podstate je základná myšlienka veľmi jednoduchá: šrafujeme danú oblasť horizontálnymi čiarami, pričom tieto čiary (scan-line) sú od seba vzdialené na veľkosť pixelu. To zabezpečí, že pri rasterizácii tieto čiary súvisle vyplnia oblasť. Keď scan-line pretne hranicu oblasti, tak pri každom nepárnom priesečiku sa dostávame do vnútra oblasti a pri každom párnom vychádzame z oblasti von. Algoritmus je teda nasledujúci: Pre všetky možné scan-lines vykonaj 1– 3:

1. nájdi priesečíky scan-line a hraničných úsečiek oblasti, 2. usporiadaj priesečíky 3. vyplňuj medzi nepárnym a párnym priesečíkom.

Takýto algoritmus ovšem nebude korektne pracovať na tých scan-lines, ktoré prechádzajú vrcholami vyplňovaného polygónu. Konfigurácie možných polôh susedných úsečiek vzhľadom na horizontálny smer scan-line sú nasledujúce

Page 67: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

Obr. 7.1 Konfigurácie susedných úsečiek vzhľadom na horizontálne scan-lines. Keďže je vykreslená len časť vyplňovaného objektu, je znázornená i príslušná vnútorná oblasť. Ostatné možné prípady sú osovo symetrické s uvedenými.

Susedné hraničné úsečky sú pre prehľadnosť znázornené rôznymi farbami. Spoločný bod je znázornený ako čierny. Je treba si uvedomiť, že vo vrcholoch sa stretávajú vždy dve hraničné úsečky, tj. nájdené priesečíky sú dvojnásobné. Preto fungovanie algoritmu v situácii z Obr. 7.1 a) a Obr. 7.1 c), keď scan-line prechádza vrcholom (čiernym pixelom), nebude správne. V prípade a) vpravo od vrcholu sa línia nevyplní, pretože vpravo od vrcholu je oblasť „za druhým priesečíkom“. V prípade c) sa naopak vpravo do vrcholu línia vyplní (vďaka dvojnásobnosti vrcholu). Vychádzajúc z toho, že dve susedné scan-lines sú v podstate dotýkajúce sa obdlžníky, riešenie tohto problému je jednoduché:

a) pred aplikáciou algoritmu skrátime pri rasterizácii každú hraničnú líniu o poslednú úroveň

b) po skončení algoritmu znovu vykreslíme celú hranicu.

Proces vyplňovania ilustruje nasledujúci príklad.

Page 68: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

Obr. 7.2 Scan-line vyplňovanie.

a) Hranica s vyznačením dvojnásobných hraničných bodov (čierne).

b) Skrátenie každej hraničnej úsečky o „spodnú líniu“. Vidíme, že zostali len dvojnásobné vrcholy typu Obr. 7.1 b), Obr. 7.1 d).

c) Vyplnenie vnútra oblasti. Hraničné pixely nemeníme. Za hraničný pixel úsečky na danej scan-line považujeme vždy len ten pixel, ktorý je najviac vľavo.

d) Záverečné vykreslenie hranice. (Pre názornosť sme zvolili farbu hranice rôznu od farby vnútra.

Kroky 1. a 2. uvedeného algoritmu sa dajú realizovať rýchle, vychádzajúc z toho, že

• scan-line pretína len niektoré z hraničných úsečiek (nazveme ich aktívne hrany), • prechodom na novú scan-line sa priesečik s aktívnou hranou P=(x,y) zmení na

Q=(x+1/A, y+1) kde A je smernica danej aktívnej hrany, • Usporiadanie existujúcich priesečíkov sa nezmení.

Problém sa tak skoncentruje na analýzu prípadov, keď prechodom na novú scan-line sa zmení množina aktívnych hrán.

7.2 Inverzné vyplňovanie Pri definovaní farby pre daný pixel sa často využíva režim XORPut, ktorý značí, že

opätovné prekreslenie pixelu tou istou farbou zmení výslednú farbu na inverznú. Toto dosiahneme bitovým sčítaním mod 2 pôvodnej a novej hodnoty pixelu.

Ďalšou významnou skutočnosťou je fakt, že pri vykresľovaní izolovaného pixelu je časovo najnáročnejšia samotná alokácia pixelu. Z toho pohľadu je napr. vyplneni jedného pixelu so súradnicami (ix,iy) zrovnateľné s vyplnením horizontálnej úsečky (ix,iy)–(nx,iy). Preto z pohľadu rýchlosti je nakreslenie úsečky zrovnateľné s vyplnením lichobežníka „vpravo od úsečky“ (vyplnenie tohto lichobežníka označíme ako fill_2). Toto dovoľuje realizovať vyplňovanie polygonálnej oblasti tak, že každú hraničnú úsečku kreslíme v režime

Page 69: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

„vyplnenia jej pravého lichobežníka“ v režime XORPut. Úsečky musíme, podobne ako u ScanLine algoritmu pred vyplňovaním skrátiť. Z hľadiska procesu vyplňovania, rozdiel medzi ScanLine a InversFill je v organizácii cyklov. Kým ScanLine je vo forme

for (horizontal_lines) do for (hranice) do fill_1,

InversFill má cykly prehodené:

for (hranice) do for (horizontal_lines) do fill_2.

Nasledujúci rozdiel je v zložitosti vnútorných cyklov: kým v prvom prípade vnútorný cyklus fill_1 musí nájsť priesečíky hranice s vyplňovacími líniami, v druhom prípade fill_2 je toto automaticky zabezpečené použitím režimu XORPut. Významnou vlastnosťou algoritmu InversFill je jeho jednoduchá paralelizácia, vyplývajúca z toho, že vyplnenie pravého lichobežníka jednej hraničnej úsečky nezávisí na žiadnej ďalšej hraničnej úsečke.

7.3 Zobecnené vyplňovanie – Z-buffer Okrem vyššieopísaného problému vyplniť oblasť konštantnou hodnotou, často vzniká úloha interpolovať hodnoty z hranice do vnútra oblasti. Nech okrem vrcholov vyplňovaného n-uholníka je v každom vrchole zadaná i číselná hodnota. Potom pre interpoláciu hodnôt do vnútra možno ScanLine modifikovať:

• pri hľadaní polohy priesečíka hraničnej úsečky a scan-line interpolujeme súčasne aj číselnú hodnotu krajných bodov danej hraničnej úsečky,

• každý vyplňovaný úsek vyplníme hodnotami, ktoré sú interpoláciou hodnôt príslušných priesečíkov.

Štandardný ScanLine funguje na ľubovoľnej, tj. i nekonvexnej oblasti bez problémov. Modifikovaný algoritmus sa pre nekonvexné oblasti môže správať nie úplne podľa našich predstáv. Skúste sa zamyslieť, prečo tomu tak je. Zobecnené vyplňovanie ukazuje ďalší rozdiel medzi ScanLine a InversFill. InversFill sa pre zobecnené vyplňovanie použiť nedá – zamyslite sa, prečo tomu tak je. Príkladom konkrétneho použitia zobecneného vyplňovania je rastrové riešenie problému viditeľnosti bilineárnych plôch. Viditeľnosť vnímame ako problém usporiadania:

( 7.1) z dvoch rôznych bodov rôznych plôch, ktoré sa premietajú do jedného spoločného priemetu vidíme ten, ktorý je k nám bližšie.

Page 70: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

Pri použití kolmého premietania a orientácii súradnicových osí z Obr. 7.3 je to ten, ktorý ma väčšiu z-súradnicu.

Obr. 7.3 Schématické znázornenie z-bufferu. Body z červenej línie sa premietnu do jedného pixelu na plochu. Pozorovateľ je znázornený vpravo. Zistenie z-súradníc pixelov danej plochy môžeme interpretovať ako určitý spôsob vyplňovania, keď hodnota vnútorných pixelov plochy nie je konštantná, ale je to lineárna interpolácia hodnôt z-súradníc vrcholov plochy. Pri vykresľovaní plochy musíme pre každý pixel analyzovať kritérium ( 7.1), tj. musíme pre každý pixel vedieť, aká je jeho najväčšia hodnota z-súradnice, ktorá vznikla pri kreslení predošlých plôch. Toto vyžaduje okrem videopamäti (VRAM[nx][ny]) dodatočnú pamäť, ktorú nazývame z-buffer (ZB[nx][ny]). Jej veľkosť je úmerná veľkosti videopamäti a závisí na tom, s akou jemnosťou chceme rozlíšiť z-súradnice jednotlivých plôch. Algoritmus možno sformulovať nasledujúcim spôsobom:

1. Inicializuj z-buffer, tj ZB(x,y) = max pre všetky pixely (x,y). 2. Pre každú vykresľovanú plochu vykonaj kroky 3—4. 3. Vyber farbu plochy c. 4. Rasterizuj plochu modifikovaným ScanLine algoritmom pre z-súradnicu

vrcholov. Zároveň pre každý pixel (x,y) analyzuj podmienku 5–8.

5. if z(x,y) > ZB[x][y] then 6. ZB[x][y]=z(x,y) 7. VRAM[x][y]=c 8. end if

Vidíme, že štruktúra algoritmu je prostá, čo dovoľuje jednoduchú HW implementáciu. Práve taký spôsob riešenia viditeľnosti je v dnešnej dobe používaný, pričom uvedený algoritmus býva realizovaný v grafických kartách.

Page 71: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

7.4 Rastrové vyplňovanie Predpokladajme, že existuje vnútorný bod, z ktorého začíname proces vyplňovania – inicializačný pixel. Problém je vo svojej podstate rekurzívny a dá sa jednoducho sformulovať napr. takto: Def Vypln(x, y, cin, c ) out

Ak P(x,y) ≠ cin, a zároveň P(x,y) ≠ cout potom vykonaj kroky 1.—5.

1. P(x,y) = cin 2. Vypln(x-1,y, cin, cout) 3. Vypln(x+1,y, cin, cout) 4. Vypln(x,y-1, cin, cout) 5. Vypln(x,y+1, cin, cout)

Už pri pomerne malých oblastiach je však hĺbka rekurzie tak vysoká, že procedúra je prakticky nepoužiteľná. Preto je nutné zredukovať počet rekurzívnych vnorení napr. tak, že v jednom kroku rekurzie

1. pre stanovený pixel nájdeme na tom istom riadku vnútorný pixel, ktorý je najviac vľavo – prvý vnútorný pixel,

2. od prvého vnútorného pixelu vyplňujeme všetky pixely smerom do prava,

až kým nenarazíme na hranicu,

3. pri vyplňovaní každého pixelu zisťujeme, či pixel „pod“ a „nad“ nie sú kritické,

4. kritické pixely uchováme.

Pritom kritický pixel je taký, ktorý súčasne spĺňa nasledujúce tri podmienky:

a) je vnútorný bod oblasti b) je nevyplnený c) je „nad“ alebo „pod“ prvým vnútorným pixelom na riadku, alebo vľavo od neho je hraničný pixel, alebo je to inicializačný pixel.

Kroky 1.—4. vykonávame dovtedy, kým existujú kritické pixely. Miera rekurzie v tomto prípade závisí od toho, koľko nových kritických pixelov vzniká pri vyplňovaní jedného riadku. Skonštruujte situáciu, keď pri vyplňovaní riadku vznikajú 4 kritické pixely.

Page 72: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

8 Telesá a ich reprezentácie V úvodnej kapitole sme vysvetlili pojem vektorovej (procedurálnej) a rastrovej grafiky. Ako príklad zovšeobecnenia vektorovej reprezentácie sme uviedli CSG reprezentáciu telies, ktorá patrí medzi triedu objemových reprezenácií. Keďže telesá vidíme prostredníctvom ich povrchov, dôležitú triedu reprezentácií tvoria povrchové reprezentácie. Preto sa budeme práve týmto reprezentáciam v tejto kapitole venovať.

8.1 Objemové reprezentácie Základnou objemovou reprezentáciou je analóg rastrovej reprezentácie – vyjadrenie telesa pomocou pravidelnej ortogonálnej 3D mriežky – voxelovej mriežky (voxel = VOLume Element). Táto reprezentácia je používaná napr. pri CT snímkoch. V technickej praxi sa často používajú reprezentácie, založené na rozklade priestoru na jednoduchšie, vzájomne sa neprekrývajúce prvky. Väčšinou sa používajú kvádre a štvorsteny. Tento typ reprezentácie je vhodný pre dnes veľmi intenzívne používané numerické modelovanie metódou konečných prvkov MKP. Uvedené typy reprezentácie sú očividne veľmi náročné na pamäť. Jednou z možností, ako toto eliminovať, je použitie hierarchickej štruktúry. Konštrukcia vychádza z dichotomického delenia intervalu. 2D variant sa zvykne nazývať kvadratický strom, 3D variant oktálový strom. Vychádzame z pravidelného kvádra. Jeho objem delíme (každý rozmer na polovicu) rekurzívne dovtedy, kým nedostaneme homogénne časti. Príklad 2D variantu je na .

8.2 Povrchové reprezentácie

8.2.1 Reprezentácia mnohostenov Často používané telesá sú konvexné mnohosteny s rovinnými povrchovými plochami. Táto trieda telies

1. je dostatočne rôznorodá, aby vyjadrila presne alebo aspoň približne veľké množstvo reálnych telies,

2. manipulácia s mnohostenmi je jednoduchá, 3. pre špeciálnu podtriedu – konvexné mnohosteny existuje veľmi jednoduchý

algoritmus na riešenie viditeľnosti. Spôsob reprezentácie mnohostenov si ukážeme na príklade štvorstenu. Informácia o zobrazovanom telese sa delí na

• geometrickú, – je daná súradnicami vrcholov, • topologickú - ktorými vrcholmi sú určené steny telesa.

Výsledkom sú dve tabuľky: zoznam vrcholov, ktorý obsahuje súradnice vrcholov a ich indexáciu, (geometrická informácia) a tabuľka koincidencie vrcholov a stien (topologická informácia). Napr. pre štvorsten z Obr. 8.1 máme nasledujúcu tabuľku koincidencie vrcholov a stien:

Page 73: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

Obr. 8.1 Kódovanie vrcholov a stien štvorstenu.

tab. 8.1 Incidenčná tabuľka vrcholov a stien štvorstenu.

Vrcholystena

I. II. III.

1 1 2 4 2 2 3 4 3 1 3 2 4 1 4 3

Podobným spôsobom možno kódovať i zložitejšie telesá. Obmedzíme sa na telesá s rovinnými stenami. Také telesá sa nazývajú mnohosteny. Treba rozlišovať dva typy stien: a) trojuholníkové, b) mnohouholníkové. V prípade trojuholníkových stien je situácia jednoduchá: keďže rovina je jednoznačne určená troma bodmi, také steny sú preto automaticky rovinné. U mnohouholníkových stien je potrebné ich rovinnosť kontrolovať. Prečo trváme na rovinných stanách, vyplýva z toho, že smer normály k rovine je konštantný. A ako uvidíme v ďalšom, túto vlastnosť podstatným spôsobom využijeme. Každá rovinná stena má dve normály. U hraničných stien 3D telies ich nazývame vonkajšia a vnútorná. Všimite si, že steny sú dané orientovanou postupnosťou vrcholov tak, že orientácia ide v smere hodinových ručičiek pri pohľade z vnútra telesa. Ukážeme si, že jednotná orientácia stien je nutná pre potreby viditeľnosti.

8.2.2 Viditeľnosť konvexných mnohostenov V reálnom živote príroda všetko vyrieši za nás: v nepriehľadných telesách vidíme len niektoré, „predné“ povrchy, resp. tie ich časti, ktoré nie sú prekryté ďalšími telesami. V prípade, že trojrozmerné nepriehľadné telesá „máme v počítači“, my musíme určiť, ktorá povrchová plocha je viditeľná a ktorá nie. S konvexným telesom sme sa už stretli v predchádzajúcich kapitolách. A predstaviť si konvexný mnohosten môžeme tak, že ak sa na neho pozeráme z akejkoľvek strany, tak povrchové steny buď celé vidíme, alebo celé nevidíme, tj. nemôže nastať situácia, že by sme videli len časť niektorej povrchovej steny. Kritérium viditeľnosti stien pre konvexné mnohosteny sa dá názorne vyjadriť tak, že vidíme práve tie steny, ktorých vonkajšie normály „smerujú proti nám“.

Page 74: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

Obr. 8.2 Orientácia súradnicovej sústavy, štvorsten a jeho vonkajšie normály.

Pritom smer „proti nám“ je na Obr. 8.2 daný kladnou hodnotou z-súradnice. Uvažujme teda

• konvexný mnohosten s rovinnými stenami S1, S2, ... Sm, • plochy sú orientované, tj. u každej z nich poznáme vonkajšiu normálu, ,,,, 21 mnnn K • súradnicový systém je pravotočivý a orientovaný tak, že výstupné zariadenie

predstavuje rovinu xy a os z smeruje z výstupného zariadenia „smerom k nám“. Kritérium viditeľnosti pre plochu je v tomto prípade nasledujúce: Plocha Mi je viditeľná práve vtedy, keď uhol medzi vonkajšiou normálou in a vektorom určujúcim „smer proti pozorovateľovi“ (tj.smer daný vektorom (0,0,1) ) je ostrý. Využijúc skalárny súčin a vlastnosť, že cos ostrého uhla je vždy kladné číslo, máme veľmi jednoduché kritérium: Nech ( )iiii nznynxn ,,= . Potom stena Si je viditeľná práve vtedy, keď nzi > 0. Kľúčovým momentom je teda určenie vonkajšej normály plochy. K tomu sa využíva vektorový súčin ,vuw ×= kde

.,, xyyxzzxxzyyzzyx vuvuwvuvuwvuvuw −=−=−=

Orientácia vektorového súčinu je pritom daná tak, ako ukazuje Obr. 8.3: keď prsty pravej ruky ukazujú v smere prvého vektora a druhý vektor vychádza z dlane, potom ich vektorový súčin je kolmý na oba vektory a je orientovaný tým smerom, kam ukazuje palec.

Obr. 8.3 Orientácia vektorového súčinu.

Page 75: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

Pre výpočet normálových vektorov použijeme vektory u a v , ktoré získame z incidenčnej

tabuľky. Pre náš prípad je vektor u daný rozdielom stĺpcov II. a I., vektor v je daný rozdielom stĺpcov III. a I. Z uvedeného je zrejmé, že poradie vrcholov v tab. 8.1 je dôležité: zámena poradia vektorov zmení orientáciu vektorového súčinu.

8.2.3 Okrídlená hrana Vyššieuvedené kritérium viditeľnosti stien je možné modifikovať na viditeľnosť hrán. Je treba si uvedomiť, že hrana je prienik dvoch susedných stien. Hrany môžeme klasifikovať do troch tried:

1. predné hrany, ktoré sú prienikom viditeľných stien, 2. obrysové hrany, ktoré sú prienikom viditeľnej a neviditeľnej steny, 3. zadné hrany, ktoré sú prienikom neviditeľných stien.

Toto kritérium je užitočné i vprípade nekonvexných telies, pretože čiastočná viditeľnosť hrany je spôsobená očividne prekrytím niektorou z obrysových hrán. Z uvedeného dôvodu je veľmi často používaná taká datová štruktúra pre povrchovú reprezentáciu telies, ktorá definuje hrany nie ako spojnice dvoch vrcholov, ale ako prienik dvoch stien. Pre štvorsten z Obr. 8.1, tab. 8.1, môže byť toto realizované napr. takto:

tab. 8.2 Incidenčná tabuľka hrán a stien štvorstenu.

Hrana Steny12 1,3 13 3,4 14 1,4 23 2,3 24 1,2 34 2,4

8.2.4 Parametrické plochy Často používaným spôsobom pre definovanie plochy je nasledujúca konštrukcia: uvažujme dve krivky v priestore, ktoré sú zadané parametricky,

,10,)()()()(,)()()()(

11111001

00110000

≤≤+++=+++=

tPtfPtfPtftPPtfPtfPtftP

nn

nn

L

L

a pri zafixovanej hodnote t=t* spojme body P0(t*) a P1(t*) úsečkou:

( ).10

),()(1)( *1

*0

≤≤+−=

stsPtPssP

Zopakujúc toto pre všetky možnosti parametru 10 ≤≤ t , dostávame plochu

( 8.1) ( ),1,0

),()(1),( 10

≤≤+−=

tstsPtPstsP

Page 76: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

ktorú nazývame priamková plocha. V najjednoduchšom prípade, keď P0(t) a P1(t) sú úsečky, tak získame bilineárnu plochu

( ) ( )[ ] ( )[ ]

.1,0,111),( 11100100

≤≤+−++−−=

tstPPtstPPtstsP

Vyjadrené skrátene v maticovej forme dostaneme tvar

( 8.2) ( )

.1,0

,1

1),(1110

0100

≤≤

⎟⎟⎠

⎞⎜⎜⎝

⎛ −⎟⎟⎠

⎞⎜⎜⎝

⎛−=

tst

tPPPP

sstsP

Keď vyseparujeme polynomickú bázu, máme výsledný tvar

( 8.3) ( )

.1,0

,1

1011

1101

1),(1110

0100

≤≤

⎟⎟⎠

⎞⎜⎜⎝

⎛⎟⎟⎠

⎞⎜⎜⎝

⎛ −⎟⎟⎠

⎞⎜⎜⎝

⎛⎟⎟⎠

⎞⎜⎜⎝

⎛−

=

tstPP

PPstsP

Podobnou konštrukciou, keď budeme spájať napr. bézierové kubické krivky nie usečkami, ale bézierovými kubickými krivkami, dostaneme bézierovú bikubickú plochu

( )⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜

⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜

−−

⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜

⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜

−−−

−=

3

2

33

23

13

03

32

22

12

02

31

21

11

01

30

20

10

00

32

1

13

31

036

3

0033

0001

1331036300330001

1),(

ttt

PPPP

PPPP

PPPP

PPPP

ssstsP .

V tomto prípade spájame bézierovu krivku, ktorá je určená riadiacimi bodami P00,P01,P02,P03 s bézierovou krivkou, určenou riadiacimi bodami P30,P31,P32,P33. Pritom spojenie je také, že každá dvojica bodov P0i, P3i, sa spája bézierovou krivkou, určenou bodami P0i,P1i,P2i,P3i. Aj keď táto konštrukcia generovania plôch je vcelku jednoduchá a zrozumiteľná, výsledné plochy už i v najjednoduchšom prípade môžu mať na prvý pohľad neočakávané vlastnosti. Napr. valcovú plochu dostaneme ako priamkovú plochu dvoch paralelných kružníc. V prípade, keď ale usečka, ktorá spája odpovedajúce si body, nie je rovnobežná so spojnicou stredov, dostávame rotačný hyperboloid.

a) b)

Obr. 8.4. Priamkové plochy dvoch paralelných kružníc rovnakého polomeru. a) valcová plocha, b) rotačný hyperboloid.

Page 77: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

Dokonca už najjednoduchší možný prípad – bilineárna plocha, je plocha kvadratická, čo ilustruje nasledujúci príklad. Nech riadiace body bilineárnej plochy majú nasledujúce súradnice:

⎟⎟⎟

⎜⎜⎜

⎛=

⎟⎟⎟

⎜⎜⎜

−=

⎟⎟⎟

⎜⎜⎜

−=

⎟⎟⎟

⎜⎜⎜

⎛−=

110

,1

01

,1

01

,11

0

11100100 PPPP .

Dosadením do ( 8.3) dostaneme

( 8.4) sttsz

stystx

42211

+−−=−+=

−=.

Z prvých dvoch rovníc vyjadríme s a t pomocou x, y.

.2

1,2

1 ++=

+−=

xytxys

Dosadením do 3.rovnice v ( 8.4) dostaneme vyjadrenie plochy v explicitnom tvare

. 22 xyz −=

Vidíme, že napr. rez tejto plochy rovinou x = 0, je parabola z = y2, Podobne rez kolmou rovinou y = 0 dáva parabolu z= –x2. Na druhej strane, rez rovinou z= const. je hyperbola y2– x2= const.

Page 78: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

9 Tuhé transformácie v rovine a priestore Pri zobrazovaní objektov zadaných vektorovo, je treba tieto vhodne transformovať: posúvať, otáčať, zväčšovať resp. zmenšovať. Samotný tvar objektu sa pri tom nemení, preto takéto transformácie nazývame tuhé. V prípade 3D telies musíme ešte vedieť spraviť projekciu telesa na projekčnú rovinu. Tieto transformácie musíme vykonať so všetkými vrcholami, ktoré daný objekt určujú. I teraz nás samozrejme zaujíma rýchlosť realizácie takýchto operácií. V tomto prípade sa reálnej aritmetike nevyhneme. Rýchlosť sa dosahuje vďaka využitiu hardverového riešenia násobenia matíc, čo je dnes používanými procesorami využívané. Ukážeme, že daná problematika, tj. tuhé transformácie a projekcie sa dajú sformulovať výhradne s využitím násobenia matíc.

9.1 Transformácie v 2D Uvažujme bod P so súradnicami . Posunutie o vektor ( yx, ) ( )yx ttt ,=

r vyjadríme: xtxx +=' , ytyy +=' Pre rotácia bodu okolo začiatku súradnic použijeme vyjadrenie bodu v polárnych súradniciach

ϕcos.rx = , ϕsin.ry = .

Pootočením o uhol α dostaneme

)cos(.' αϕ += rx , )sin(.' αϕ += ry Po úpravách máme:

( )

αααϕαϕαϕαϕαϕ

sin.cos.sin.sin.cos.cos.sin.sincos.cos)cos(.'

yxrrrx

−=−==−=+=

.

Analogicky pre zložku y

αα cos.sin.' yxy += . Zmena mierky vzhľadom k začiatku súradníc vedie k jednoduchým vzťahom

xsx x .' = , ysy y .' = . V tomto prípade má každá súradnica vlastnú mierku. V prípade, že mierka pre obe súradnice je rovnaká, sx=sy.

9.2 Maticové vyjadrenie Pre rotáciu a zmenu mierky môžeme vyššie uvedené základné transformacie vyjadriť v maticovom tvare:

MPP =' , SRM ,∈ , kde

⎟⎟⎠

⎞⎜⎜⎝

⎛=⎟⎟

⎞⎜⎜⎝

⎛ −=⎟⎟

⎞⎜⎜⎝

⎛=⎟⎟

⎞⎜⎜⎝

⎛=

y

x

ss

SRyx

Pyx

P0

0,

cossinsincos

,''

',αααα

.

Page 79: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

Bohužiaľ, posunutie sa takto zapísať nedá. Aby sme to mohli spraviť, musíme prejsť k homogennym súradniciam. Je to operácia, pri ktorej 2D priestor vyjadríme ako rovinu 1=z v 3D priestore. Vyššie uvedené vzťahy budú mať tvar

⎟⎟⎟

⎜⎜⎜

⎛=

1yx

P , , , . ⎟⎟⎟

⎜⎜⎜

⎛′′

=′

1yx

P ( )⎟⎟⎟

⎜⎜⎜

⎛ −=

1000cossin0sincos

αααα

αR ( )⎟⎟⎟

⎜⎜⎜

⎛=

1000000

, y

x

yx ss

ssS

Transláciu teraz môžeme vyjadriť maticou

. ( )⎟⎟⎟

⎜⎜⎜

⎛=

1001001

, y

x

yx tt

ttT

Pri postupnej transformácii aplikujeme na každý bod P príslušné transformačné matice. Napr. pri troch základných transformáciách, vyjadrených maticami , , 1M 2M 3M , PMP 1=′ PMP ′=′′ 2 , PMP ′′=′′′ 3 . Po dosadení tak dostávame

( )( )PMMMP 123=′′′ . Využívajúc asociativitu násobenia matíc, vyššieuvedený vzťah možeme prepísať na tvar

( )( )PMMMP 123=′′′ . Takto generujeme výslednú transformačnú maticu postupným prenásobovaním matíc elementárnych transformácií. Napr. matica rotácie Q o uhol α okolo bodu A so súradnicami ( )AA yx , musí byť realizovaná v troch krokoch: 1. Posun začiatku súradníc do bodu A ( )AA yxTQ ,= 2. Rotácia ( )QRQ α= 3. Spätný posun začiatku súradníc ( )QyxTQ AA −−= ,

9.3 Transformácie v 3D Oproti 2D teraz uvažujeme obecnú rotáciu ako superpozíciu troch elementárnych rotácií: v rovine xy, v rovine yz, a v rovine xz.

Page 80: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

( )⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜

⎛ −

=

1000010000cossin00sincos

αααα

αxyR , , . ( )⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜

⎛−

=

10000cossin00sincos00001

αααα

αyzR ( )⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜

−=

10000cos0sin00100sin0cos

αα

αα

αxzR

Zdanlivo zlé umiestnenie člena αsin− v poslednom vzťahu je vynútené nutnosťou jednotnej orientácie „kladných” smerov rotácie v príslušných súradnicových rovinách, tj. orientácia má tvar

(xy – yz – zx), a nie (xy – yz – xz.) Zmena mierky a posunutie majú podobné vyjadrenie ako 2D prípad:

( )⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜

=

1000000000000

,,z

y

x

zyx ss

s

sssS , . ( )⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜

=

1000100010001

,,z

y

x

zyx ttt

tttT

Keďže výsledný obraz zobrazujeme na 2D výstupných zariadeniach, v 3D sa objavuje nutnosť projekcie do 2D. Budeme uvažovať kolmú projekciu. Je treba si uvedomiť, že vzhľadom na relatívnosť vzájomného pohybu, hľadanie kolmej projekcie fixovaného telesa na ľubovoľne zvolenú projekčnú rovinu je ekvivalentné hľadaniu kolmej projekcie telesa na fixovanú rovinu, keď s telesom môžeme ľubovoľne pohybovať. Z toho dôvodu stačí analyzovať kolmú projekciu telesa napr. na rovinu . 0=z Táto projekcia má transformačnú maticu

⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜

=

1000000000100001

XYP

9.4 Transformačný reťazec Vyššie zmienené elementárne transformácie v procese zobrazenia je zmysluplné rozdeliť do niekoľkých fáz:

• prechod od reálnych súradníc k normovaným, • realizácia transformácií v normovaných súradniciach, • prechod od normovaných súradníc k súradniciam výstupného zariadenia.

Prvý a tretí krok pozostávajú len z translácií a škálovania, pričom závislosť na reálnej rozmerovej škále sa prejaví len v prvom kroku a závislosť na výstupnom zariadení sa prejaví len v poslednom – treťom kroku. Samotné transformácie sa tak stávajú nezávislé jednak na vstupných datach jednak na výstupných zariadeniach, čo sprehľadňuje celý process transformačného reťazca:

Page 81: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

1. Inicializuj matice elementárnych transformácií (rotácie o jednotkový uhol R, translácie o jednotkový krok T, škálovaciu S).

2. Inicializuj výslednú transformačnú maticu Q. 3. Inicializuj maticu výstupného zariadenia K. 4. Vykresli bod KQPP =′ . 5. V závislosti na požadovanej transformácii vyber maticu elementárnej

transformácie M. 6. Aktualizuj výslednú transformačnú maticu MQQ = 7. Prechod na krok 4. Napr. keď vrcholy, ktoré transformujeme, sú z oblasti

zmazmiymaymixmaxmi ,,, ×× , tak prechod k normovaným súradniciam (tj. inicializácia matice Q) sa realizuje posunutím o vektor (tx,ty,tz) a škálovaním hodnotou q:

⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜

−−−

×

⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜

=

⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜

−−−

=

1000100010001

1000000000000

100000

0000

z

y

x

z

y

x

ttt

qq

q

qtqqtqqtq

Q

kde

( ) ( ) ( ) zmizmaymiymaxmixmaq

zmizmatymiymatxmixmat zyx

−−−=

+=

+=

+=

,,max2

,2

,22 .

Súradnice výstupného zariadenia dostaneme kolmou projekciou na rovinu xy, preškálovaním normovaných hodnôt na veľkosť výstupného okna (parameter škálovania w) a posunutím začiatku súradníc do stredu okna (posun o vektor (ux,uy)). Matica výstupného zariadenia má preto tvar

⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜

×

⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜

×

⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜

=

⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜

=

1000000000100001

1000000000000

10000100

010001

10000000

0000

ww

wuu

uwuw

K y

x

y

x

kde okno výstupného zariadenia má rozsah symasymisxmasxmi ,, × , a preto

Page 82: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

škálovací koeficient má hodnotu ( ) ( ) 2

,min symisymasxmisxmaw −−= ,

vektor posunutia má súradnice 22

symisymausxmisxmau yx+

=+

= .

Realizujte systém na tuhé transformácie podľa ukázanej schémy.

9.5 Urýchlenie operácií Vidíme, že celý proces transformácií je založený na násobení matíc, kde sa využíva operácia skalárneho súčinu príslušného riadku a stĺpca násobených matíc

jijijijiij babababac 44332211 +++= . Musíme pri tom realizovať štyri násobenia a tri sčítania. Keď k tomu použijeme jednu aritmetickú jednotku (procesor) a proces prebehne postupne, tj. v jednom elementárnom kroku jedna elementárna operácia typu „+“ alebo „.“, tak na výpočet potrebujeme sedem krokov. Keď si predstavíme, že máme k dispozícii jednoduchšie, ale špecializované procesory, napr. dva násobiče a jeden sčítač, celý výpočet môžeme spraviť v štyroch krokoch:

1. krok: , ji bam 111 = ji bam 222 = , 2. krok: , 21 mms += ji bam 331 = , ji bam 442 = , 3. krok: , 1mss +=4. krok: . 2mss +=

Tento prístup sa v súčasnosti veľmi intenzívne využíva. Vedie k tzv. maticovým procesorom a pre potreby grafiky býva implementovaný v grafických kartách.

Page 83: ZÁKLADY PO Č ÍTA Č OVEJ GRAFIKY

10 Literatura [Bui] Bui,D.H., Skala,V.: Fast Algorithms for Clipping Lines and Line Segments in E2. The Visual Computer 14, No.1. 1998. pp31-38. [Ferko] Ferko,A., Ružický,E.: Počítačová grafika a spracovanie obrazu. Sapientia, Bratislava 1995. [Feynman] Feynman,R.,P., Leighton,R.,B., Sands,M.: Feynmanove prednášky z fyziky/2. Alfa 1982. [Horňák] Horňák,P.: Svetelná technika. SNTL, Alfa 1989. [Kolcun] Kolcun,A.: Krivky a plochy v počítačovej grafike. (Pripravovaný text). OU 2003. [Kufner] Kufner,J., Kadlec,A.: Fourierovy řady. Academia 1969. [Novák] Novák,M., Faber,J., Kufudaki,O.: Neuronové sítě a informační systémy živých organizmů. Grada 1992. [Skala] Skala,V.: Světlo, barva a baevné systémy v počítačové grafice. Academia 1993. [Sobota] Sobota,B., Milián,J: Grafické gormáty. Kopp 1996. [Žára] Žára,J.,Beneš,B.,Felkel,P.: Moderní počítačová grafika. Computerpress 1998.