fã~öé=_~ëéç=m~áåíéêäó=oéåçéêáåö

Maat: px
Weergave met pagina beginnen:

Download "fã~öé=_~ëéç=m~áåíéêäó=oéåçéêáåö"

Transcriptie

1

2 fã~öé=_~ëéç=m~áåíéêäó=oéåçéêáåö _~êí=^jbillq éêçãçíçê=w mêçñk=çêk=cê~åâ=s^k=obbqe = báåçîéêü~åçéäáåö=îççêöéçê~öéå=íçí=üéí=äéâçãéå=î~å=çé=öê~~ç= j~ëíéê=áå=çé=áåñçêã~íáå~=~ñëíìçééêêáåüíáåö=ãìäíáãéçá~

3 Voorwoord Beste lezer, Deze masterproef is het sluitstuk van mijn opleiding tot Master in de Informatica aan de UHasselt. Niet alleen mijn eigen kennis en inspanningen hebben echter geleid tot deze masterproef. In de eerste plaats ben ik dank verschuldigd aan mijn promotor, prof. dr. Frank Van Reeth, en aan mijn begeleider, Tom Van Laerhoven, voor de nuttige opmerkingen en tips. Verder wil ik nog mijn zus Marleen en Anne-Sophie Jordens bedanken voor het nalezen van deze tekst. En last but not least, wil ik mijn familie en vrienden bedanken, niet alleen voor het nalezen van deze masterproef, maar ook voor de verstrooiing na de lange en eenzame uren achter de computer. Bart Ameloot 23 mei 2006 i

4 Abstract Deze masterproef geeft een overzicht van verschillende painterly rendering systemen. Dit zijn systemen die een beeld transformeren naar een geschilderd beeld. Hiervoor worden er aan de hand van de eigenschappen van het beeld brushstrokes aangemaakt die vervolgens uitgetekend worden op een canvas. Ook bespreek ik mijn eigen implementatie van één van deze technieken. Hoofdstuk 1 schetst de brede context waarin dit werk zich situeert. In de drie volgende hoofdstukken wordt er dieper ingegaan op verschillende painterly rendering systemen. Hoofdstuk 2 gaat over Paint by Numbers [Hae90], het eerste painterly rendering systeem en verschillende technieken die dit systeem hebben uitgebreid. Hoofdstuk 3 behandelt een techniek gebaseerd op het berekenen van image moments en hoofdstuk 4 bespreekt twee technieken die de brushstrokes bepalen mbv. computer vision technieken. De verschillende technieken die besproken worden genereren allemaal brushstrokes. De rendering van deze strokes wordt besproken in hoofdstuk 5. Mijn implementatie van de techniek uit hoofdstuk 3 wordt behandelt in hoofdstuk 6. Hierbij wordt dieper ingegaan op het opgestelde framework en op de invloed van de verschillende parameters die ingesteld kunnen worden. Tot slot volgt er nog een conclusie en een bibliografie. ii

5 Inhoudsopgave 1 Inleiding Non-Photorealstic Rendering Artistic Rendering Interactie Verf - Papier Painterly Rendering Overzicht Paint by Numbers en Afgeleide Technieken Paint By Numbers Stroke-eigenschappen Relaxation Overzicht Positie Geblurrede lagen Frequentie gebaseerde verfijning Oriëntatie Berekening gradiënt Lokale gradiënt Globale gradiënt Grootte Vorm Rendering Relaxation Energiefunctie Relaxation algoritme Discussie Image Moment Technieken Image moment theorie Stroke verdeling Stroke area image Stroke positie image Stroke parameters Meerdere resoluties Variabele venster grootte Rendering iii

6 3.7 Dithering Floyd - Steinberg dithering Dithering met de murray curve Discussie Vision Technieken Combinatie van vision technieken Segmentatie Ridge Set Stroke berekening Image salience Salient map Stroke eigenschappen Discussie Visualisatie Bump Mapping Belichting Hoogteveld Normal map Implementatie Framework Rendering Texture mapping & blending Bump Mapping Invloed van de Parameters Invloed van gamma Invloed van de venstergrootte Positie van het licht Murray vs. klassieke dithering Eén vs. meerdere resoluties User Interface Resultaten Conclusie Toekomstig werk iv

7 Hoofdstuk 1 Inleiding Dit hoofdstuk schetst de brede context waarin dit werk zich situeert. Dit werk behoort tot het painterly rendering domein, wat op zijn beurt weer een onderdeel vormt van nonphotorealistic rendering (NPR). Alle technieken die een afbeelding of video genereren die niet als doel hebben een fotorealistisch beeld te bekomen, behoren tot dit domein. 1.1 Non-Photorealstic Rendering NPR beoogt, in tegenstelling tot photorealistic-rendering, geen realistisch resultaat te bekomen. NPR is dus gedefinieerd door wat het niet is en is dus een zeer breed domein. Elk beeld heeft als doel het overbrengen van informatie. Realistische afbeeldingen bevatten zeer veel details, maar deze details bevatten niet veel extra informatie. Een huis kan bijvoorbeeld ruw geschetst worden met enkele lijnen terwijl een realistische afbeelding van een huis ook de voegen tussen de bakstenen bevat. Via NPR-algoritmen kan men ook extra informatie weer geven die onmogelijk op een realistische manier weergegeven kan worden. Een voorbeeld hiervan is een fish-eye view [LA94]. Bij deze techniek wordt er op een bepaald deel van het beeld ingezoomd, terwijl de rest van het beeld kleiner wordt weergegeven. Men kan ook bepaalde delen van een beeld verplaatsen. Een voorbeeld hiervan zijn exploded diagrams. Dit zijn technische tekeningen die de opbouw van een toestel duidelijk maken (fig. 1.1). De twee aangehaalde voorbeelden proberen om extra informatie over te brengen. Maar er bestaan ook technieken die enkel een esthetisch resultaat proberen te bekomen. Deze technieken baseren zich op de schilderkunst waarbij een schilder enkel de essentie of het gevoel dat bij een scène hoort, probeert over te brengen met een schilderij. Deze masterproef behoort tot dit subdomein dat men artistic rendering noemt. 1

8 2 Figuur 1.1: Exploded diagram van een mars-robot. ( 1.2 Artistic Rendering Artistic rendering technieken simuleren schilder- en tekentechnieken en dit domein kan nog worden opgesplitst in twee subdomeinen: Technieken die de interactie tussen verf en papier simuleren. Technieken waarbij er automatisch een afbeelding wordt gegenereerd op basis van een foto of een 3D model. Dit zijn de painterly rendering systemen. Sommige van deze technieken modelleren een algemene verfstijl, terwijl andere specifiek ontworpen zijn voor een bepaald stijl zoals bijvoorbeeld waterverf [JHN04]. In de rest van deze paragraaf worden deze twee onderverdelingen kort besproken, samen met enkele voorbeelden Interactie Verf - Papier Deze technieken vallen ook nog uit elkaar in twee categorieën: Technieken die enkel de look van verf proberen te simuleren. Technieken die gebaseerd zijn op de fysica. Technieken uit de eerste categorie zijn al wat ouder en genereren een afbeelding (texture) die over een stroke kan worden gelegd. Hierdoor lijkt het alsof de stroke uit verf bestaat.

9 3 Strassmann [Str86] kwam als eerste op het idee om brushes te simuleren. In [PV95] wordt een techniek voorgesteld waarbij textures gegenereerd worden die goede resultaten geven indien een schilderij wordt opgebouwd uit verschillende resoluties. Dit betekent dat een schilderij wordt opgebouwd uit verschillende beelden die over elkaar worden geschilderd. Hierop zal dieper worden ingegaan in hoofdstuk 2 en 3. Fig. 1.2 toont enkele brushstrokes van een andere techniek die elementen uit verschillende technieken combineert [GCS02]. In dit geval heeft men ervoor gekozen om klassieke olie-verf te simuleren. Figuur 1.2: Enkele brushstrokes. Deze simuleren enkel het uitzicht van een brush en zijn niet op de fysica gebaseerd. [GCS02] Bij de andere benadering gebruikt men fysica-gebaseerde methoden die de interactie tussen de verf en het papier modelleren. Doordat er ook met de droogtijd van de verf rekening gehouden wordt, verkrijgt men meer natuurlijke resultaten. Wanneer men een nieuwe stroke aanbrengt, zal deze stroke zich vermengen met de onderliggende strokes wanneer deze strokes nog niet droog zijn. In [CE91] wordt een systeem voorgesteld dat gebruikt kan worden om olie-verf te modelleren en [CAS + 97] stelt een systeem voor dat specifiek ontworpen is voor waterverf (fig. 1.3). Figuur 1.3: Enkele brushstrokes in waterverf stijl. Merk op dat rechts het typische effect van waterverf duidelijk zichtbaar is: onderliggende strokes hebben een groot effect op bovenliggende strokes. [CAS + 97] Painterly Rendering Methoden uit deze categorie transformeren een afbeelding of 3D model naar een schilderij en ook dit domein kan verder worden opgesplitst: Systemen die een bepaalde schilderstijl proberen te benaderen. Systemen die beeld transformeren naar een klassiek schilderij.

10 4 Voorbeelden uit de eerste categorie zijn pen & inkt-tekeningen [WS94], was- tekeningen [RMN03] en het kubisme [CH03]. Bij het kubisme worden verschillende zichten op dezelfde scène verwerkt in één afbeelding (fig. 1.4). Een ander mooi voorbeeld is een systeem waarbij een schilderij bestaat uit gebieden met een vaste kleur [DS02]. Rond de contouren van de objecten worden volle zwarte lijnen getekend. Doordat deze lijnen niet perfect de contouren volgen, wordt de abstractie bevorderd (fig. 1.5). Figuur 1.4: Het kubisme. Het algoritme verwacht verschillende afbeeldingen van verschillende posities van dezelfde scène (afbeelding rechts). [CH03] Figuur 1.5: Een abstract painterly rendering systeem. [DS02] In dit werk worden echter alleen technieken besproken die klassieke schilderijen genereren uit een afbeelding. Dit zijn systemen die geen geen abstract schilderij genereren 1 en waarbij gebruik gemaakt wordt van verf. Er bestaan verschillende soorten systemen. Sommige systemen passen een globale transformatie toe op het invoerbeeld, terwijl andere systemen aan de hand van de eigenschappen van het beeld brushstrokes genereren die vervolgens één voor één op een canvas worden uitgetekend. Een andere mogelijke onderverdeling is volgens het verf-type waarvoor ze geschikt zijn, bijvoorbeeld waterverf. Globale transformatiesystemen Dit zijn systemen die een beeld transformeren naar een schilderij. Eén van deze technieken werd ontwikkeld door Herzmann en hierbij leert het systeem een filter aan om een beeld te 1 Tenzij het invoerbeeld natuurlijk abstract is.

11 5 transformeren [HJO + 01]. Hiervoor verwacht het systeem als input een origineel beeld samen met een schilderij van dit beeld. Het systeem bepaalt vervolgens de filter die het originele beeld transformeert naar het schilderij. Nu het systeem deze filter kent, kan de filter ook worden toegepast op een ander beeld. De resultaten hiervan zijn zeer indrukwekkend, zoals te zien is in fig Het nadeel is natuurlijk dat het schilderij waaruit de filter geleerd wordt, representatief moet zijn voor alle onderdelen van een bepaalde stijl. Deze techniek is niet enkel ontworpen voor painterly rendering. Zo kan hij ook gebruikt worden om andere filters te leren, zoals bijvoorbeeld het inkleuren van een grijswaardenbeeld. Figuur 1.6: Links een beeld in Van-Gogh stijl. Rechts in waterverf. De filters om deze stijlen te bekomen werden geleerd uit een beeld en een schilderij van dit beeld. [HJO + 01] Brushstroke systemen Dit werk bespreekt systemen waarbij er brushstrokes aangemaakt worden die vervolgens op een canvas worden getekend. De attributen van een brush kunnen verschillen van systeem tot systeem, maar onderstaande attributen komen bijna altijd terug: Positie Grootte Oriëntatie Vorm Kleur Zoals reeds vermeld bestaan er ook technieken die voor een bepaalde verfsoort ontworpen zijn, zoals het systeem van Henry Johan et. al [JHN04]. Bij deze techniek wordt het beeld eerst opgesplitst in verschillende regio s. Afhankelijk van de eigenschappen van een regio krijgt deze regio een painting rule. Een painting rule bepaalt hoe de strokes van een regio getekend zullen worden, bijvoorbeeld of het resultaat van strokes die overschilderd worden, nog veel invloed heeft op het eindresultaat. Fig. 1.7 toont het resultaat van deze techniek. In dit werk worden er echter enkel painterly rendering systemen besproken die brushstrokes genereren, maar niet voor een specifieke verf-stijl ontworpen zijn.

12 6 Figuur 1.7: Eerst worden er brushstrokes gegenereerd die vervolgens worden uitgetekend. De hier gebruikte techniek is specifiek voor waterverf. [JHN04] 1.3 Overzicht Dit hoofdstuk schetste de context waarin deze masterproef zich situeert. In de volgende drie hoofdstukken worden verschillende technieken besproken die brushstrokes uit een beeld genereren. De rendering van deze strokes wordt besproken in hoofdstuk 5 en hoofdstuk 6 gaat over mijn eigen implementatie van een techniek uit hoofdstuk 2.

13 Hoofdstuk 2 Paint by Numbers en Afgeleide Technieken Paint by numbers [Hae90] is de grondlegger van alle painterly rendering systemen en wordt dan ook als eerste techniek besproken. Dit systeem is slechts semi-automatisch maar er zijn een hele reeks technieken beschikbaar die dit systeem automatiseren of verbeteren [Lit97, Her98, HE04]. Deze aanpassingen worden besproken in de rest van dit hoofdstuk. 2.1 Paint By Numbers De naam van deze techniek is afkomstig van het gelijknamige schilderspel van Ravensburger waarbij een afbeelding is opgesplitst in verschillende gebieden. Elk gebied heeft een nummer waar een kleur mee overeenkomt. Door de gebieden één voor één in de juiste kleur te schilderen, bekomt men dus een schilderij. Paint by Numbers van Paul Haeberli [Hae90] werkt volgens hetzelfde principe: de gebruiker begint met een leeg canvas en duidt hierop posities aan waar er strokes moeten komen. Het systeem tekent op elke aangeduide positie vervolgens een stroke. De kenmerken van deze stroke kunnen al dan niet automatisch bepaald worden. Doordat het de gebruiker is die moet aangeven waar het er strokes moeten komen, is het systeem slechts semi-automatisch. fig. 2.1 toont het resultaat van deze techniek Stroke-eigenschappen Een brushstroke wordt bepaald door de volgende attributen: Positie Grootte Oriëntatie 7

14 HOOFDSTUK 2. PAINT BY NUMBERS EN AFGELEIDE TECHNIEKEN 8 Figuur 2.1: Het paintsysteem van Paul Haeberli. Linksonder in het linkse beeld staat het originele beeld. Het rechtse beeld is het resultaat. [Hae90] Vorm Kleur Deze paragraaf bespreekt hoe deze kenmerken bepaald worden in het systeem van Haeberli. Vervolgens wordt besproken hoe de berekening van elk attribuut verbeterd of geautomatiseerd kan worden adhv. beeldeigenschappen. Positie Zoals reeds vermeld werd moet de gebruiker de posities opgeven waar er strokes getekend moeten worden. Wanneer de gebruiker op het canvas klikt wordt er op deze positie een stroke aangemaakt. Wanneer de gebruiker de muis constant indrukt en er mee beweegt, worden er dus zeer veel strokes gegenereerd. Indien de muisbewegingen gebeuren volgens een regelmatig patroon, zal dit echter tot artefacten leiden. Daarom wordt er op een stochastische manier in de beurt van de muisklik een stroke aan gemaakt zodat er geen artefacten optreden. Grootte Er zijn twee methoden om de grootte van de strokes in te stellen. Ofwel laat men de grootte afhangen van de snelheid van de muis, snelle bewegingen geven dan grote strokes. Ofwel kan de gebruiker de grootte instellen voor elke stroke mbv. de up- en down-toetsen op het toetsenbord. Oriëntatie De oriëntatie van een stroke kan op verschillende manieren bepaald worden: In de richting waarin de muis beweegt. De gebruiker maakt eerst een beweging met de muis om de richting van een stroke aan te geven. Hiervoor drukt hij de middelse muisknop in en beweegt dan in de richting waarin de stroke getekend moet worden. Deze oriëntatie wordt dan gebruikt voor de strokes tot de oriëntatie weer veranderd wordt op dezelfde manier.

15 HOOFDSTUK 2. PAINT BY NUMBERS EN AFGELEIDE TECHNIEKEN 9 Via een tweede beeld dat de oriëntatie van de brushstrokes bepaald (fig. 2.2). Afhankelijk van de gradiënt. Dit is een vector waarvan de richting de grootste kleurverandering aangeeft in een punt van het beeld. Dit is dus een voorbeeld van een methode waarbij een stroke-parameter bepaald wordt door de beeldeigenschappen. Dit wordt verder besproken in paragraaf 2.3. Figuur 2.2: De oriëntatie van de strokes wordt bepaald door het beeld in de linkerboven hoek. [Hae90] Vorm Een stroke kan verschillende vormen aannemen. De meest logische vorm is natuurlijk een rechthoek, maar ook cirkels, kegels,... zijn mogelijk. Kleur De kleur is de kleur van de pixel waar de stroke start Relaxation Een eerste poging van Haeberli zelf om er een volledig automatisch systeem van te maken, is met behulp van relaxation. Hierbij wordt iteratief gezocht naar de meest ideale oplossing of anders gezegd, het beste schilderij. De ideale oplossing is een afbeelding die een energiefunctie minimaliseert. Omdat het vrijwel onmogelijk is om deze functie analytisch te minimaliseren wordt er een benaderend minimum gezocht met relaxation. Hiervoor worden constant aanpassingen aan de voorlopige oplossing gesuggereerd. Indien een aanpassing de oplossing verbetert, wordt de aanpassing aanvaardt, anders wordt ze verworpen. Door aanpassingen te blijven maken, zal het resultaat uiteindelijk convergeren naar een afbeelding met minimale energie.

16 HOOFDSTUK 2. PAINT BY NUMBERS EN AFGELEIDE TECHNIEKEN 10 Haeberli maakt gebruik van dirichlet domeinen 1 om de energiefuncttie te specifiëren. Dit is duidelijk te zien in het eindresultaat (fig. 2.3). Figuur 2.3: Een poging om het systeem te automatiseren: relaxation met behulp van dirichlet domeinen. [Hae90] Overzicht Het systeem van Haeberli kan nog op verschillende manieren verbeterd worden. De volgende paragrafen bespreken deze methoden. Elke paragraaf bespreekt een stroke-attribuut en relaxation wordt ook verder uitgewerkt. Tabel 2.1 geeft een schematisch overzicht van de verbeteringen en de bijhorende paragrafen waarin ze besproken worden. Paragraaf Verbetering Positie 2.2 Grid over het beeld Geblurrede lagen over elkaar geschilderd Verschillende lagen met meer strokes aan de randen Oriëntatie 2.3 Oriëntatie mbv. lokale gradiënt Oriëntatie mbv. globale gradiënt Grootte 2.4 Beperkt door objectranden Beperkt door kleur Vorm 2.5 B-Splines Relaxation 2.7 Volledige automatisering Tabel 2.1: Overzicht van de verbeteringen van het systeeem van Haeberli. 1 gegeven een verzameling punten S, dan behoort een willekeurig punt tot het dirichlet domein van een van de punten van S indien alle andere punten uit S verder van dit punt liggen.

17 HOOFDSTUK 2. PAINT BY NUMBERS EN AFGELEIDE TECHNIEKEN Positie Het grootste nadeel van het systeem van Haeberli is dat de gebruiker zelf moet aangeven waar er strokes moeten komen. Een logische stap om dit te automatiseren is het plaatsen van een grid over het beeld waarbij er om de X aantal pixels een stroke wordt gestart [Lit97]. De gebruiker geeft hierbij de afstand aan tussen de punten waar er strokes moeten komen. Het nadeel van deze methode is dat er geen rekening gehouden wordt met de eigenschappen van het beeld. Indien er bijvoorbeeld een lijn zou liggen tussen twee punten van het grid, zou er van deze lijn in het resultaat niets meer te zien zijn. Dit kan worden opgelost door een beeld op te bouwen uit verschillende lagen waarbij elke laag meer en meer details toevoegt. Dit lijkt ook op de manier waarop een echte schilder zijn werk maakt: eerst schildert hij een ruwe benadering en vervolgens voegt hij meer en meer fijne details toe. In de rest van deze paragraaf worden twee methoden besproken die steunen op dit principe Geblurrede lagen Deze techniek steunt op het volgende idee: een schilder schildert eerst een ruwe afbeelding met een grote borstel en vervolgens neemt hij een fijnere borstel om details af te werken [Her98]. Om dit idee te benaderen wordt het resultaat opgebouwd uit verschillende lagen waarbij er iedere keer meer details worden toegevoegd. Hiervoor wordt elke laag geschilderd met een andere brush. Deze brush bepaalt de breedte van de strokes van een laag: hoe breder een brush, hoe minder strokes er nog nodig zijn om het canvas te vullen maar ook hoe moeilijker het is om details te schilderen. In elke laag kunnen bijgevolg ook objecten geschilderd worden die groot genoeg zijn om met de huidige brush benaderd te worden. De breedste brush wordt dan ook gebruikt voor de onderste laag. Figuur 2.4 toont het resultaat van deze techniek. De gebruiker kiest dus een aantal brushes met een verschillende grootte. Per brush wordt het beeld geblurred waarbij de blurfactor rechtevenredig is met de grootte van de brush. Hierdoor zullen er alleen objecten geschilderd worden die door de huidige brushgrootte benaderd kunnen worden. Over dit beeld wordt dan een grid gelegd om de startposities van de strokes te bepalen zoals aangegeven in de inleiding van deze paragraaf. De afstand tussen de strokes is ook in dit geval rechtevenredig met de brushgrootte. Niet voor elke positie van de grid zal er een nieuwe stroke begonnen worden. Eerst wordt er gekeken of een nieuwe stroke wel bijdraagt tot een beter resultaat. Dit doet men door rond een positie waar een stroke gestart kan worden een vierkant te beschouwen waarvan de zijde gelijk is aan de afstand tussen twee gridpunten. Men beschouwt ook hetzelfde vierkant in het voorlopige resultaat (referentie vierkant) 2. Indien het kleurverschil tussen beide vierkanten groot genoeg is, begint men een nieuwe stroke. Om dit verschil te berekenen, wordt voor elke pixel het kleurverschil met de overeenkomstige pixel in het referentie vierkant berekend en worden de kleurverschillen van de pixels gesommeerd. Als het totale kleurverschil groot genoeg is (afhankelijk van een threshold-waarde) wordt een nieuwe stroke aangemaakt. Dit gebeurt dan niet op de gridpositie zelf, maar op de pixel van het vierkant die het meest verschilt met het referentie vierkant. 2 Indien het de onderste laag betreft krijgt het canvas een constante kleur en wordt dit beschouwt als het voorlopige resultaat.

18 HOOFDSTUK 2. PAINT BY NUMBERS EN AFGELEIDE TECHNIEKEN 12 Figuur 2.4: Linksboven het origineel. Rechtsboven het resultaat na het renderen van de eerste laag. Linksonder het resultaat na de tweede laag en rechtsonder het eindresultaat. De eerste laag werd geschilderd met cirkels met een straal van 8, de tweede met een straal van 4 en de laatste met een straal van 2. Merk op dat de resultaten van eerdere lagen zichtbaar blijven in het resultaat. [Her98] Frequentie gebaseerde verfijning Bij deze techniek wordt een schilderij, net zoals de vorige methode, opgebouwd uit verschillende lagen waarbij elke laag geschilderd wordt door een brush met een bepaalde grootte. De onderste laag wordt ook op dezelfde manier geschilderd als bij de vorige techniek, maar de strokes van de hogere lagen worden op een andere manier bepaald. Bij de vorige techniek werd een nieuwe stroke aangemaakt indien het kleurverschil tussen het huidige beeld en het resultaat te groot was. Deze techniek vertrekt echter van een ander idee: nadat een schilder een ruwe laag geschilderd heeft, schildert hij met een kleinere brush de contouren van de objecten [HE04]. Fig. 2.5 toont het resultaat van deze techniek. De onderste laag wordt dus op dezelfde manier bepaald als in de vorige paragraaf. Bij de hogere lagen worden er echter alleen nog strokes bijgemaakt in de buurt van randen. Om de grootte van de randen in de tussenliggende lagen te variëren wordt voor elke laag het beeld geblurred proportioneel met de brushgrootte (fig. 2.6 bovenaan). Om de bovenste laag te bepalen wordt het beeld niet meer geblurred. Vervolgens worden de randen bepaald met canny edge detection [Can86]. Door het blurren van het beeld zullen de randen groter zijn voor de lagen die geschilderd worden met grotere brushes. Binnen de randen worden er dan nieuwe strokes begonnen en ze blijven groeien tot ze de rand bereiken. Fig. 2.6 toont de verschillende stappen van het algoritme.

19 HOOFDSTUK 2. PAINT BY NUMBERS EN AFGELEIDE TECHNIEKEN 13 Figuur 2.5: De verschillende lagen die over elkaar worden geschilderd. Het resultaat is te zien in fig. 2.6 rechtsonder. [HE04] 2.3 Oriëntatie Een van de mogelijkheden om de oriëntatie te bepalen in het systeem van Haeberli is door gebruik te maken van de gradiënt. De gradiënt is een vector waarbij de richting van de vector aangeeft in welke richting er de grootste kleurverandering optreedt t.o.v. de huidige pixel. De grootte van deze vector geeft aan hoe sterk de verandering is. Als een artiest een stroke schildert met een bepaalde kleur, dan doet hij dit in de richting waarin de kleur niet verandert. Aangezien de gradiënt de richting aangeeft van de grootste verandering, geeft de normaal van de gradiënt de richting aan van de minste verandering. Dit zorgt er ook voor dat de strokes de contouren van de objecten volgen [Lit97]. Er zijn twee methoden om de waarde van de gradiënt te bepalen: lokaal of globaal. In het eerste geval wordt de gradiënt berekend op de positie waar men een stroke wil plaatsen, in het tweede geval wordt de gradiënt geïnterpoleerd uit de sterkste gradiënten van het beeld Berekening gradiënt De gradiënt kan enkel berekend worden op grijswaardenbeelden. Om een (RGB-)beeld om te zetten naar een grijswaarden beeld kan volgende formule gebruikt worden [GW02]: intensiteit waarde = 0.30R G B (2.1) De gradiënt is de eerste afgeleide van het beeld en kan berekend worden mbv. sobel-operatoren [GW02]. Dit zijn twee convolutiemaskers met grootte 3x3:

20 HOOFDSTUK 2. PAINT BY NUMBERS EN AFGELEIDE TECHNIEKEN 14 Figuur 2.6: Linksboven het originele beeld. Van boven staan telkens de berekende randen van de geblurrede beelden. De onderste rij zijn de tussenresultaten. Rechtsonder is dus het eindresultaat. [HE04] gradiënt(x, y) = [G x, G y ] = [ f x, f ] y (2.2) G x = G y = (2.3) Om geen grote schommelingen te krijgen tussen gradiënten van punten die in de buurt van elkaar liggen, wordt het beeld eerst geblurred alvorens de gradiënt te berekenen [Lit97] (fig. 2.7) Lokale gradiënt Bij deze methode wordt er geen rekening gehouden met de algemene oriëntatie in een beeld. Als er een nieuwe stroke wordt gestart, wordt in de punt de gradiënt berekend mbv. sobeloperatoren [GW02]. De oriëntatie van deze stroke is dan loodrecht op de berekende gradiënt. Wanneer de gradiënt een kleine grootte heeft, betekent dit dat er op deze positie geen grote kleurverschillen zijn met de omliggende pixels. De gradiënt geeft in dit geval dan ook geen goede indicatie voor het bepalen van de oriëntatie. Om de oriëntatie toch wat overeen te laten komen met de oriëntatie van strokes in de buurt 3 zoekt men goede gradiënten 4 waaruit men een nieuwe waarde kan interpoleren [Lit97]. 3 het gaat hier om strokes die gebruikt worden om hetzelfde object voor te stellen. Als deze strokes een ander object voor stellen, is de grootte van de gradiënt immers wel groot genoeg. 4 dit zijn gradiënten die wel groot genoeg zijn.

21 HOOFDSTUK 2. PAINT BY NUMBERS EN AFGELEIDE TECHNIEKEN 15 Figuur 2.7: twee gradiënt-beelden. In het rechtse beeld werd het beeld eerst geblurred vóór het berekenen van de gradiënten. In het linkse beeld niet. Het valt meteen op dat het linkse beeld het originele beeld beter benadert. [Her05] Globale gradiënt De richting kan ook bepaald worden door de sterkste gradiënten in het beeld waardoor de strokes meer de contouren van de objecten volgen [HE04]. Hiervoor wordt gebruik gemaakt van een radiale basis functie (RBF). Dit zijn interpolatie functies waarbij de output enkel afhangt van de afstand tot een van de interpolanten [rbf]. In dit geval interpoleert de RBF globaal de gradiënt voor een pixel uit de sterkere gradiënten. Eerst moeten de posities van de sterke strokes bepaald worden. Dit zijn punten waarvan de grootte van de gradiënt groter is dan een bepaalde threshold. Sterke strokes mogen ook niet in de buurt van elkaar liggen. Het bepalen van de threshold gebeurt adaptief: indien in een eerste iteratie teveel sterke strokes worden gevonden, wordt de threshold verlaagt. Indien er te weinig worden gevonden, wordt de threshold verhoogd. Vervolgens kan men de gradiënt op de overige posities interpoleren uit de gevonden sterke strokes. Dit wordt berekend aan de hand van een gewogen som van parameters [Her05]: n 1 f(i) = c i f(p i ), i=0 ci = 1 (2.4) p i staat voor de positie van een sterke stroke en f(p i ) voor de gradiënt zelf. Het gewicht c i wordt bepaald door de afstand d i van een sterke stroke tot het punt waarvoor we de gradiënt willen berekenen:

22 HOOFDSTUK 2. PAINT BY NUMBERS EN AFGELEIDE TECHNIEKEN 16 c i = 1 d 3 i, p i i c i (2.5) De sterke gradiënten worden niet opnieuw bepaald voor elke laag. Ze worden in het begin bepaald voor het originele beeld en deze waarden worden dan in iedere laag gebruikt. Figuur 2.8: Lokale berekening van de gradiënt. Het valt op dat de gradiënten die in de buurt van elkaar liggen, toch een heel andere oriëntatie hebben. [Her05] 2.4 Grootte Een natuurlijke manier om de lengte van een stroke te bepalen is om de stroke te laten stoppen als er een edge wordt gevonden [Lit97, HE04]. Hiervoor moeten de randen van de objecten bepaald worden, dit kan gedaan worden met canny edge detection [Can86]. Men kan er ook voor kiezen om een stroke te beginnen met een bepaalde kleur en deze stroke blijft vervolgens groeien totdat het verschil tussen de kleur van de stroke en de kleur van de overeenkomstige pixel in het beeld kleiner is dan een threshold [Her98]. In beide gevallen is er een grens aan de maximale grootte van de strokes. Zeer lange strokes zijn immers ook niet realistisch. De breedte van een stroke wordt bepaald door de breedte van de brush van de huidige layer, zie paragraaf Vorm Paul Haeberli gebruikte verschillende geometrische vormen zoals rechthoeken, cirkels, kegels,... om strokes voor te stellen. Nog een andere mogelijkheid zijn splines [Her98]. Met splines is het mogelijk om de natuurlijke krulling van een stroke te modelleren.

23 HOOFDSTUK 2. PAINT BY NUMBERS EN AFGELEIDE TECHNIEKEN 17 Figuur 2.9: Globale berekening van de gradiënt. De dikkere strokes zijn de sterke strokes. Het verschil met figuur 2.8 is meteen duidelijk. De curves lijken ook heel erg op de stijl van Van Gogh [HE04]. [Her05] De plaats waar een stroke gestart wordt, is het eerste controlepunt van de spline. Vervolgens wordt er gezocht naar andere punten om aan de spline toe te voegen. Hiervoor wordt in het eerste punt de oriëntatie bepaald met één van de twee technieken uit paragraaf 2.3. De oriëntatie en de breedte van de brush bepalen dan de positie van het volgende punt van de spline. Alvorens het punt toe te voegen, wordt er gekeken of dit punt nog wel tot de huidige stroke kan behoren volgens een van de stopcriteria uit paragraaf 2.4. Indien het punt aan de spline wordt toegevoegd, wordt hier opnieuw de gradiënt berekend. Hiermee kan men dan een eventueel volgend controlepunt berekenen. Het is belangrijk om een maximale grootte voor brushstrokes te bepalen. Het is immers mogelijk dat een controle punt dat reeds deel uitmaakt van de spline opnieuw wordt toegevoegd. Als er dan geen maximale grootte zou zijn, zou de stroke nooit stoppen. Fig verduidelijkt het algoritme om punten toe te voegen. Merk op dat er twee richtigen zijn die loodrecht staan op de gradiënt θ: θ + π 2 en θ π 2. Indien we een klassieke geometrische vorm gebruiken maakt het niet uit of er bij θ π 2 wordt opgeteld of afgetrokken. Indien er een spline wordt gebruikt, maakt dit wel uit. Om een zo glad mogelijke curve te verkrijgen wordt de hoek berekend tussen de θ + π 2 en de huidige richting. Als deze hoek kleiner is dan π 2 wordt θ+ π 2 gekozen als nieuwe richting, anders θ π Rendering Strokes kunnen niet in dezelfde volgorde worden gerenderd als ze zijn aangemaakt, dit zou artefacten geven. Ze worden daarom in willekeurige volgorde getekend. Om een extra loop

24 HOOFDSTUK 2. PAINT BY NUMBERS EN AFGELEIDE TECHNIEKEN 18 Figuur 2.10: (x 0, y y ) is het startpunt en hier wordt de gradiënt (G 0 ) berekend. De oriëntatie van de stroke is loodrecht op de gradiënt (D 0 ) (linksboven). De stroke groeit vervolgens met de lengte van de brushstroke en op de nieuwe positie herhaalt dit zich. Er zijn twee richtingen die loodrecht staan op de gradiënt, er wordt voor de richting gekozen die de grootste hoek vormt met de huidge stroke (rechtsboven en -onder). Linksonder staat de uiteindelijke stroke. [Her98] over alle strokes te vermijden, krijgen de strokes een random z-waarde die dan bepaalt of een stroke al dan niet (gedeeltelijk) overschilderd mag worden [Her98]. Als het resultaat is opgebouwd uit verschillende lagen kunnen strokes van een lagere laag wel nooit strokes van een hogere laag overschilderen. In de vorige paragrafen werd het duidelijk dat er heel wat parameters moeten ingesteld worden. Door deze parameters te veranderen kan men een andere stijl te bekomen (fig. 2.11). In [Her98] en [HE04] wordt een overzicht gegeven van het effect van deze parameters op de stijl. De parameters voor een aantal stijlen zoals het impressionisme worden ook besproken. 2.7 Relaxation In de vorige paragrafen werd besproken hoe de stroke-eigenschappen bepaald kunnen worden. Het nadeel hiervan is dat zeer veel parameters moeten worden opgegeven waarvan het effect, zeker voor een leek, niet altijd duidelijk is. Een systeem waarbij de gebruiker een aantal high-level kenmerken opgeeft waarna het systeem naar een afbeelding zoekt die het best aan de opgegeven kenmerken voldoet, is vanuit het standpunt van de gebruiker veel eenvoudiger. Voorbeelden van deze kenmerken zijn: gebruik zoveel mogelijk grote brushstrokes gebruik zo weinig mogelijk strokes...

25 HOOFDSTUK 2. PAINT BY NUMBERS EN AFGELEIDE TECHNIEKEN 19 Figuur 2.11: verschillende verfstijlen. Linksboven het origineel, rechtsboven expressionisme, linksmidden impressionisme, rechtsmidden waterverf, onderaan pointillisme. [Her] Het systeem zoekt nu een afbeelding die voldoet aan deze kenmerken. Aan de hand van de opgegeven kenmerken wordt eerst een energiefunctie opgesteld. De afbeelding die deze functie minimaliseert, is de gezochte afbeelding. De energiefunctie is te complex om analytisch te minimaliseren. Daarom maakt men gebruik van relaxation. Het systeem suggereert iedere keer een verandering aan het voorlopige resultaat, bijv. een verandering van een eigenschap van een bepaalde stroke. Indien deze verandering de totale energie van het schilderij vermindert, wordt de verandering aanvaardt, anders wordt ze verworpen 5. Bij relaxation convergeert de afbeelding naar het juiste resultaat, maar dit gebeurt zeer langzaam. Bovendien weet men nooit of men een minimum bereikt heeft of niet. Daarom wordt het algoritme afgebroken na een bepaald aantal iteraties. Met relaxation wordt dus slechts een benaderend miminum gezocht voor de energiefunctie. In de rest van deze paragraaf wordt aangegeven hoe de energiefunctie opgesteld kan worden en hoe het systeem veranderingen voorstelt. Het grote voordeel is natuurlijk dat de parameters op een intuïtieve manier kunnen worden opgegeven. Het nadeel van relaxation is dat relaxation computationeel véél zwaarder is vergeleken met de klassieke methoden uit de vorige paragrafen. Fig toont het verschil tussen 5 Dit verklaart de term relaxation: in de chemie staat dit voor de overgang van een atoom of molecule naar een lager energieniveau.

26 HOOFDSTUK 2. PAINT BY NUMBERS EN AFGELEIDE TECHNIEKEN 20 een beeld dat gegeneerd werd op de klassieke manier en een beeld dat gegenereerd werd met relaxation. Figuur 2.12: Het beeld in het midden is opgebouwd met technieken uit de vorige paragrafen. Het bestaat uit drie lagen en gebruikt B-splines voor de brushstrokes. Het rechtse beeld werd bekomen door relaxation toe te passen, dit vertoont duidelijk minder artefacten. Links is het originele beeld. [Her01] Energiefunctie De energiefunctie is een combinatie van verschillende functies die elk een gewenste eigenschap uitdrukken, waardoor de energiefunctie op een intuïtieve manier kan worden opgesteld: E(P ) = E nstr (P ) + E cov (P ) + E area (P ) + E app (P ) (2.6) Elke functie E x (P ) heeft een gewicht w x dat het belang van deze functie bepaalt. E nstr (P) bepaalt de gemiddelde grootte van de strokes. Door w nstr te veranderen kan men kiezen tussen overwegend grote strokes of juist overwegend kleine strokes: E nstr (P ) = w nstr aantal Strokes in P (2.7) E cov (P) bepaalt of het hele canvas gevuld moet worden met verf: E cov (P ) = w cov aantal lege pixels in P (2.8) E area (P) meet de totale oppervlakte die door alle strokes (S) wordt opgevuld en bepaalt dus hoeveel verf er gebruikt wordt: E area (P ) = w area Area(S) (2.9) S P

27 HOOFDSTUK 2. PAINT BY NUMBERS EN AFGELEIDE TECHNIEKEN 21 E app (P) meet pixelgewijs het verschil tussen het originele beeld en de het voorlopige resultaat P : E app (P ) = w app (x, y) P (x, y) G(x, y) (2.10) (x,y) X Hoe hoger w app (x, y), hoe meer het resultaat nog overeen dient te komen met originele beeld. E app (P ) en E area (P ) bepalen de trade-off tussen twee gewenste effecten: benader het oorspronkelijke resultaat zo goed mogelijk maar gebruik tegelijk zo min mogelijk verf. Door de verhouding van hun gewichten aan te passen kan men dus bepalen wat men verkiest. Bepalen van w app Er zijn twee plaatsen waar een artiest graag veel details heeft: aan de randen en bij de objecten op de voorgrond(zie ook paragraaf en 2.2.2). Door het gewicht van E app (P ) op deze plaatsen voldoende hoog in te stellen men dit effect verkrijgen. De waarde van w app kan automatisch worden bepaald of de gebruiker kan ervoor kiezen om zelf aan te geven welke gebieden met meer details getekend moeten worden. Automatisch bepalen van de randen Detecteer mbhv. de sobel operatoren [GW02] of canny edge detection [Can86] de randen in het originele beeld. Pas op dit beeld thresholding toe zodat er een binair beeld overblijft. Dit binair beeld geeft dan de waarde voor w app. Metapainting Bij metapainting geeft de gebruiker aan of er delen van het beeld anders behandeld moeten worden dan de rest. Zo kan hij de gebieden aangeven die hij belangrijk vindt om w app te initialiseren (fig en 2.14). Dit kan men ook algemener toepassen: de gebruiker kan instellen in welke gebieden hij grote of kleine strokes wil. Dit kan ook na het genereren van een beeld gebeuren Relaxation algoritme Zoals reeds vermeld, is het niet mogelijk om de energiefunctie analytisch te minimaliseren. Daarom wordt er gebruik gemaakt van een relaxation algoritme. De moeilijkheid is het suggereren van aanpassingen: de ruimte van alle afbeeldingen heeft een zeer hoge dimensie en het is dus zinloos om random suggesties te doen. Deze suggesties zullen in de meeste gevallen de energiefunctie niet minimaliseren en daarom wordt er gekozen voor de volgende aanpak: gegeven een positie 6, zoek de stroke met de minste energie op deze positie. Hiermee bedoelt men dat wanneer een eigenschap van deze stroke wordt aangepast, de totale energie van het schilderij wordt verhoogd. Het relaxation algoritme voor één positie is dus als volgt: 6 Op deze positie kan zich al dan niet een stroke bevinden. Indien er al een stroke aanwezig is, dient deze stroke te worden gerelaxt, anders moet er een stroke worden aangemaakt.

28 HOOFDSTUK 2. PAINT BY NUMBERS EN AFGELEIDE TECHNIEKEN 22 Figuur 2.13: Links het originele beeld. Rechts een beeld waarop de gebruiker heeft aangeduid welke gebieden met meer detail geschilderd moeten worden. Het resultaat is te zien in fig [Her01] 1. bereken de energie van de huidige afbeelding 2. selecteer een positie 3. verander stroke attributen (optioneel) 4. relax de stroke 5. bereken de energie van het nieuwe resultaat en accepteer eventueel de verandering Stroke Relaxation Er zijn verschillende methoden om een stroke te relaxen. Deze methoden worden hieronder opgesomd en worden in de volgende stap gecombineerd zodat het hele beeld wordt aangepast. Nieuwe Stroke: toevoegen van een stroke. Strokes zijn B-splines en worden gestart op de aangegeven plaats. Nieuwe strokes worden altijd bovenop andere strokes getekend. Strokes blijven groeien zoals beschreven in paragraaf 2.4. Hierna wordt de stroke gerelaxt. Reactiveer Stroke: Dit is het bovenstaande algoritme, het relaxen van een stroke. Indien het verwijderen van een stroke echter de totale energie meer vermindert dan de relaxation, wordt de stroke verwijderd. Vergroot Stroke: Indien een stroke kleiner is dan de maximale grootte, wordt de stroke gerelaxt en gereactiveerd 7. De uiteindelijke stroke is de suggestie. Verklein Stroke: Indien een stroke groter is dan de minimale grootte, wordt de stroke verkleind en gereactiveerd. Het resultaat is de suggestie. 7 de stroke relaxation methode Reactiveer Stroke wordt hiermee bedoeld.

29 HOOFDSTUK 2. PAINT BY NUMBERS EN AFGELEIDE TECHNIEKEN 23 Figuur 2.14: In figuur 2.13 gaf de gebruiker de belangrijke gebieden aan. Deze gebieden zijn hier duidelijk met meer details in de gezichten en de handen geschilderd. [Her01] Herkleur: De kleur van de stroke wordt veranderd in de gemiddelde kleur van alle zichtbare pixels van de stroke. Daarna wordt de stroke gereactiveerd en het resultaat is de suggestie. Stroke Relaxation De verschillende methoden voor individuele stroke relaxation zijn slechts bouwstenen die gecombineerd worden zodat alle strokes aangepast worden door een relaxation stap in het algoritme. De volgende operaties zorgen voor relaxation van alle strokes: Nieuwe laag: genereer random start punten voor strokes met een bepaalde brush-breedte en roep voor elk startpunt Nieuwe Stroke aan. Reactiveer alle strokes Vergroot alle strokes Verklein alle strokes Herkleur alle strokes

30 HOOFDSTUK 2. PAINT BY NUMBERS EN AFGELEIDE TECHNIEKEN 24 Script: dit kan twee of meer van de vorige stappen combineren tot één stap. Een nieuw beeld genereren is dus niets anders dan een script: for brush R (gesorteerd van groot naar klein) do N times Reactiveer alle strokes Nieuwe laag Vergroot/Verklein alle strokes Herkleur alle strokes 2.8 Discussie Dit hoofdstuk begon met de semi-automatische techniek van Paul Haeberli [Hae90] om een beeld om te zetten naar een schilderij. Bij dit systeem geeft de gebruiker de startposities van de strokes aan en het systeem bepaalt vervolgens de eigenschappen van de stroke. In de rest van dit hoofdstuk werd aangegeven hoe de techniek van Haeberli verbeterd en uitgebreid werd tot een automatisch systeem. In de volgende twee hoofdstukken worden technieken besproken die, net zoals bij het systeem van Haeberli, brushstrokes genereren die vervolgens uitgetekend worden. De eigenschappen van de brushstrokes worden echter op een heel andere wijze bepaald.

31 Hoofdstuk 3 Image Moment Technieken In het vorige hoofdstuk werden technieken besproken die het systeem van Haeberli [Hae90] hebben uitgebreid. Het nadeel van al deze methoden is dat er voor het bepalen van oriëntatie en de grootte van een stroke geen rekening wordt gehouden met de omgeving van de stroke. In [SY00b] wordt een techniek voorgesteld waarbij er veel kleine strokes komen in gebieden met veel detail en grotere strokes in gebieden met weinig detail. Het nadeel van deze techniek is dan weer dat strokes altijd rechthoekig zijn, maar dit valt niet op in het resultaat (fig. 3.1). Figuur 3.1: moment based rendering. Links origineel beeld, rechts het resultaat. (eigen implementatie) In grote lijnen werkt het algoritme als volgt: eerst worden de posities berekend waar er strokes moeten komen. Rond deze posities beschouwt men telkens een klein vierkantje, een venster. Voor dit venster wordt er dan een rechthoekige stroke berekend die het best dit vierkantje benadert. Het resultaat na deze stap is een verzameling van strokes. Die worden dan gesorteerd op grootte en uiteindelijk uitgetekend. Figuur 3.2 geeft dit schematisch weer. In de volgende paragrafen worden de verschillende stappen van het algoritme in detail besproken. Het algoritme steunt op het berekenen van image moments. Dit wordt dan ook eerst uitgelegd. 25

32 HOOFDSTUK 3. IMAGE MOMENT TECHNIEKEN 26 Figuur 3.2: De verschillende stappen van moment based painterly rendering. [SY00b] Hierna bespreken we het bepalen van de stroke-posities. Tenslotte gaan we dieper in op hoe een venster benaderd kan worden door een rechthoekige stroke en het renderen van de strokes. 3.1 Image moment theorie De kern van het algoritme steunt op de berekening van image moments. Vandaar dat deze theorie eerst wordt besproken. Image moments [Hor86] zijn enkel gedefinieerd voor grijswaarden beelden en worden berekend door een beeld te beschouwen als een kansdichtheidsfunctie [mom]. Als I een grijswaarden beeld is van grootte a X b, dan wordt het image moment van orde l rond de X-as en van orde m rond de Y-as als volgt gedefinieerd: a 1 b 1 M lm = x l y m I(x, y) met I(x, y) [0, 1] (3.1) x=0 y=0 Paragraaf 3.2 legt uit hoe de posities van de strokes bepaald worden. Stel dat we zo een positie hebben, beschouw dan een vierkantje rond deze positie: een venster. De grootte van dit venster kan door de gebruiker ingesteld worden, maar een grootte van 15x15 geeft goede resultaten [SY00b]. Het venster bepaalt wel de maximale grootte van de strokes, zie paragraaf 3.3. Vooraleer er image moments berekend kunnen worden, moet het venster eerst nog omgezet worden in een grijswaarden beeld. Dit is niet de klassieke grijswaarden transformatie maar deze transformatie genereert een color difference image (fig. 3.3). Een color difference image is een grijswaarden beeld waarbij de intensiteit van elke pixel aangeeft in welke mate deze pixel in het beeld overeenkomt met een referentiekleur. In ons geval is de referentiekleur de kleur van de pixel in het centrum van het venster (het witte vierkantje in fig. 3.3 links). Om een color difference image te berekenen wordt voor elke pixel de euclidische afstand tussen de kleur van een pixel en de referentiekleur bepaald: d(r, c) = (L r L c ) 2 + (U r U c ) 2 + (V r V c ) 2 (3.2)

33 HOOFDSTUK 3. IMAGE MOMENT TECHNIEKEN 27 Figuur 3.3: Links een venster, rechts het overeenkomstige color difference image. Alleen pixels met een kleur die erg lijkt op de kleur in het centrum zijn niet zwart. Hoe witter, hoe meer de kleur overeenkomt. [SY00b] Voordat deze formule gebruikt wordt, worden de RGB-waarden van de pixels omgezet naar de L*u*v*-waarden. In deze kleurenruimte liggen alle kleuren die voor het menselijk oog evenveel verschillen van een referentiekleur, op dezelfde afstand van deze referentiekleur [GW02]. In de formule staat L r voor de L-component van de referentiekleur en staat L r voor de L-component van de kleur van de huidige pixel, analoog voor U en V. Om image moments te kunnen berekenen moet de kleurwaarden in het interval [0,1] liggen, daarom wordt er nog een transformatie op toegepast. Het resultaat van deze stap is uiteindelijk een color difference image (fig. 3.3). f(d(r, c)) = { (1 (d(r, c)/d0)) 2 indien d [0, d0] 0 indien d [d0, ) (3.3) d0 is een cutoff waarde en is gelijk aan 150 [SY00b]. Shirashi en Yamaguchi geven geen reden op waarom ze 1 d(r, c)/d0 kwadrateren, maar volgens Nehab [Neh03] werkt dit als een gamma correctie. Hij geeft ook aan dat een gamma waarde van 16 de beste resultaten geeft. De formule voor een color difference image wordt dus: f(d(r, c)) = { (1 d(r, c) / d0) γ indien d [0, d0] 0 indien d [d0, ) (3.4) Het resultaat van deze stap is dus een grijswaardenbeeld waarvan de intensiteit van een pixel overeenkomt met de gelijkenis met de kleur van de centrumpixel in het originele beeld. Stel nu dat we op een bepaalde positie een stroke willen berekenen. Op deze positie wordt dan een color difference image berekend en vervolgens wordt, met behulp van image moments, een rechthoek bepaald diedit color difference image best benadert. Maar ook bij het bepalen van de stroke-posities, het onderwerp van de volgende paragraaf, worden er color difference images berekend. Daarom werd deze theorie eerst besproken.

34 HOOFDSTUK 3. IMAGE MOMENT TECHNIEKEN Stroke verdeling Zoals in de inleiding van dit hoofdstuk werd aangegeven, is het grote voordeel van momentbased rendering dat er veel strokes aangemaakt worden in de hoge frequentie gebieden, en minder strokes in de lage frequentie. Hierdoor kunnen ook details nog worden weergeven in het uiteindelijke resultaat. De idee is om eerst een grijswaarden beeld op te stellen waarbij de intensiteit van de pixels aangeeft in welke mate de kleur van deze pixel in het oorspronkelijke beeld overeenkomt met de omliggende pixels. Het resultaat van deze stap is een stroke area image (fig. 3.4). Op dit beeld wordt dan een algoritme toegepast dat veel strokes genereert in de donkere gebieden en toch nog voldoende strokes in de lichte gebieden zodat er geen gaten zijn in het uiteindelijke resultaat. In de volgende paragrafen worden deze ideeën verder uitgewerkt. Figuur 3.4: Links het oorspronkelijke beeld, rechts een stroke area image. Pixels die veel verschillen van de omliggende pixels zijn donker (bv. rond de oren), pixels die overeenkomen met hun omgeving zijn licht (bv. in het centrum van een tegel). [SY00b] Stroke area image Het resultaat van deze stap is een beeld waarbij de intensiteit aangeeft in welke mate de kleur van een pixel overeenkomt met de kleur van zijn omgeving. In paragraaf 3.1 werd uitgelegd dat een color difference image een grijswaardenbeeld is waarvan de intensiteit van de pixels overeenkomt met de gelijkenis met de kleur van de pixel in het centrum. Uit formule 3.1 om image moments te berekenen is ook duidelijk dat het moment van orde 0 rond de X-as en 0 rond de Y-as (M 00 ) de som is van alle waarden van het beeld. Door voor elke pixel een color difference image te berekenen en vervolgens M 00 hiervan te bepalen, kan dus een stroke area image worden opgesteld. Hoe meer lichte pixels in een color difference image, hoe meer de omgeving van de centrumpixel lijkt op deze centrum pixel. Door het sommeren van alle pixels

35 HOOFDSTUK 3. IMAGE MOMENT TECHNIEKEN 29 van een color difference image hebben we dus een idee in welke mate de kleur van een pixel overeenkomt met zijn omgeving. De waarde van M 00 wordt wel gescaleerd naar het interval [0,1]. Volgens Nehab is een stroke area image echter niets anders dan een niet-lineaire high-pass filter [Neh03]. In plaats van een color difference image te berekenen voor elke pixel, stelt hij voor om een variance image te gebruiken. Hierbij is de waarde van elke pixel de variantie van de kleur van deze pixel ten opzichte van de kleur van de centrum pixel. De intensiteit van de pixels van een variance image komen dus overeen met de gelijkenis met de centrum kleur, net zoals bij een color difference image. Verder geeft Nehab ook aan dat een color difference image ervoor zorgt dat er in sommige gebieden teveel strokes gegenereerd worden: Strokes in gebieden met een hoge frequentie zullen elkaar voor het grootste deel overlappen. Door een variance image te gebruiken, is dit niet meer het geval. Er zullen nog steeds veel strokes gegenereerd worden in de hoge frequentie gebieden, maar niet meer teveel (fig. 3.5) 1. Figuur 3.5: Links het origineel. In het midden een stroke area image berekend met variance images, rechts een berekend met color difference images. De hoge frequenties zijn duidelijk minder scherp. [Neh03] Stroke positie image In deze stap worden de posities bepaald waar er strokes moeten komen. In de vorig stap werd er een beeld opgesteld waarbij de intensiteit omgekeerd evenredig is met het aantal strokes dat er moet komen. Nu moet er een zwart-wit beeld opgesteld worden waarbij de zwarte pixels de posities zijn waar er strokes aangemaakt zullen worden (fig. 3.6). Hiervoor moet ons algoritme voldoen aan twee voorwaarden: Op plaatsen waar de stroke area image donker is, moeten er veel strokes komen. Er moeten voldoende strokes aangemaakt worden zodat het hele canvas bedekt is. 1 Deze twee beelden zijn eigenlijk de inverse van hun stroke area image. wit komt dus overeen met veel details, zwart met weinig.

36 HOOFDSTUK 3. IMAGE MOMENT TECHNIEKEN 30 Figuur 3.6: Het aangepaste dither algoritme toegepast op de stroke area image van figuur 3.4. Op de posities van elk punt wordt er een stroke berekend. Merk op dat er gebieden met een hoge frequentie veel strokes worden getekend en dat er in gebieden met een lage frequentie toch nog voldoende strokes gegenereerd worden zodat er geen gaten zijn in het uiteindelijke resultaat. Dither algoritmen kunnen gebruikt worden om het aantal bits per pixel van een beeld te verlagen en het resultaat toch nog zoveel mogelijk te laten lijken op het oorspronkelijke resultaat (fig. 3.15). Door een dither algoritme toe te passen op een stroke area image waarbij het aantal bits per pixel verlaagd wordt tot één, bekomt men een beeld dat voldoet aan de eerste voorwaarde [SY00b]. Aan de tweede voorwaarde is echter niet voldaan: op witte plaatsen in een stroke area image zullen er geen stroke posities gegeneerd worden. Hiervoor dient men dus het dither algoritme aan te passen [SY00b]. Een andere mogelijkheid is om de berekening van een stroke area image zo te beïnvloeden dat er wel voldoende stroke posities gegenereerd worden [NV02, Neh03]. Dit kan op twee manieren gebeuren. Deze drie methoden om aan de tweede voorwaarde te voldoen worden nu besproken. Aangepaste dithering In paragraaf 3.7 wordt een dither algoritme besproken dat gebruikt maakt van een murray curve. Dit is een curve die het hele beeld scant en hierbij alle pixels bezoekt. Dit dither algoritme kan worden aangepast zodat het ook voldoet aan de tweede voorwaarde. In plaats van de pixels van een stroke area image te sommeren, sommeren we 1/pixelwaarde. Dit zal ervoor zorgen dat er bij elke stap minstens 1 bij de huidige som wordt bijgeteld 2. Hierdoor zal er ook in witte gebieden regelmatig een stroke positie geplaatst worden en is er voldaan aan de tweede voorwaarde. Aan de eerste voorwaarde blijft natuurlijk ook nog voldaan doordat donkere pixels de som zeer snel doen stijgen. Indien de som in het originele dither algoritme overschreden wordt, wordt de threshold van de som afgetrokken. Het verschil tussen de som en de threshold is dan de nieuwe 2 pixelwaarden van een stroke area image liggen in [0,1]. Bij pixels met waarde 0 moet ɛ worden bijgeteld, anders wordt de som oneindig.

37 HOOFDSTUK 3. IMAGE MOMENT TECHNIEKEN 31 startwaarde en hier worden de volgende pixels bij opgeteld. In ons aangepast dither algoritme kunnen we dit niet doen. Als we namelijk een zwarte pixel tegenkomen, wordt de som oneindig 3 en zouden we een hele hoop zwarte pixels na elkaar krijgen. Daarom wordt er niet met het verschil verder gewerkt, maar met de som modulo de threshold 4. Gelimiteerde maximale afstand tussen strokes Door de murray curve te gebruiken en de inverse pixelwaarde op te tellen, worden er wel op regelmatige afstand van elkaar stroke-posities gegenereerd, maar dit geeft geen garantie dat er in het uiteindelijke resultaat toch geen lege plekken zullen zijn. Nehab [NV02] heeft dan ook een formule ontwikkeld waarbij de waarden van een stroke area image worden aangepast zodat hier wel garanties voor zijn: nieuwe waarde = 1 (spr 2 1)v + 1 (3.5) v is de waarde van de pixel in een stroke area image en spr is een door de gebruiker opgegeven waarde die bepaald hoe ver twee strokes maximaal uit elkaar mogen liggen. Deze formule mapt de waarde 0 op 1 en de waarde 1 op 1/spr 2. Door de waarden van een stroke area image op deze manier aan te passen, kunnen we een klassiek dither algoritme toepassen om de gewenste stroke distributie te verkrijgen 5. Er is immers voldaan aan de twee voorwaarden: dithering zorgt automatisch voor de invulling van de eerste voorwaarde en door het invoeren van de spreading factor spr kunnen er geen grote witte plekken meer zijn in een stroke area image. Bijgevolg zal er regelmatig een stroke positie worden gevonden. In [NV02] maken ze gebruik van Floyd-Steinberg dithering maar de kwantisatie error wordt wel niet volgens een vast patroon verdeeld maar random. Dit wordt gedaan om artefacten te vermijden. Gelimiteerde maximale en minimale afstand tussen strokes Op de hele donkere plaatsen in een stroke area image worden er zoveel stroke posities gegeneerd dat strokes hier elkaar toch maar voor het grootste gedeelte overlappen. Dit is bijvoorbeeld het geval in figuur 3.4 rond de oren en de ogen. Daarom is er ook een methode die naast een maximale afstand tussen twee strokes ook een minimale afstand oplegt [Neh03]. Hiervoor worden de waarden van een stroke area image opnieuw aangepast om vervolgens een dither algoritme hierop toe te passen zoals bij de vorige methode. Stel dat de afstand tussen twee strokes in het interval [a, b] moet liggen. Dit is hetzelfde als zeggen dat de pixels van een stroke area image in het interval [1 / b 2, 1 / a 2 ] moeten liggen. Om de waarden van een stroke area image aan te passen kan men volgende formule gebruiken: nieuwe waarde = ( 1 a 2 1 b 2 ).v + 1 b 2 (3.6) 3 Door ɛ bij pixels met waarde nul op te tellen wordt de som zeer groot, maar niet oneindig. 4 De modulo operator is alleen gedefinieerd voor gehele getallen, de som is echter een reeële waarde en moet dus eerst nog worden afgerond. 5 In paragraaf 3.7 wordt Floyd-Steinberg dithering besproken.

38 HOOFDSTUK 3. IMAGE MOMENT TECHNIEKEN 32 Nehab verwijst ook naar Blue-Noise Error Diffusion [Uli88] als dither algoritme omdat dit minder artefacten geeft dan Floyd-Steinberg dithering. 3.3 Stroke parameters In de vorige stap werden de posities bepaald. Op deze posities moeten nu strokes worden berekend. Hierin zit het grote verschil met de technieken uit het vorige hoofdstuk. Daar werd er (bijna) geen rekening gehouden met de omgeving voor het bepalen van de stroke parameters. Voor elke positie wordt er een color difference image berekend 6. Door verschillende image moments te berekenen kan men dan een rechthoek bepalen die het best deze color difference image benaderd [SY00b]. Deze rechthoek is dan de berekende stroke (fig. 3.7). Dit betekent wel dat de venstergrootte tevens de maximale lengte van een stroke bepaalt en dat strokes altijd rechthoekig zijn. Figuur 3.7: Links een color difference image. Rechts de stroke die hieruit wordt berekend. [SY00b] Volgende stroke-attributen moeten worden bepaald (fig. 3.8): Positie (x c, y c ) Grootte w, l Oriëntatie θ Kleur In de rest van deze paragraaf wordt besproken hoe deze parameters bepaald worden. Positie De posities die in de vorige stap berekend werden, zijn eigenlijk slechts voorlopige posities. De definitieve positie wordt bepaald door de volgende formule: x = M 10 M 00 y = M 01 M 00 (3.7) 6 Men kan natuurlijk ook de color difference images opslaan die nodig waren bij het berekenen van de stroke area image indien er daar geen variance image gebruikt werd. Dit verbruikt wel zeer veel geheugen!

39 HOOFDSTUK 3. IMAGE MOMENT TECHNIEKEN 33 Figuur 3.8: De stroke attributen. [SY00b] Grootte formule voor de breedte van de stroke: ( ) w = 6 a + c b 2 + (a c) 2 (3.8) formule voor de lengte van de stroke: ( ) l = 6 a + c + b 2 + (a c) 2 (3.9) de parameters a, b en c in deze formules worden als volgt berekend: x en y worden berekend met formule 3.7 a = M 20 M( 00 x 2 ) b = 2 M11 m 00 xy (3.10) c = M 02 M 00 y 2 Oriëntatie de oriëntatie θ van de stroke (in radialen) wordt gegeven door de volgende formule: ( ) arctan b a c θ = (3.11) 2 a, b en c worden berekend met formule Kleur De kleur van de stroke wordt bepaald door de kleur van de pixel van de voorlopige positie. Men had ook voor de kleur van de nieuwe positie kunnen kiezen, maar dit zou niet veel effect hebben. De color difference image is immers enkel niet nul voor waarden die op de kleur van de voorlopige positie lijken. Men had ook kunnen kiezen voor de mediaan of het gemiddelde [NV02], maar indien het venster groot zou worden, liggen deze waarden voor elk color difference image relatief dicht bij elkaar.

40 HOOFDSTUK 3. IMAGE MOMENT TECHNIEKEN Meerdere resoluties In paragraaf werd een techniek uitgelegd waarbij een beeld werd opgebouwd uit verschillende lagen. De onderste lagen bevatten een ruwe benadering van het beeld en de hogere lagen voegden iedere keer meer details toe. Bij moment based rendering bestaat er een gelijkaardig principe [NV02]. Hiervoor wordt er een piramide decompositie opgesteld [GW02]. De basis van deze piramide bevat het originele beeld, de top een geblurred beeld dat een aantal keer kleiner is dan het origineel. Om deze piramide op te stellen wordt het beeld geblurred met een gaussiaanse kernel en hierna maakt men het de helft kleiner door om beurt een rij en een kolom weg te laten. Dit geblurrede beeld kan men dan opnieuw blurren en verkleinen om een nog hogere laag te construeren, enz... Het is zinloos om voor elke laag stroke-posities te berekenen zoals voorgesteld in paragraaf 3.2. Elke laag zou dan zijn strokes tekenen over de strokes van de vorige laag. Daarom wordt er aan formule 3.5 een extra parameter toegevoegd, de enhancement factor e: nieuwe waarde = 1 (spr 2 1)v e + 1 (3.12) Deze enhancement factor zal er voor zorgen dat er in de hoge frequentie gebieden, de donkere gebieden in een stroke area image, meer strokes komen. Door de waarden van spr en e op zo een manier in te stellen dat er voor de onderste lagen veel strokes gegenereerd worden en voor de bovenste lagen alleen strokes gegenereerd worden in hoge frequentie gebieden bekomen we een resultaat dat gelijkaardig is aan dat van paragraaf 2.2.2: De onderste laag zorgt ervoor dat er op het hele canvas strokes zijn, de hogere lagen voegen meer details toe (fig. 3.9). Hiervoor dienen zowel spr als e groot te zijn in de hogere lagen: spr = (w + 0.3)l (3.13) e = 3(l + 1) (3.14) De variabele w staat voor de venstergrootte en l staat voor het huidige piramide niveau waarbij het kleinste beeld vanonder ligt en dus 0 als waarde voor l heeft. Door spr afhankelijk te maken van de venstergrootte, zorgt men ervoor dat er overal strokes zijn. Door de venstergrootte te vermenigvuldigen met het huidig piramide niveau worden er voor de hogere resoluties veel minder strokes gegenereerd. Maar doordat de enhancement factor voor de hoge resoluties zeer groot wordt, zullen er wel nog strokes in de buurt van randen gegenereerd worden. Fig. 3.9 toont de beelden van elke laag 7. Fig toont het uiteindelijke resultaat. 7 De beelden zijn gescaleerd naar de originele grootte

41 HOOFDSTUK 3. IMAGE MOMENT TECHNIEKEN 35 Figuur 3.9: Linksboven het beeld met de kleinste resolutie, rechtsonder dat met de hoogste. De lage resolutie beelden genereren de strokes relatief gelijkmatig terwijl de hoge resolutiebeelden bijna alleen strokes genereren in gebieden met een hoge frequentie. [NV02] 3.5 Variabele venster grootte Het grootste nadeel van de techniek zoals die tot nu toe werd voorgesteld is dat de lengte van een stroke beperkt wordt door de venstergrootte. Objecten die perfect door één grote stroke getekend zouden kunnen worden, worden hierdoor door opgesplitst in verschillende strokes die achter achter elkaar worden getekend. De oplossing hiervoor is om de venstergrootte te variëren. De venstergrootte kan bepaald worden op twee manieren: gebruik makend van een depth image [SY00a]. afhankelijk van de frequentie [Neh03]. In beide gevallen kiest men eerst een vaste grootte om een stroke area image op te stellen. Er moet ook een s min en een s max waarde worden opgegeven die de minimale en maximale venstergrootte controleren. Gebaseerd op diepte Een schilder schildert eerst de achtergrond met grote strokes, vervolgens brengt hij meer

42 HOOFDSTUK 3. IMAGE MOMENT TECHNIEKEN 36 Figuur 3.10: Links het originele beeld, rechts het resultaat. Dit is de som van de beelden in figuur 3.9. [NV02] details aan met een fijnere stroke. In het vorige hoofdstuk werd dit idee in paragraaf ook reeds gebruikt. Als we een depth image hebben, kunnen we de ventergrootte dan ook laten afhangen van de diepte. Een depth image (fig. 3.11) kan op verschillende manieren verkregen worden, bv. via stereo matching [ste] indien we twee licht verschoven beelden hebben van dezelfde scene, via een 3d digitizer als we een fysiek model hebben of via raytracing [Ree04] als gebruik wordt gemaakt van een virtueel model. Met volgende formule wordt de venstergrootte bepaald, d cur staat voor de diepte van de huidige pixel. Figuur 3.11: Links een origineel beeld, rechts een bijhorend depth image. De intensiteit van een pixel in de rechtse figuur komt overeen met de afstand het view point tot dit punt. [SY00a] venster grootte = s max + d cur d min d max d min.(s max s min ) (3.15) Bij het genereren van een color difference image, kan het zijn dat pixels die dezelfde kleur hebben toch tot een ander object behoren ( 3.12). Door naast een color difference image ook een depth difference image op te stellen van een regio, kan men een veel betere benadering krijgen. Een depth image heeft dezelfde grootte als een color difference image, maar de intensiteit van elke pixel komt overeen met de afstand tot de pixel in het centrum. Door deze twee beelden pixelgewijs met elkaar te vermenigvuldigen, verkrijgt men een nieuw en beter color difference image (fig. 3.13). Als we een stroke

43 HOOFDSTUK 3. IMAGE MOMENT TECHNIEKEN 37 opstellen die een aangepast color difference image benaderd, zal de stroke alleen het object voorstellen dat op dezelfde diepte ligt en dezelfde kleur heeft. Figuur 3.12: Links een beeld. Rechts een stukje hieruit. De witte kader geeft aan met welk stukje het rechtse beeld overeenkomt. Merk op dat op het rechtse beeld, de kleur van de linker onderkant toevallig overeenkomt met de centrum kleur. [SY00a] Figuur 3.13: Links een klassiek color difference image. In het midden een depth difference image. Rechts een aangepast color difference image, dit is de pixelgewijse vermenigvuldiging van het linkse en het middelste beeld. In dit beeld komt een veel duidelijkere stroke naar voren. [SY00a] Afhankelijk van de frequentie Als men geen depth image ter beschikking heeft, kan men de de venstergrootte variëren door te kijken naar de waarde van deze pixel in de stroke area image. Hoe dichter deze waarde bij nul, hoe hoger de frequentie waardoor dus een kleine stroke getekend moet worden. Hoe lager de frequentie, hoe groter de stroke [Neh03]. De gebruiker kiest een venstergrootte S. Via formule 3.6 kan de maximale afstand tussen twee strokes worden ingesteld. Indien dit ingesteld wordt tussen [S/8, S/2] varieert de venstergrootte tussen S en S/4 met de volgende fomule: venster grootte = (S S 4 ).v + S 4 (3.16) Hierbij wordt de grootte van een venster bepaald door de overeenkomstige pixelwaarde v uit een stroke area image.

44 HOOFDSTUK 3. IMAGE MOMENT TECHNIEKEN Rendering Voor de strokes gerenderd worden moeten ze eerst gesorteerd worden. Anders kan het gebeuren dat grote strokes kleine strokes overschilderen. Als men niet over een depth image beschikt, sorteert men de strokes van groot naar klein [SY00b]. Als men hier wel over beschikt, is het beter om volgens diepte te sorteren, dit elimineert artefacten rond contouren van objecten [SY00a] (fig. 3.14). Figuur 3.14: Links zijn de strokes gesorteerd op grootte, rechts op diepte. De artefacten aan de rand vallen onmiddellijk op. [SY00a] 3.7 Dithering Dither algoritmen worden gebruikt om het aantal bits per pixel te verlagen [Fun99]. Dit kan nodig zijn voor compressie, maar ook bij het afdrukken van een foto op een zwart-wit printer worden vergelijkbare algoritmen gebruikt. Dit wordt in ons geval gebruikt om een stroke area image te transformeren naar een zwart wit beeld. De zwarte pixels geven dan de stroke-posities aan. Om het aantal bits per pixel te verlagen is het niet voldoende om enkel thresholding toe te passen op het originele beeld (fig midden). Alle details vallen weg en er blijven eigenlijk alleen de countouren over van het originele beeld. Bij dithering wordt er eveneens thresholding toegepast voor elke pixel maar hierna wordt het verschil tussen de nieuwe pixelwaarde en de oude pixelwaarde (de kwantisatie error) uitgesmeerd over de naburige pixels. De pixelwaarde van de naburige pixels stijgt of daalt hierdoor, waardoor deze pixels in het resultaat een andere waarde kunnen bekomen vergeleken met eenvoudige thresholding (fig rechts). Dither algoritmen worden bepaald door twee eigenschappen: de scanmethode en de error distributie. De scanmethode bepaalt in welke volgorde de pixels bezocht worden. Dit kan zijn van links naar rechts, maar ook meer geavanceerde methoden bestaan, zoals de murraycurve [Col91]. De error distributie bepaalt op welke manier de kwantisatie error wordt uitgesmeerd over de naburige pixels. Eerst wordt Floyd-Steinberg [Fun99] besproken. Dit is een klassiek dither algoritme dat in ons geval gebruikt wordt indien de stroke posities bepaald worden mbv. een spreading factor

45 HOOFDSTUK 3. IMAGE MOMENT TECHNIEKEN 39 (formule 3.5). Enkel het ditheren van een grijswaarden beeld naar een zwart-wit beeld wordt besproken, maar de techniek kan ook algemeen toegepast worden. Als er geen spreading factor gebruikt wordt, wordt er gebruik gemaakt van de murray curve (paragraaf 3.2.2). Dithering mbv. de murray curve wordt dan ook besproken. Figuur 3.15: Links een grijswaarden beeld. Het middelste beeld heeft maar 1 bit per pixel en er is alleen thresholding toegepast. Het rechtse beeld bevat ook maar 1 bit per pixel, maar is er Floyd-Steinberg dithering toegepast [Fun99] Floyd - Steinberg dithering Bij Floyd-Steinberg dithering worden de pixels iedere keer van links naar rechts doorlopen. Er wordt thresholding gedaan voor elke pixel en hierbij wordt de kwantisatie error berekend. Deze error wordt dan verdeeld over de rechterpixel (7/16), de pixel linksonder (3/16), de pixel eronder(5/16) en de pixel rechtsonder(1/16). De getallen tussen haakjes geven aan hoeveel procent van de kwantisatie error bij deze pixels opgeteld moet worden. Stel dat in onderstaande matrix de pixel e door thresholding 1 wordt. Het rechterdeel geeft dan aan hoe de andere pixels veranderen. Merk op dat pixels die nog niet gekwantiseerd zijn constant van waarde kunnen veranderen zolang het algoritme loopt. Pixels die wel al gekwantiseerd zijn, worden niet meer veranderd. Indien een waarde groter zou worden dan de maximale waarde, wordt deze pixel gelijkgesteld aan de maximale waarde. a b c d e f wordt: g h i a b c d 1 f (1 e) 7 16 (3.17) g (1 e) 3 16 h (1 e) 5 16 i (1 e) Dithering met de murray curve Niet alle dither algoritmen scannen het beeld van links naar rechts zoals bij Floyd-Steinberg dithering, maar volgen een bepaalde curve, bijvoorbeeld een space curve [Vd91]. Dit is een

46 HOOFDSTUK 3. IMAGE MOMENT TECHNIEKEN 40 curve die alle punten van een eenheidsvierkant bezoekt en gedefinieerd is in het interval [0,1] (fig. 3.16): C : [0, 1] [0, 1] [0, 1] (3.18) Figuur 3.16: De Peano-curve, een space filling curve. De functie wordt niet expliciet bepaald maar wordt in dit geval opgebouwd uit verschillende iteraties. De eerste 3 iteraties zijn getekend. [Col91] De murray curve [Col91] is een soort space curve die alle pixels van een beeld van grootte (m,n) bezoekt en wordt als volgt gedefinieerd: C : [0, m n] [0, m] [0, n] (3.19) Om grijswaardenbeeld te transformeren naar een zwart-wit beeld, wordt de murray curve gevolgd en worden de waarden van de pixels ondertussen gesommeerd. Indien deze som niet groter is dan een bepaalde threshold, is de huidige pixel wit in het resultaat. Indien de som wel groter is dan deze threshold, wordt de pixel zwart. De restwaarde, het verschil tussen de huidige som en de threshold, is de nieuwe startwaarde en hiermee wordt vervolgens verder gesommeerd. Voor het opstellen van de murray curve moet voor elk getal in het interval [1, m b] de bijhorende positie berekend worden. Dit wordt in de rest van deze paragraaf besproken. Om voor een getal de bijhorende pixel te berekenen, moet dit getal eerst omgezet worden naar een murray integer. Dit is een getal waarbij elke digit een andere radix heeft. De radices van een murray integer worden bepaald door m en n te ontbinden in factoren: m = m j m j 1... m 1 n = n j n j 1... n 1 (3.20) Het is van belang dat m en n evenveel factoren hebben. Indien dit niet zo is, moet er bij de ontbinding van het getal met de minste factoren een aantal keer 1 worden toegevoegd totdat m en n evenveel factoren hebben. De factoren moeten niet geordend worden, maar een andere

47 HOOFDSTUK 3. IMAGE MOMENT TECHNIEKEN 41 ordening zorgt er wel voor dat een andere curve gevolgd wordt. Een murray integer heeft dus een andere radix voor elke digit. De radices van een murray integer p zijn als volgt: p = p 2j p 2j 1... p 1 met bijhorende radices r: r = n j m j n j 1 m j 1... n 1 m 1 (3.21) Om een getal a om te zetten naar murray integer notatie kan dit algoritme gebruikt worden: i = 1; while (a!= 0) p_i = a modulo r_i; a = a / r_i; i++; p i staat voor de digit op positie i, r i staat voor de radix op positie i. De deling is uiteraard een gehele deling. Nu we a geconverteerd hebben naar een murray integer p dienen we graycoding toe te passen op p. Bij gray-coded integers is het zo dat twee integers die achter elkaar komen slechts in één digit positie verschillen. Om aan deze voorwaarde te voldoen passen we de volgende transformatie toe op een murray integer: indien de som van alle digits links van de huidige digit p i oneven is, wordt de huidige digit vervangen door r i 1 p i. Indien de som even is, verandert de digit niet van waarde. De aldus bekomen waarde wordt dan op volgende wijze opgesplitst (e is het resultaat van gray coding): e = e n e n 1... e 2 e 1 f = e n 1 e n 3... e 3 e 1 (3.22) g = e n e n 2... e 4 e 2 Door de gray coding opnieuw op f en g toe te passen bekomen we x en y. Dit zijn de coördinaten van de gezochte pixel. x en y zijn echter nog steeds in murray notatie. Volgend stukje pseudo-code kan gebruikt worden om een getal terug te converteren naar de gewone notatie: a = d_n for (i = n - 1; i > 0; i++) a = a * r_i + d_i a is het uiteindelijke resultaat. d i staat voor de waarde van een digit op positie i, d n is de waarde van de meest linkse digit. r i staat voor de bijhorende radix van een digit op positie i. De bijhorende radices voor x zijn m j... m 1 uit formule 3.21 en voor y zijn dit n j... n 1. Het beeld waarmee gewerkt wordt, moet oneven afmetingen hebben. Dit is omdat de gray coding stap uit het algoritme enkel werkt indien we met oneven radices werken. Indien m of n toch even is, trekken we 1 af zodat we een oneven getal verkrijgen. Dit heeft wel tot

48 HOOFDSTUK 3. IMAGE MOMENT TECHNIEKEN 42 gevolg dat de pixels aan een rand niet worden bezocht, maar dit zal niet veel aan ons resultaat veranderen. Hoe meer factoren, hoe meer mogelijke curves er zijn. Dit leidt ook tot minder artefacten. Het is daarom een goed idee om indien mogelijk de grootte van een beeld lichtjes aan te passen zodat er minder artefacten optreden. 3.8 Discussie In dit hoofdstuk werden de eigenschappen van de brushstrokes bepaald door het berekenen van image moments. Het berekenen van image moments wordt regelmatig gebruikt bij computer vision-technieken. Het volgende hoofdstuk bespreekt twee technieken die de brushstroks bepalen mbv. verschillende vision-technieken. Ook het berekenen van image moments komt in het volgende hoofdstuk terug.

49 Hoofdstuk 4 Vision Technieken De technieken uit hoofdstuk 2 waren allemaal gebaseerd op de techniek van Haeberli [Hae90]. In hoofdstuk 3 werd een techniek besproken die steunde op de berekening van image moments om regio s te benaderen met brushstrokes. Dit hoofdstuk bespreekt nog twee andere painterly rendering methoden. De eerste methode maakt gebruikt van verschillende algoritmen die gebruikt worden in computer vision [GCS02]. De tweede methode bepaalt de eigenschappen van een brushstrokes op een bepaald punt aan de hand van de belangrijkheid van dit punt of de salience [CH02]. 4.1 Combinatie van vision technieken Deze techniek maakt gebruik van verschillende algoritmen uit de computer vision en werkt in het kort als volgt: eerst wordt het beeld gesegmenteerd in verschillende regio s. Voor elke regio wordt dan een discrete benadering van de central axis 1 berekend: de ridge set. Elementen van de ridge set worden samengevoegd tot tokens die op hun beurt weer samengevoegd kunnen worden tot strokes. In de rest van deze paragraaf worden de verschillende stappen meer in detail besproken. Fig. 4.1 toont het resultaat van deze techniek Segmentatie Een schilder maakt soms eerst zeer ruwe schetsen van gebieden met dezelfde intensiteit. Om deze reden wordt het beeld eerst opgeplitst in regio s. Dit proces noemt men segmentatie. Hiervoor wordt het beeld eerst omgezet naar een grijswaardenbeeld (via formule 2.1 op bladzijde 13) zodat pixels met dezelfde intensiteit gegroepeerd kunnen worden. Om grotere regio s te bekomen, kan men de het aantal grijswaarden beperken, bijvoorbeeld via dithering. Om de regio s te bepalen, begint men met een willekeurige pixel en op deze plaats wordt er een nieuwe regio gestart. Alle pixels die rond de huidige pixels liggen en dezelfde intensiteit 1 Het skelet van een figuur. zie paragraaf

50 HOOFDSTUK 4. VISION TECHNIEKEN 44 Figuur 4.1: Het resultaat van de techniek die in deze paragraaf wordt besproken. [GCS02] hebben, worden toegevoegd aan de nieuwe regio. Vervolgens blijft men pixels waarvan de intensiteit overeenkomt met de intensiteit van de huidige regio en die hieraan grenzen, toevoegen tot de regio niet meer verandert. Daarna kiest men een pixel die nog niet tot een regio behoort en dit herhaalt men tot alle pixels tot een regio behoren [GCS02]. In het vorige hoofdstuk werd er gebruik gemaakt van een depth image om het resultaat te verbeteren. Hierbij werd aangegeven dat pixels die op verschillende diepte liggen maar toevallig dezelfde kleur hebben, toch door dezelfde stroke worden benaderd. Dit kon men vermijden door een depth image te gebruiken zodat alleen pixels met dezelfde diepte invloed hadden op de stroke parameters. Voor deze techniek geldt een gelijkaardige redenering: eerst worden objecten gesegmenteerd in verschillende gebieden volgens diepte. Vervolgens worden deze gebieden verder gesegmenteerd in regio s volgens intensiteit met bovenstaand algoritme. In de vorige twee hoofdstukken werd reeds aangegeven dat voorgrondelementen met meer details moeten geschilderd worden dan achtergrondelementen 2. Het is daarom beter om de achtergrond te segmenteren in grotere regio s dan de voorgrond. Om dit te bereiken, is het aantal grijswaarden in een bepaald gebied evenredig met de diepte van dit gebied. Een voorbeeld van een regio is te zien in fig. 4.2 links. Het valt onmiddellijk op dat een regio zeer grillig is. In een volgende fase moet van een regio een discrete benadering van de medial axis berekend worden. Dit kan men beschouwen als het skelet van een regio en benadert dus de algemene vorm van een regio. Indien een regio grillig is, zal de medial axis ook grillig zijn en dit wil men vermijden. Om een regio egaler te maken, worden dan ook morfologische operaties op een regio toegepast. Eerst zorgt men er echter voor dat de regio s geen gaten meer bevatten. Dit doet men mbv. hole filling. Hole Filling Hole filling zorgt ervoor dat een regio geen gaten meer bevat. Indien een pixel tot een regio behoort, is deze true, anders false. Indien een pixel die false is, minstens drie buren heeft 2 zie paragraaf op bladzijde 11 voor de redenering hierachter.

51 HOOFDSTUK 4. VISION TECHNIEKEN 45 Figuur 4.2: Voorbeeld van een regio. Links na de segmentatie. Rechts hiervan na hole filling. Vervolgens wordt er tweemaal een opening berekend, gevolgd door een closureoperatie. [GCS02] die tot dezelfde regio behoren en true zijn, wordt deze pixel ook true. Het resultaat na deze stap is te zien in de tweede figuur van links in fig Morfologische Operaties Eerst krijgen de pixels een label: true of false. Indien een pixel tot een regio behoort, krijgt de pixel true als label, anders false. opening: indien een pixel die false is een buur heeft die true is, wordt deze pixel ook true. Dit heeft tot gevolg dat de randen minder bruusk worden, maar zorgt er ook voor dat de regio groter wordt. closure: indien een pixel die true is een buur heeft die false is, wordt deze pixel ook false. Dit heeft ook tot gevolg dat de randen minder bruusk worden, maar zorgt er ook voor dat de regio kleiner wordt. Door na de hole filling tweemaal een opening-operatie toe te passen op het voorlopige resultaat en vervolgens de closure te bepalen, bekomt men een regio die voldoende egaal is en de oorspronkelijke regio goed benaderd. Deze stappen zijn te zien in de laatste drie figuren van fig Ridge Set De medial axis [GW02] van een regio kan men beschouwen als het skelet van deze regio. In ons geval wordt slechts een discrete benadering van de medial axis berekend, de ridge set. In de volgende fase van het algoritme wordt de ridge set nog eens onderverdeeld in verschillende tokens. Een token is dus een deelverzameling van de ridge set. Er bestaan verschillende methoden om de medial axis te berekenen [GW02]. Hier worden twee methoden voorgesteld waaruit een hybride methode wordt afgeleid die de voordelen van de twee methoden combineert. Bij beide methoden is het noodzakelijk om de afstand van

52 HOOFDSTUK 4. VISION TECHNIEKEN 46 een punt tot de rand van de regio te kennen. Daarom wordt eerst de distance transformatie toegepast op een regio. Hierbij wordt voor elk punt van de regio de afstand bepaald tot de rand van de regio. Distance transformatie Voor elke pixel van de regio wordt de afstand bepaald tot de rand van de regio. Alle pixels worden geïnitialiseerd met waarde 1. Vervolgens bekijken we de waarde van alle buren van de pixels. Indien alle buren een waarde hebben die kleiner of gelijk is aan de waarde van de huidige pixel, wordt de waarde van deze pixel verhoogd met 1. Dit wordt herhaald tot er geen punten meer zijn die van waarde veranderen. Benadering van de medial axis De ridge set is een benadering voor de medial axis. Een pixel behoort nu tot de ridge set indien alle pixels rondom deze pixel een kleinere afstand tot de rand hebben. Het nadeel van deze methode is dat de elementen van de ridge set niet noodzakelijk aan elkaar grenzen en er dubbele lijnen aanwezig kunnen zijn. Hiermee bedoelt men dat het mogelijk is dat verschillende pixels die naast elkaar liggen en dezelfde afstand tot de rand hebben, allemaal tot de ridge set behoren. Het voordeel van deze methode is dan weer dat ze niet gevoelig is voor noise rond de randen. Thinning De ridge set kan ook bepaald worden met thinning. Bij deze methode behoren eerst alle pixels tot de ridge set. Vervolgens worden de redundante pixels verwijderd. Een pixel is redundant indien deze pixel grenst aan een pixel die dezelfde afstand heeft tot rand. Het nadeel van deze methode is dat ze gevoelig is voor noise rond de randen. De voordelen zijn dan weer dat de pixels van de ridge set verbonden blijven met elkaar en dat er geen dubbele lijnen kunnen zijn. Hybride methode De voordelen van de ene methode zijn de nadelen van de andere methode en omgekeerd. Door beide methoden achter elkaar toe te passen combineren we de voordelen van de twee methoden. Hierdoor hebben ook alle pixels van de ridge set maximaal drie buren, wat nodig is voor de volgende fase van het algoritme. De afstand tot de rand van de regio blijft een belangrijke rol spelen in de rest van het algoritme. In paragraaf wordt hier naar verwezen als de breedte omdat deze afstand gebruikt wordt om de breedte van de strokes te bepalen Stroke berekening In de vorige stap werd de ridge set, een discrete benadering van de medial axis bepaald. De elementen van de ridge set worden nu gegroepeerd in verschillende tokens. Vervolgens worden tokens gegroepeerd in verschillende strokes. Deze twee stappen worden in de volgende paragrafen meer in detail besproken.

53 HOOFDSTUK 4. VISION TECHNIEKEN 47 Opstellen van tokens In fig. 4.3 links is de ridge set te zien die hoort bij de regio van fig We groeperen nu de verschillende elementen van de ridge set in tokens zoals in dezelfde figuur rechts te zien is. Zoals reeds werd vermeld, kan een een element uit de ridge set maximaal drie buren hebben. Elementen uit de ridge set worden nu geklasseerd volgens het aantal buren dat ze hebben. orphan: geen buren seed: één buur line: twee buren branch: drie buren Tokens worden altijd gestart op seeds. Een seed wordt dan ook meteen aan het nieuwe token toegevoegd. Indien de dichtstbijzijnde buur ook een seed is, wordt er nog een nieuw token gestart. Indien de dichtste buur een line is, wordt dit punt toegevoegd aan het huidige token en zoeken we de dichtstbijzijnde buur van deze line. Indien het dichtst bijgelegen punt een branch is, wordt dit punt toegevoegd, hernoemd naar line en wordt er een nieuw token gestart. Het resultaat van deze stap is te zien in fig. 4.3 links in het midden. Figuur 4.3: Links de ridge set van fig Rechts de ridge set gegroepeerd in tokens. [GCS02] Tokens hebben ook een kleur. Deze kleur wordt bepaald door de kleur van de pixels van het token. De kleur van een token is het gewogen gemiddelde van deze kleuren, waarbij het gewicht van een kleur bepaald wordt door de breedte 3 die bij de pixels van het token hoort. Groeperen van tokens Er zijn twee methoden voor het groeperen van tokens in strokes. De eerste steunt op het berekenen van image moments, de andere op search cones. 3 afstand tot de rand van de regio, paragraaf

54 HOOFDSTUK 4. VISION TECHNIEKEN 48 Groepering via moments Het berekenen van image moments werd in het vorige hoofdstuk reeds uitgebreid behandeld, maar de formule wordt hier nog eens herhaald: a 1 b 1 M lm = x l y m I(x, y) met I(x, y) [0, 1] (4.1) x=0 y=0 In het vorige hoofdstuk werd er gesommeerd over een vierkant met grijswaarden, maar hier wordt er gesommeerd over de pixels die een token vormen. I(x, y) geeft het gewicht van een pixel aan, in ons geval is dit de afstand tot de rand 4. Op deze manier kan er met formules 3.7, 3.8, 3.9 en 3.11 een rechthoek geconstrueerd worden die het beste een token benadert. Tokens moeten gegroepeerd worden tot strokes. Hiervoor wordt er een graaf opgesteld waarbij tokens knopen zijn en twee knopen verbonden worden indien de bijbehorende tokens samengevoegd kunnen worden tot een stroke. Twee tokens kunnen eventueel worden samengevoegd indien ze binnen een bepaalde afstand van elkaar liggen. De kost van een verbinding in de graaf is de som van de afstand, het verschil in oriëntatie en het verschil in kleur tussen twee tokens. Verbindingen met een hoge kost, zijn dus verbindingen tussen twee tokens met een kleine kans om samengevoegd te worden. Alle verbindingen van de graaf worden nu in een priority queue gestoken en ze worden er vervolgens één voor één uitgehaald waarbij de verbinding met de laagste kost er dus het eerst wordt uitgehaald. De twee tokens die bij deze verbinding horen, worden samengevoegd tot een stroke. Strokes worden voorgesteld door B-splines met variabele breedte. Een stroke bestaat uit verschillende tokens en voor elk token kan de positie berekend worden mbv. de image moment theorie. Deze posities vormen de controlepunten van de spline. Er worden nog twee controlepunten toegevoegd aan het begin en het einde omdat de stroke anders korter wordt gemaakt. De breedte van de stroke wordt bepaald door de breedte 5 van controle punten. Fig. 4.4 toont de verschillende stappen. Groepering via search cones Een andere manier om strokes te samen te voegen, maakt gebruik van search cones. Hiervoor wordt eerst met behulp van formule 3.11 op bladzijde 33 en de image moment theorie zoals voorgesteld in de vorige paragraaf de oriëntatie bepaald van alle tokens. Volgens deze oriëntatie wordt er dan een search cone opgesteld met een relatief kleine lengte (fig. 4.5 links). Een search cone is een platte kegel die boven- of onderaan een token begint en breder wordt naar mate de afstand tot het token groter wordt. Tokens die een intersectie hebben met de search cone van een ander token worden samengevoegd met dit token. Dit proces blijft zich herhalen tot er geen tokens meer worden samengevoegd. Strokes bestaan dus uit tokens. Strokes die aangemaakt werden mbv. image moments, werden gerenderd als een B-spline curve. Strokes die aangemaakt worden met een search cone worden voorgesteld als aan elkaar grenzende vierhoeken. Hiervoor wordt voor elke 4 de gewichten moeten wel eerst genormaliseerd worden. 5 hiermee wordt de afstand tot de rand van de regio bedoeld. zie paragraaf

55 HOOFDSTUK 4. VISION TECHNIEKEN 49 Figuur 4.4: Links de tokens die samengevoegd worden tot één stroke. Hiernaast de posities van de verschillende tokens, berekend met de hulp van image moments. Er zijn ook twee extra controlepunten toegevoegd omdat de stroke anders te kort is. In het midden een B-spline die de stroke benadert. rechts hiervan geeft de groene lijn de breedte aan van de stroke. Rechts een gerenderde stroke. [GCS02] Figuur 4.5: Links worden via het onderste token de tokens bepaald die tot een stroke zullen behoren via een search cone. Rechts een stroke die door verschillende tokens bepaald wordt. [GCS02] pixel van de ridge set van een token een rand van een vierhoek bepaald. Dit zorgt ervoor dat de vierhoeken aan elkaar grenzen. De oriëntatie van de rand van een vierhoek wordt bepaald door de normaal te berekenen in een punt mbv. eindige differenties tussen dit punt en het centrum van het token (fig. 4.6 rechts-midden). De breedte van de stroke in dit punt wordt bepaald door de afstand tot de regio van dit punt. Fig. 4.6 toont de verschillende stappen. De groene punten in de vierde figuur worden verbonden om de vierhoeken te verkrijgen. Vergelijking De eerste methode is computationeel veel zwaarder dan de tweede, maar geeft betere resultaten. Een eerste reden waarom het zwaarder is, is dat het samenvoegen van tokens tot strokes O(N 2 ) complexiteit heeft. N is hierbij het aantal tokens. De complexiteit bij de tweede methode is slechts O(log(N)). Het voordeel is wel dat de eerste methode een globale methode is en dus betere strokes zal vinden dan de tweede methode. Een tweede reden waarom de eerste methode zwaarder is, is de overhead van het berekenen

56 HOOFDSTUK 4. VISION TECHNIEKEN 50 Figuur 4.6: Links de tokens van een stroke. Hiernaast de elementen die in de tokens zitten. In het midden wordt de normaal berekend voor elk punt. Hiernaast wordt de breedte bepaald van de stroke. helemaal rechts een gerenderde stroke. Het resultaat hier is iets hoekiger dan het resultaat uit fig [GCS02] van B-splines. Maar deze B-splines zorgen er wel voor dat het resultaat minder hoekig is, al valt dit uiteindelijk wel mee indien de juiste texture gebruikt wordt zoals in fig Natuurlijk kan men ervoor kiezen om de strokes die bepaald werden met search cones te renderen mbv. B-splines door de image moments te berekenen en vica versa, maar dit zou niet logisch zijn aangezien het voordeel van de tweede methode de snelheid is en men hierdoor het algoritme trager maakt. Ook kan men strokes nog proberen te groeperen via één van de twee methoden. 4.2 Image salience De vorige paragraaf besprak een techniek die gebruik maakt van verschillende computer vision technieken. In deze paragraaf wordt een techniek besproken waarbij de brushstrokes opgesteld worden aan de hand van de belangrijkheid of salience van de pixel waar ze gestart worden [CH02]. Hiervoor moet er eerst een salience map worden opgesteld. Dit is een grijswaardenbeeld waarbij de intensiteit van een pixel overeenkomt met zijn salience. Vervolgens wordt er op regelmatige afstand een stroke begonnen en worden aan de hand van de salience van deze startpositie de stroke-parameters bepaald. In de rest van deze paragraaf worden deze twee stappen van het algoritme in meer detail besproken. Fig. 4.7 toont een resultaat van deze techniek Salient map Zoals reeds werd vermeld is de salient map een grijswaarden beeld waarvan de intensiteit van een pixel overeenkomt met de perceptuele belangrijkheid van deze pixel. Het opstellen van een salient map is nog steeds een research topic in de computer vision, maar bij deze techniek wordt er gebruik gemaakt van de aanpak die wordt voorgesteld door Walker et al [KW98]. Fig. 4.8 toont een voorbeeld van een salience map.

57 HOOFDSTUK 4. VISION TECHNIEKEN 51 Figuur 4.7: Het resultaat van de techniek uit deze paragraaf. [CH02] Figuur 4.8: een salience map. De intensiteit van een pixel geeft de perceptuele belangrijkheid van deze pixel aan. [CH02] De meeste pixels in een beeld zijn niet salient en hebben dus slechts een beperkte bijdrage aan het uiteindelijke resultaat. De idee is dus om voor elke pixel een aantal statistische eigenschappen, de vector Φ, te berekenen en deze waarden te vergelijken met de waarden van de andere pixels. De outliners worden vervolgens als salience gelabeled. In paragraaf 2.3 werd reeds aangegeven dat de gradiënt de eerste afgeleide is een punt. De grootte hiervan geeft een idee in welke mate een punt overeenkomt met de naburige pixels. Door verschillende partiële afgeleiden te berekenen, krijgen we dus een idee over hoe een pixel overeenkomt met de naburige pixels. De elementen van de vector Φ worden dan ook bepaald door vijf filters toe te passen op het beeld waarbij iedere keer een andere partiële afgeleide berekend wordt. Eerst wordt het beeld wel geblurred met een gaussiaanse kernel G met breedte σ 6 : G(x,y;σ) x G(x,y;σ) y 6 zie paragraaf 2.3 voor de redenering.

58 HOOFDSTUK 4. VISION TECHNIEKEN 52 2 G(x,y;σ) x 2 2 G(x,y;σ) x 2 2 G(x,y;σ) xy Deze vijf waarden worden een aantal keer berekend met iedere keer een andere waarde voor σ. Vervolgens wordt mbv. de Mahalanobis afstand de salience van een pixel bepaalt [CH02]. Hierbij wordt de afstand gemeten tussen de vector Φ die bij een pixel hoort en het gemiddelde Stroke eigenschappen Bij de vorige technieken werden strokes voorgesteld als een B-spline of als een rechthoek. Deze techniek gebruikt superquadrics om een stroke voor te stellen. Strokes hebben bovendien een hoogte. De belangrijkste strokes zijn hierbij hoger en kunnen dus alleen overschilderd worden door strokes die nog belangrijker zijn. De rest van deze paragraaf bespreekt de berekening van de verschillende stroke-parameters. Positie & Kleur Op regelmatige afstand wordt er een stroke gestart. Dit startpunt is het centrum van een stroke. De kleur van de pixel waar er gestart wordt, is tevens de kleur van de stroke. Vorm Zoals reeds vermeld gebruikt deze techniek superquadrics om de strokes voor te stellen: ( x a ) 2 α + ( y b ) 2 α = r 2 α (4.2) De parameter α wordt door de gebruiker ingesteld en bepaalt de uiteindelijke vorm: als α gelijk is aan 0, hebben we rechthoek. Wanneer α gelijk is aan 1, hebben we een ellips. Indien α nog groter wordt, bekomen we een ster-vorm. De grootte van de stroke wordt bepaald door de parameter r. Deze waarde is omgekeerd evenredig met de salience van de pixel waarop de stroke start. Pixels met een hoge salience komen immers niet overeen met hun omgeving en daarom wordt er slechts een kleine stroke gestart. Pixels met een lage salience komen wel overeen met hun omgeving en op deze positie kan dus een grote stroke worden gestart. De parameters a en b zijn constanten die de verhouding tussen de lengte en de breedte bepalen en worden bepaald door de gradiënt. Een grote waarde van b (tov. a) geeft een lange, smalle stroke. Indien beide waarde gelijk zijn, zijn de breedte en de lengte van de stroke gelijk. De berekening van deze twee parameters wordt besproken bij de oriëntatie. Oriëntatie De oriëntatie van de stroke wordt bepaald mbv. de gradiënt zoals in paragraaf Wanneer de grootte van de gradiënt klein is, betekent dit dat de kleur van de pixel overeenkomt met de omliggende pixels. De stroke heeft dus bijgevolg geen uitgesproken oriëntatie in een bepaalde

59 HOOFDSTUK 4. VISION TECHNIEKEN 53 richting. Daarom hangen de waarden van a en b uit formule 4.2 af van de grootte van de gradiënt. Een grote gradiënt zorgt voor een grote waarde van b en een kleine waarde van a wat een lange, smalle stroke geeft. Hoogte & Rendering De hoogte van de strokes bepaalt de volgorde van de strokes bij het renderen. Hierbij worden de laagste strokes eerst gerendered. De pixels met een hoge salience-waarde, zijn belangrijk voor het resultaat en dus is de hoogte van een stroke rechtevenredig met de salience van de pixel waar de stroke start. 4.3 Discussie In de vorige twee hoofdstukken werden een aantal technieken besproken die brushstrokes aanmaakten. In het eerste hoofdstuk werden er methoden besproken die het werk van Haeberli [Hae90] uitgebreid of verbeterd hebben. Het tweede hoofdstuk besprak een techniek die steunt op het berekenen van image moments en in dit hoofdstuk werden nog twee technieken besproken die algoritmen van computer vision gebruiken voor het opstellen van de strokes. De strokes moeten nu nog gerenderd worden op een canvas. Dit is het onderwerp van het volgende hoofdstuk.

60 Hoofdstuk 5 Visualisatie In de vorige drie hoofstukken werden technieken besproken die brushstrokes genereren. Deze strokes moeten nu nog op een canvas getekend worden. Bij verschillende technieken wordt er een texture gebruikt om de strokes minder artificeel over te laten komen [SY00b, HE04]. De keuze van een texture heeft een zeer grote invloed op het eindresultaat en door de juiste texture te kiezen kan men ook een bepaalde verfstijl, zoals waterverf, benaderen. In plaats van een texture kan men ook één van de methoden uit paragraaf gebruiken waarbij er een texture wordt aangemaakt om een stroke uit te tekenen [GCS02]. Bijna alle besproken technieken gebruiken ook blending [SY00b, HE04, GCS02]. Hierbij blijven strokes die overschilderd worden, toch een effect hebben op het eindresultaat. Hiervoor krijgt elke stroke een alpha-waarde tussen 0 en 1. Hoe hoger deze waarde, hoe minder een nieuwe stroke de kleur van de onderliggende strokes mee in rekening neemt voor het bepalen van zijn eigen kleur. 5.1 Bump Mapping Bij het uittekenen van de strokes kan men de strokes gewoon over elkaar tekenen alsof ze geen dikte hebben. Bij een echt schilderij in olieverf of acryl zorgt het overschilderen van strokes er echter voor dat op deze plaats het schilderij een klein beetje dikker is dan op plaatsen waar er zich maar één stroke bevindt. Deze kleine verdikkingen hebben een effect op het resultaat. Herzmann [Her02] stelt dan ook voor eerst een hoogteveld te genereren en vervolgens bump mapping toe te passen op het schilderij dat men heeft gerenderd. Dit is een techniek om een 2D oppervlak toch een 3D effect te geven [FK03]. Hiervoor wordt er een licht toegevoegd dat het schilderij belicht. Dit wordt dan ook eerst besproken. In de volgende paragrafen wordt de berekening van een hoogteveld en het omzetten van een hoogteveld naar een normal map besproken. 54

61 HOOFDSTUK 5. VISUALISATIE Belichting Door de lichtintensiteit te variëren over het beeld verkrijgt men het 3D effect. Hiervoor dient er een licht te worden toegevoegd en vervolgens wordt voor elk punt van het schilderij de belichting berekend. In de computer graphics wordt meestal het Phong-illuminatie model gebruikt als lichtvergelijking [Ree04]: I = A + att(d + S) (5.1) A staat voor het ambiënte licht. Dit is het licht dat al verschillende keren gereflecteerd is en dus geen duidelijke oorsprong meer heeft van een lichtbron. Deze factor zorgt er voor dat oppervlakken altijd minimaal belicht zijn. De ambiënte term kan als volgt worden berekend: ambient = A M A L (5.2) A M is een eigenschappen va het materiaal en geeft aan hoeveel ambiënt licht er wordt weerkaats. A L is de kleur van het ambiënte licht dat op een oppervlak invalt. att staat voor de attenuatie factor. Deze factor zorgt ervoor dat hoe verder een lichtbron van een object staat, hoe minder invloed deze lichtbron heeft. De attenuatie factor kan als volgt berekend worden: ( ) 1 att = min c 1 + c 2 d L + c 3 d 2, 1 (5.3) L d L staat voor de afstand tussen de lichtbron en het opppervlak waarvan de kleur berekend wordt en c 1, c 2 en c 3 zijn constanten. De energie van licht neem kwadratisch af met de afstand tot de lichtbron en dit vormt de basis van deze formule. D is de diffuse term en staat voor het licht dat rechtstreeks van een lichtbron op een oppervlak invalt en vervolgens in allerlei richtingen wordt weerkaatst (fig. 5.1). De diffuse term kan als volgt berekend worden: D = D L + D M (L N) (5.4) D M staat voor de diffuse kleur van het het punt van het object waar we de belichting willen berekenen. Deze term staat voor wat men algemeen verstaat onder de kleur van een object. In ons geval staat dit voor de berekende kleur van een pixel uit het beeld. D L staat voor de diffuse component van het licht. L N staat voor het genormaliseerd dot-product van de vector die wordt bepaald door het punt op het oppervlak en de lichtbron (L) en de normaal in dit punt van oppervlak (N).

62 HOOFDSTUK 5. VISUALISATIE 56 Figuur 5.1: De diffuse term is, in tegenstelling tot de speculaire term, vooral van belang bij ruwe oppervlakken. De normaal (N) in ieder punt van het oppervlak verschilt en dus wordt het licht dat op dit oppervlak invalt in allerlei richtingen weerkaatst. S staat voor de speculaire term en deze term is dominant bij gladde oppervlakken (spiegels, metalen,...). Indien zo een oppervlak beschenen wordt, verschijnt er een witte plek op het object afhankelijk van de kijkrichting (fig. 5.2). De speculaire term staat voor het licht dat weerkaatst wordt volgens de richting van het invallend licht. Deze term hangt dan ook sterk af van de positie van het oog. De speculaire term kan als volgt worden berekend: S = I S M S L (max(n H, 0)) s (5.5) I is gelijk aan 0 of 1. Indien de lichtstralen niet op het oppervlak invallen, kan er geen speculaire reflectie zijn. In dit geval wordt deze term 0, anders is ze 1. De waarde hiervan wordt bepaald door L N, zoals bij diffuse reflectie. Indien deze waarde kleiner is dan 0, ligt de lichtbron achter op oppervlak en is deze term gelijk aan 0. In het andere geval is ze 1. S M staat voor de speculaire kleur van het punt waar de belichting berekend wordt. S L staat voor de speculaire component van het licht. N H staat voor het genormaliseerd dot-product van de normaal (N) en de vector H. Deze vector vormt een gelijke hoek met de kijkrichting en met de invallende lichtstraal (fig. 5.2). s staat voor de helderheid. Bij een perfect spiegel zou er geen witte spot zijn, maar slecht één wit puntje. Iets ruwere oppervlakken genereren een grotere spot. Deze parameters is dus een maat voor de ruwheid van het oppervlak. Hoe hoger de waarde, hoe meer het oppervlak lijkt op een perfecte spiegel. Omdat er tot hier toe geen rekening met de dikte van de strokes wordt gehouden, is de normaal voor ieder punt van het schilderij gelijk. Indien er dus een licht wordt toegevoegd en bovenstaand illuminatie-model gebruikt wordt, zal dit dus niet veel effect hebben (fig. 5.3). Bij een echt schilderij is de normaal echter niet constant voor elk punt. De normaal voor elk punt moet dus berekend worden. Hiervoor wordt er een normal map opgesteld. Dit is een

63 HOOFDSTUK 5. VISUALISATIE 57 Figuur 5.2: Speculaire reflectie. Rechts de bepaling van de vector H uit formule 5.5. De vector V is de kijkrichting en de vector L is de vector van het invallende licht. De vector H ligt tussen deze twee vectoren in en de hoek tussen L en H en V en H is gelijk. beeld dat even groot is als de uiteindelijke afbeelding, maar waarvan elk punt de normaal bevat van het overeenkomstige punt in het originele beeld. Vervolgens kan aan de hand van deze normaal de belichting voor elk punt berekend worden met formule 5.4. Figuur 5.3: Indien de strokes geen dikte hebben, is de normaal in elk punt van het schilderij gelijk (links). Door de strokes een dikte te geven, is de normaal in elk punt verschillend (rechts) Hoogteveld Een normal map kan niet rechtstreeks worden opgesteld. Hiervoor moet er eerst een hoogteveld opgesteld worden. Dit is een grijswaarden beeld van dezelfde grootte als de uiteindelijke afbeelding waarvan de intensiteit van een pixel overeenkomt met de hoogte van deze pixel in het resultaat 1. Uit dit beeld wordt vervolgens de normal map berekend. Om een hoogteveld op te stellen worden de strokes gerenderd, maar met een andere texture (fig. 5.4). De texture blijft wel niet hetzelfde tijdens het renderen. De onderste strokes dragen slechts een beetje bij tot het dikker worden van het schilderij terwijl de bovenste strokes dit 1 Bij de techniek uit paragraaf 4.2 hebben de strokes een hoogte. Bijgevolg moet er geen hoogteveld opgesteld worden indien deze techniek gebruikt zou worden omdat de hoogte van een pixel reeds gekend is.

64 HOOFDSTUK 5. VISUALISATIE 58 juist wel doen omdat ze over andere strokes heen worden geschilderd. Daarom wordt er voor de onderste strokes een donkerdere variant gebruikt van de texture uit fig Figuur 5.4: Links een gerenderd beeld zonder bump mapping. In het midden een hoogteveld voor deze afbeelding en rechts de gebruikte texture om dit hoogteveld te genereren. [Her02] Normal map Een hoogteveld kan worden omgezet naar een normal map. Dit is een beeld waarvan de pixelwaarde gelijk is aan de normaal van de overeenkomstige pixel in het schiderij. Bij een RGB-beeld komt de R-component overeen met de x-waarde van de normaal en de G- en B- component komen respectievelijk overeen met de y- en de z-waarde van de normaal. Om de normaal te berekenen mbv. een hoogteveld kan deze formule gebruikt worden [FK03]: N = H g H r, H g, H a, 1 (Hg H r ) 2 + (H g, H a ) (5.6) H g is hierbij de waarde van de huidige pixel van het hoogteveld, H r is de waarde van de pixel rechts van deze pixel en H a is de waarde van de pixel boven de huidige pixel. De noemer zorgt ervoor dat de normaal genormaliseerd wordt. Het probleem is dat de x, y en z waarden van de normaal tussen -1 en 1 liggen. Een RGBbeeld kan echter alleen waarden tussen 0 en 1 opslaan. Met de volgende formules kan een normaal omgezet worden naar een RGB waarde en een RGB waarde omgezet worden naar een normaal. KleurComponent = 0.5 N ormaalcomponent (5.7) N ormaalcomponent = 2 (KleurComponent 0.5) (5.8)

65 HOOFDSTUK 5. VISUALISATIE 59 Figuur 5.5: Bump mapping toegepast op fig. 5.4 links. dezelfde figuur gebruikt. [Her02] Hierbij werd het hoogteveld uit

66 Hoofdstuk 6 Implementatie Dit hoofdstuk gaat over mijn eigen implementatie. De strokes worden aangemaakt mbv. moment based rendering (zie hoofdstuk 3) en uitgetekend met de technieken uit hoofdstuk 5. Fig. 6.1 toont het een afbeelding die gemaakt werd met een combinatie van beide technieken. Bij moment based rendering wordt er eerst een stroke area image berekend. Hierbij geven de donkere delen de hoge frequentie gebieden waar er veel strokes moeten komen. Uit een stroke area image worden dan de voorlopige posities van de strokes gehaald. Door rond deze posities een color difference image te beschouwen en hiervan verschillende image moments te berekenen kan een rechthoek berekend worden die dit color difference image het best benaderd. Deze rechthoeken zijn de berekende strokes. Alvorens de strokes te renderen worden ze gesorteerd op grootte waarbij de grootste strokes eerst gerenderd worden. Voor het renderen van de strokes worden de technieken uit hoofdstuk 5 gebruikt: texture mapping, blending en bump mapping. Figuur 6.1: Bump mapping gecombineerd met moment based rendering. In de eerste paragraaf wordt het opgestelde framework besproken. Dit framework maakt het mogelijk om de verschillende deelalgoritmen makkelijk te vervangen door andere algoritmen. De volgende paragraaf bespreekt de rendering van de strokes. Het algoritme verwacht ook heel wat parameters die ingesteld moeten worden. Het effect van deze parameters op het resultaat is het onderwerp van de volgende paragraaf. Vervolgens 60

67 HOOFDSTUK 6. IMPLEMENTATIE 61 wordt de user-interface kort overlopen en worden kort een aantal mogelijke uitbreidingen besproken. De laatste paragraaf bespreekt nog enkele afbeeldingen samen met de bijhorende parameters. 6.1 Framework Het framework is geschreven in C++ en maakt het mogelijk om eenvoudig om op een eenvoudige manier de verschillende deel algoritmen te vervangen. Er zijn vier belangrijke tussenstappen en voor elk stap is er een klasse voorzien dat deze stap in een virtuele functie implementeert. De klasse CStrokeAreaCalculator kan een stroke area image genereren. De klasse CSamplePointGenerator produceert stroke-posities aan de hand van een stroke area image. De klasse CStrokeGenerator genereert strokes op de posities die bepaald werden door een instantie van CSamplePointGenerator. De klasse CCDICalculator genereert een color difference op een bepaalde positie. Dit wordt gebruikt in de klassen CStrokeGenerator en CStrokeAreaCalculator. Indien men een ander algoritme wil gebruiken voor een stap, volstaat het de methode van de bijhorende klasse te herimplementeren. Zo zijn er bijvoorbeeld twee klassen die CSamplePointGenerator implementeren, de ene genereert sample points met de murray curve en de andere past een stroke area image aan en gebruikt vervolgens Floyd-Steinberg dithering. De klasse CApplication is verantwoordelijk voor het aanmaken van de juiste instanties van bovenstaande klassen en ze houdt tevens de verschillende parameters zoals de venstergrootte bij. Hiernaast heeft deze klasse ook nog instantie van Cmoment. Deze klasse bevat de kern van het framework in de generatestrokes() methode: strokelist CMoment::generateStrokes() { strokeareaimage = strokeareacalc->getstrokeareaimage(); samplepointcalc->setstrokeareaimage(strokeareaimage); samplepoints = samplepointcalc->calculatesamplepoints(); strokecalc->setsamplepoints(samplepoints); strokes = strokecalc->getstrokes(); return strokes; } Alvorens deze methode aan te roepen, wordt er door CApplication de juiste instanties van bovenstaande klassen meegegeven (dit zijn strokeareacalc, samplepointcalc en strokecalc in

68 HOOFDSTUK 6. IMPLEMENTATIE 62 de pseudocode). Hierdoor is de methode generatestrokes() van de CMoment klasse onafhankelijk van de gebruikte algoritmen in de tussenstappen. Indien we dus een tussenstap willen vervangen door een ander algoritme, moeten we de klasse die voor deze stap verantwoordelijk is, afleiden en van deze klasse en van deze afgeleide klasse een instantie aanmaken in CApplication. CApplication zal dan de juiste instantie doorgeven aan CMoment. CMoment zelf kan ook worden afgeleid. Op deze manier is de multiresolutie aanpak (paragraaf 3.4) geïmplementeerd. De methode generatestrokes() van de CMoment klasse werd hiervoor geherimplementeerd in de klasse CMomentMulti. De klasse CApplication is dus ook verantwoordelijk voor het aanmaken van de juiste instantie van CMoment. Het framework maakt gebruik van de opencv library van intel. Deze library bevat heel wat image processing algoritmen, zoals een piramide decompositie, conversie naar grijswaarden beeld,.... Dit is echter een C library en dus bevat het framework ook een front-end klasse CImage om er makkelijker mee te kunnen werken in C Rendering De rendering van de strokes is losgekoppeld van het framework. Dit heeft als voordeel dat de klassen die de strokes renderen, ook strokes van een andere techniek kunnen renderen 1. Voor het renderen van de strokes wordt er gebruik gemaakt van OpenGL, een API voor het renderen van 2D of 3D graphics. Dit heeft verschillende voordelen: De posities en de oriëntatie van een stroke zijn bekend, maar om een stroke op de juiste plaats uit te tekenen heeft men een transformatie- en rotatiematrix nodig. Dit zit standaard in OpenGL. Het gebruik van textures voor de strokes en blending (hoofdstuk 5) is eenvoudig en kan gecombineerd worden in één stap. Dit wordt in de volgende paragraaf verder besproken. OpenGL kan gemakkelijk gekoppeld worden met Cg. Met Cg kan men vertex en fragment shaders programmeren waardoor bump mapping eenvoudig geïmplementeerd kan worden. Dit wordt verder besproken in paragraaf OpenGL is platform onafhankelijk Texture mapping & blending In hoofdstuk 6 werd aangegeven dat de strokes niet als een rechthoek worden uitgetekend, maar een texture krijgen waardoor het resultaat meteen een stuk realistischer is (fig. 6.2). In hetzelfde hoofdstuk werd ook blending kort aangehaald. Deze techniek zorgt ervoor dat strokes die overschilderd worden, toch een effect blijven hebben op onderliggende strokes (fig. 6.3). Hiervoor een krijgt een stroke een extra parameter: de alpha-waarde. Deze waarde 1 Indien de strokes rechthoekig zijn.

69 HOOFDSTUK 6. IMPLEMENTATIE 63 ligt tussen 0 en 1 en geeft aan in welke mate de kleur van de onderliggende strokes invloed hebben op de bovenliggende strokes. Een alpha-waarde van 1 betekent met andere woorden dat de kleur van de onderliggende strokes geen effect hebben, een waarde van 0 betekent dat de kleur van de stroke volledig bepaald wordt door de onderliggende strokes. De alpha-waarde kan dus ook gezien worden als een waarde die bepaalt hoe doorschijnend een stroke is. Figuur 6.2: Telkens drie ingezoomde strokes over elkaar getekend. Links zonder texture, de rest met texture. De gebruikte texture bij elk beeld staat rechtsonder. Merk op dat op plaatsen waar er geen verf is, de onderliggende stroke zichtbaar wordt. In onze implementatie worden texture mapping en blending gecombineerd in één stap. Hiervoor bevat een texture naast RGB-waarden ook een alpha-waarde voor elke pixel. Deze textures worden aangemaakt door de klasse CBrushStrokeCreator. Deze klasse verwacht als input een RGB-beeld en een alpha-waarde. Om nu de alpha-waarde voor een pixel te bepalen, wordt het beeld eerst omgezet naar een grijswaardenbeeld en wordt elke intensiteitswaarde vermenigvuldigd met de opgegeven alpha-waarde. Dit zorgt ervoor dat op de donkere plekken in de texture, dit zijn de plaatsen waar er zich geen verf bevindt, de onderliggende strokes de kleur bepalen. Dit is duidelijk zichtbaar in fig Figuur 6.3: Blending: de linkse afbeelding werd gegenereerd zonder texture ter referentie. De overige afbeeldingen komen overeen met de afbeeldingen uit fig. 6.2, maar dan met alphawaarde. Onderliggende strokes blijven duidelijk een effect hebben op het resultaat. Proefondervindelijk hebben we vastgesteld dat een alpha-waarde tussen 0.2 en 0.4 de beste resultaten geeft. Indien de waarde te hoog ligt, wordt het kleurverschil met de onderliggende strokes te sterk. Dit is duidelijk zichtbaar in fig en fig Deze afbeeldingen kan men beschouwen als afbeelding met een alpha-waarde van 1.

70 HOOFDSTUK 6. IMPLEMENTATIE 64 Figuur 6.4: Indien de alpha-waarde 1 is, vallen de individuele strokes duidelijk op Bump Mapping Bij bump mapping wordt er een licht aan de scène toegevoegd en vervolgens wordt er voor elk punt van de gegenereerde afbeelding de belichting berekend. In paragraaf werd het phong-belichtingsmodel voorgesteld: I = A + att(d + S) (6.1) Elk punt van het schilderij wordt belicht en dus zijn de diffuse en speculaire component (D en S) niet nul 3. Hierdoor draagt de ambiënte term A niet veel bij tot het eindresultaat en kan dus worden weggelaten. De attenuatie factor att kan ook worden weggelaten omdat alle punten van het schilderij ongeveer even ver van de lichtbron verwijderd zijn. De speculaire term S tot slot kan ook worden weggelaten omdat deze term enkel nut heeft voor gladde oppervlakken. Hierdoor blijft enkel de diffuse term D over: D = D L + D M (L N) (6.2) Er wordt wit licht gebruikt (D L ) en D M is de kleur van de pixel waarvoor we de belichting willen berekenen. De vector N wordt bepaald door een normal map op te stellen en de vector L is lichtstraal die invalt op het punt. Om de normaal in een punt te bepalen moet er eerst een hoogteveld opgesteld worden. Hiervoor worden de strokes gerenderd met een donkere of lichte variant van de texture uit fig. 6.5 zodat men een grijswaardenbeeld bekomt. De onderste strokes worden gerenderd met de donkere variant, deze punten zijn immers niet veel hoger dan het canvas, terwijl de bovenste strokes gerendered worden met de lichtere variant. De intensiteit van een pixel uit het hoogteveld komt dan overeen met de hoogte. De klasse CHeightImageCreator zorgt ervoor dat de onderste strokes een donkere variant krijgen en de bovenste strokes, een lichte. Hiervoor worden er vier varianten van de texture uit fig. 6.5 aangemaakt. We hebben voor vier gekozen omdat we merkten wanneer we meer textures gebruiken, dit nauwelijks effect heeft op het resultaat. 3 het dot-product van de normaal en de lichtstraal is niet nul, formules 5.4 en 5.5 op blz. 55.

71 HOOFDSTUK 6. IMPLEMENTATIE 65 Figuur 6.5: De texture die gebruikt wordt om een hoogteveld aan te maken. Na het genereren van het hoogteveld worden de strokes nogmaals gerenderd, ditmaal met de echte texture. Het resultaat van deze pass wordt ook opgeslaan in een texture. We hebben nu dus twee textures, één texture met het hoogteveld een één texture met het gerenderde beeld. In de laatste pass wordt er een rechthoek getekend die als texture het gerenderde beeld heeft. Bij deze pass wordt er een fragment shader, geschreven in Cg, gebruikt die als input het hoogteveld krijgt om de belichting te kunnen berekenen en het gerenderende beeld. Deze aanpak is niet alleen de eenvoudigste methode om bump mapping te implementeren, het is ook de snelste omdat er gebruik wordt gemaakt van hardware acceleratie. 6.3 Invloed van de Parameters In paragraaf 6.2 werd reeds de invloed van texture mapping en blending op het resultaat besproken. In deze paragraaf wordt de invloed van de belangrijkste parameters van het algoritme besproken. Twee van de drie methoden uit paragraaf om de stroke posities te bepalen worden ook met elkaar vergeleken en ook het verschil tussen het gebruik van één en het gebruik van meerdere lagen wordt besproken Invloed van gamma In paragraaf 3.1 werd de berekening van een color difference image besproken. Een color difference image is een grijswaardenbeeld waarbij de intensiteit van een pixel overeenkomt met de gelijkenis met de kleur van de centrumpixel: f(d(r, c)) = { (1 (d(r, c)/d0)) γ indien d [0, d0] 0 indien d [d0, ) (6.3) De waarde d0 is een cut-off waarde: indien twee kleuren onvoldoende gelijkenis vertonen, wordt de intensiteit van de pixel op nul gezet. Door deze parameter lager in te stellen, bekomt men een scherper afgelijnd color difference image. Dit kan echter veel eenvoudiger bekomen worden door de waarde van γ te verhogen. Indien op een positie een stroke berekend moet worden, wordt op deze positie een color difference image berekend en vervolgens wordt de beste rechthoek gezocht die dit color difference image benadert. De invloed van γ hangt sterk af van het gebruikte venster. Bij vensters met grote kleurverschillen zal de invloed van γ een stuk minder zijn omdat wanneer de afstand tussen twee kleuren groter is dan d0, de intensiteit nul wordt. Fig. 6.6 toont een venster

72 HOOFDSTUK 6. IMPLEMENTATIE 66 Figuur 6.6: Links een venster. De bovenste rij zijn color difference images met een γ-waarde van respectievelijk 2, 6 en 16. De onderste rij zijn de strokes die berekend werden met bovenstaande color difference images. met weinig kleurvariatie en drie color difference images met een verschillende γ-waarde en de bijhorende strokes. Color difference images worden ook gebruikt bij het berekenen van een stroke area image. Om dit beeld op te stellen wordt in elke punt een color difference image berekend en worden de intensiteitswaarden hiervan gesommeerd. Deze som is de waarde van de pixel van het stroke area image. Door de γ-waarde te verhogen, zal deze som lager zijn omdat het grootste deel van de pixels van het color difference image zeer donker zijn. Dit heeft tot gevolg dat er meer strokes gegenereerd zullen worden omdat de donkere delen van een stroke area image de gebieden zijn waar er veel strokes gegenereerd moeten worden. Een hoge γ-waarde zorgt er dus voor dat de strokes kleiner (fig. 6.6) zijn, maar ook voor meer strokes (fig. 6.7). Figuur 6.7: Links een stroke area image dat berekend werd met een γ-waarde van 2. Hiernaast de stroke posities die hieruit werden gehaald. Rechts hiervan een stroke area image dat werd berekend met een γ-waarde van 16 en de stroke posities die hieruit berekend werden. Een hogere γ-waarde genereert meer strokes, maar de strokes zijn wel kleiner zoals te zien in fig. 6.6.

73 HOOFDSTUK 6. IMPLEMENTATIE Invloed van de venstergrootte De venstergrootte stelt een grens aan de maximale grootte van de strokes. Shiraishi en Yamaguchi geven aan dat een venstergrootte van 15 goede resultaten geeft [SY00b]. Wij hebben echter vastgesteld dat de venstergrootte sterk afhangt van het invoerbeeld en het resultaat dat men wenst te verkrijgen. Bij beelden met veel details worden de strokes best met een kleine venstergrootte berekend terwijl in beelden met weinig details de venstergrootte een stuk hoger kan liggen. Een venstergrootte van 15 is dan ook eerder een trade-off dat voor elk beeld aanvaardbare resultaten geeft. Fig. 6.8 toont drie beelden die gerendered werden met een verschillende venstergrootte. Figuur 6.8: Drie afbeeldingen met verschillende venstergrootte. Vooral bij de bomen op de achtergrond valt het verschil in venstergrootte op. De afbeelding inksboven is het originele beeld, de afbeelding rechtsboven heeft als venstergrootte 7, linksonder 15 en rechtsonder 25. Er wordt geen bump mapping bij deze afbeeldingen gebruikt. De venstergrootte heeft ook een grote invloed op de snelheid van het algoritme doordat er bij de berekening van een stroke area image, voor elke pixel een color difference image berekend wordt waarvan alle pixels vervolgens worden gesommeerd. De berekening van een stroke area image bij fig. 6.8 rechtsonder duurde enkele minuten, terwijl dit bij de andere twee afbeeldingen slechts respectievelijk 20 en 50 seconden was4. 4 afbeeldingen gegenereerd met een AMD Athlon met 1024MB RAM

74 HOOFDSTUK 6. IMPLEMENTATIE Positie van het licht De positie van het licht heeft een grote invloed op het resultaat. Een lichtbron die zich dicht bij het schilderij bevindt, zorgt ervoor dat het effect van bump mapping zeer sterk is, maar zorgt er tegelijk voor dat er een spot op schilderij gecre eerd wordt waardoor de randen donkerder zijn(fig. 6.9 rechtsboven). Een verder afgelegen lichtbron, zorgt voor een even sterke belichting van alle punten, maar vermindert het effect van bump mapping (fig. 6.9 rechtsonder). Het is ook mogelijk om speciale effecten te cree eren zoals in fig. 6.9 linksonder. Bij deze figuur is de lichtbron zeer dicht bij het schilderij geplaatst, maar niet in het centrum maar boven de zon. Hierdoor is de omgeving van de zon sterker belicht dan de rest van het schilderij. Figuur 6.9: Vier beelden met een verschillende positie van het licht. Linksboven een beeld met normale belichting. Rechtsboven een beeld met een lichtbron in het centrum van het beeld en zeer dichtbij. Linksonder een lichtbron die boven de zon geplaatst is en dichtbij staat. Rechtsonder een lichtbron die veraf staat.

75 HOOFDSTUK 6. IMPLEMENTATIE Murray vs. klassieke dithering In hoofdstuk 3 werden drie methoden besproken om de posities van de strokes te berekenen uit een stroke area image. De eerste methode volgt de murray curve over het beeld en sommeert hierbij 1/pixelW aarde. Wanneer de som een zekere threshold bereikt, wordt op de huidige positie een stroke gestart. De tweede methode past een stroke area image zo aan dat er een grens is aan de maximale afstand tussen twee strokes en vervolgens wordt het aangepaste stroke area image gedithered. Bij de derde methode werd er naast de maximale afstan tussen twee strokes, ook een minimale afstand opgelegd. Enkel de eerste twee methoden worden vergeleken. De tweede methode verdient duidelijk de voorkeur op de eerste methode om twee belangrijke redenen: Er is een maximale grens aan de afstand tussen twee stroke posities. De murray curve genereert wel op regelmatige afstand strokes, maar er is geen garantie dat er zich op elk punt van het canvas een stroke bevindt [NV02]. De murray curve vertoont artefacten. Bij het opstellen van een murray curve, worden de breedte en de hoogte van het beeld ontbonden in priemfactoren. Indien deze ontbindingen niet uit voldoende priemgetallen bestaan, wordt er een duidelijk patroon zichtbaar zoals te zien is in fig Figuur 6.10: De middelste figuur heeft een herkenbaar patroon en dit komt omdat in de oorspronkelijke afbeelding, de breedte en de hoogte priemgetallen zijn. De linkse figuur vertoont geen artefacten omdat de breedte en de hoogte wel in voldoende factoren ontbonden kunnen worden. De rechtse afbeelding werd bekomen door een stroke area image aan te passen en dan Floyd-Steinbergh dithering te gebruiken. Hierbij treden er geen artefacten op Eén vs. meerdere resoluties In paragraaf 3.4 werd een techniek besproken om een beeld op te bouwen uit verschillende lagen die over elkaar gerendered worden. Om de onderste laag op te bouwen wordt het het 5 De originele afbeelding is fig. 3.4 op blz. 28.

76 HOOFDSTUK 6. IMPLEMENTATIE 70 beeld een aantal keer verkleind, worden er strokes berekend voor dit verkleinde beeld en de berekende strokes worden dan een aantal keer vergroot. De bovenste lagen voegen dan iedere keer meer en meer details toe aan de gebieden met veel details. Fig toont links een beeld dat is opgebouwd uit één laag en rechts hetzelfde beeld, maar opgebouwd uit vier lagen. De parameters om de beelden te genereren waar voor het overige identiek. Er vallen een aantal zaken op. Het beeld dat uit meerdere lagen bestaat, is meer geblurred tov het beeld dat uit één laag bestaat. Dit valt bijvoorbeeld op aan de linkse spiegel. In de linkse figuur ziet men de brushstrokes ook veel beter liggen. Dit valt op bij de achtergrond. De werd immers op een lage resolutie getekend en vervolgens werden de strokes vergroot. Doordat de onderste laag op een lage resolutie berekend wordt, kan het gebeuren dat er objecten lichtjes verplaatst worden en/of van vorm veranderen. Dit komt door afrondingsfouten bij het scaleren naar een kleiner formaat. Indien een stroke uit een lage resolutie geplaatst wordt in het beeld, zorgt dit ervoor dat de stroke verschoven is. De rechtse auto uit fig is om deze reden iets breder. De afstand tussen de achterkant en de spoiler is om dezelfde reden in de rechtse figuur een beetje kleiner. Het grote voordeel aan het gebruik van meerdere resoluties is dat men grote, egale oppervlakken door minder strokes kunnen worden voorgesteld. Figuur 6.11: Links een beeld dat uit één laag bestaat, het rechtse beeld bestaat uit vier lagen. 6.4 User Interface De user interface is opgebouwd met QT van TrollTech. Dit is een framework voor het maken van grafische user interfaces dat beschikbaar is op verschillende platformen, waaronder windows en linux. Fig toont de user interface. De drie belangrijkste delen worden met een cijfer aangegeven en hieronder besproken: 1. Dit zijn de menu s en een toolbar. Er zijn drie menu s: File, Build en Help. File. Bevat drie items: Open, Save & Exit.

77 HOOFDSTUK 6. IMPLEMENTATIE 71 Figuur 6.12: de User Interface. Open: Opent een image om te renderen. Save: Bewaart een gerendered beeld. Exit: Sluit het programma af. Build. Bevat vier items: Settings, start, Select stroke & Select Height. settings: Hiermee kan een settings dialoog worden opgeroepen waarmee de verschillende parameters ingesteld kunnen worden (fig. 6.13). De invloed van de parameters werd reeds in de vorige paragraaf besproken. Er kan gekozen worden voor een gelaagde opbouw van het resultaat of niet. Indien er voor een gelaagde benadering wordt gekozen, wordt de slider om de threshold in te stellen, gedisabled. Indien er niet voor een gelaagde opbouw gekozen wordt, wordt de balk om het aantal lagen in te stellen eveneens gedisabled. Er zijn ook twee knoppen voorzien om de default settings in te stellen voor zowel een gelaagd als een niet-gelaagd beeld. start: Start de rendering. Hiervoor moet er natuurlijk wel eerst een foto zijn ingeladen. Het renderen is een zeer intensief proces en daarom wordt dit in een aparte thread gedaan, anders bevriest de user interface. Wel is het zo dat ongeveer alle items gedisabled worden tijdens het renderen, behalve het vergroten en verkleinen de hoofdvenster. Select Stroke: Hiermee kan een texture geselecteerd worden voor de brushstrokes. Er wordt gecontroleerd of de breedte en de hoogte van de texture wel een macht van 2 is, vermits OpenGL dit vereist voor texture mapping. Indien dit zo is, wordt de texture ook weergegeven. (fig. 6.14). Indien er al een beeld gerendered is, wordt het beeld onmiddellijk opnieuw getekend met de nieuwe texture. Height Stroke: Hiermee wordt een texture geselecteerd waarmee het hoogteveld gegenereerd wordt. Het dialoogvenster hiervoor is identiek aan het

78 HOOFDSTUK 6. IMPLEMENTATIE 72 Figuur 6.13: Settings Dialoog. dialoogvenster om een stroke-texture te selecteren (fig. 6.14). Help: roept een about scherm op. Toolbar: de toolbar bevat 6 knoppen: Open: Opent een image om te renderen. Start: Start het rendering proces. Dit heeft hetzelfde effect als Start uit het Build menu. Settings: Roept het settings dialoogvenster op. Show Image: Toont het onbewerkt beeld in een apart venster. Show Stroke: Toont drie strokes die over elkaar zijn getekend. Dit kan handig zijn om het effect van een brushtexture te onderzoeken of om alpha-waarden in te stellen. Indien er namelijk een andere texture of alpha-waarde wordt ingesteld, wordt het effect onmiddellijk getoond op het resultaat. Door deze knop kan men het resultaat in close-up bekijken op drie strokes. alpha-slider: met deze slider kan de alpha-waarde ingesteld worden. Het effect hiervan is onmiddellijk zichtbaar op het resultaat. 2. Dit is het Canvas waarop het resultaat wordt uitgetekend. 3. Feedback venster. Het algoritme is zeer traag, in dit venster wordt aangegeven wanneer tussenstappen voltooid zijn zodat de gebruiker een idee heeft in welke fase het algoritme zich bevindt. Ook wordt het aantal strokes waaruit het resultaat is opgebouwd aangegeven.

79 HOOFDSTUK 6. IMPLEMENTATIE 73 Figuur 6.14: Select Stroke dialoog venster. Indien de breedte en de hoogte een macht van 2 zijn, wordt de texture rechts weergegeven. 6.5 Resultaten In deze paragraaf worden enkele resultaten getoond. Alle afbeeldingen werden gerendered met een AMD Athlon met 1024MB Ram en een GeForce 6200 als videokaart. Figuur 6.15: Ferrari.

80 HOOFDSTUK 6. IMPLEMENTATIE Figuur 6.16: Gondel in Veneti e. Figuur 6.17: Alcazar in Sevilla. 74

81 HOOFDSTUK 6. IMPLEMENTATIE 75 Figuur 6.18: Goudvissen. Figuur 6.19: Bloem.

82 HOOFDSTUK 6. IMPLEMENTATIE 76 Figuur 6.20: Lance Armstrong.

Computer Vision: Hoe Leer ik een Computer Zien?

Computer Vision: Hoe Leer ik een Computer Zien? Computer Vision: Hoe Leer ik een Computer Zien? Michael H.F. Wilkinson Instituut voot Wiskunde en Informatica Rijksuniversiteit Groningen 27 April 2006 Overzicht 1 of 19 Wat is Computer Vision? Wat zijn

Nadere informatie

Graphics. Small Basic graphics 1/6

Graphics. Small Basic graphics 1/6 Small Basic graphics 1/6 Graphics Naast het werken met tekst kan je in Small Basic ook werken met grafische elementen: lijnen, vormen en kleuren. Hierbij gebruik je het grafische venster met de witte achtergrond.

Nadere informatie

Informatica: C# WPO 4

Informatica: C# WPO 4 Informatica: C# WPO 4 1. Inhoud For-loop, debuggen, inleiding tot graphics 2. Oefeningen Demo 1: Geometrische figuren Demo 2: Teken een 10 bij 10 rooster Demo 3: Debug oplossingen demo s 1 en 2 A: Flowerpower

Nadere informatie

Informatica: C# WPO 10

Informatica: C# WPO 10 Informatica: C# WPO 10 1. Inhoud 2D arrays, lijsten van arrays, NULL-values 2. Oefeningen Demo 1: Fill and print 2D array Demo 2: Fill and print list of array A: Matrix optelling A: Matrix * constante

Nadere informatie

Handicom. Symbol for Windows. Image Manager. (Versie 4) Handicom, 2011, Nederland

Handicom. Symbol for Windows. Image Manager. (Versie 4) Handicom, 2011, Nederland Handicom Symbol for Windows Image Manager (Versie 4) Handicom, 2011, Nederland Inhoud Inleiding... 2 1. Image Manager hoofdscherm...3 1.1 Onderdelen van het venster...3 1.2 Het scherm veranderen...3 1.2.1

Nadere informatie

Excel reader. Beginner Gemiddeld. bas@excel-programmeur.nl

Excel reader. Beginner Gemiddeld. bas@excel-programmeur.nl Excel reader Beginner Gemiddeld Auteur Bas Meijerink E-mail bas@excel-programmeur.nl Versie 01D00 Datum 01-03-2014 Inhoudsopgave Introductie... - 3 - Hoofdstuk 1 - Databewerking - 4-1. Inleiding... - 5-2.

Nadere informatie

Mooie compositie.

Mooie compositie. http://psd.fanextra.com/tutorials/designing/learn-how-to-design-a-charming-collage-composition/ Mooie compositie Nodig : meisje ; structuur; grunge penselen; waterachtergrond ; blauwe diamant ; lijntekeningen

Nadere informatie

3. Structuren in de taal

3. Structuren in de taal 3. Structuren in de taal In dit hoofdstuk behandelen we de belangrijkst econtrolestructuren die in de algoritmiek gebruikt worden. Dit zijn o.a. de opeenvolging, selectie en lussen (herhaling). Vóór we

Nadere informatie

Netwerkdiagram voor een project. AON: Activities On Nodes - activiteiten op knooppunten

Netwerkdiagram voor een project. AON: Activities On Nodes - activiteiten op knooppunten Netwerkdiagram voor een project. AON: Activities On Nodes - activiteiten op knooppunten Opmerking vooraf. Een netwerk is een structuur die is opgebouwd met pijlen en knooppunten. Bij het opstellen van

Nadere informatie

Functie beschrijving: Het automatisch aanmaken van een raai-volgende contour

Functie beschrijving: Het automatisch aanmaken van een raai-volgende contour Modelit Rotterdamse Rijweg 126 3042 AS Rotterdam Telefoon +31 10 4623621 info@modelit.nl www.modelit.nl Functie beschrijving: Het automatisch aanmaken van een raai-volgende contour Datum 8 Mei 2004 Modelit

Nadere informatie

Raamwerk voor Optimale Globale Belichting

Raamwerk voor Optimale Globale Belichting Raamwerk voor Optimale Globale Belichting Lukas Latacz Mathieu De Zutter Departement Computer Graphics K.U.Leuven 18 april 2005 Overzicht 1 Inleiding Situering Probleemstelling Vorig werk 2 Nieuw raamwerk

Nadere informatie

IJkingstoets burgerlijk ingenieur juni 2014: algemene feedback

IJkingstoets burgerlijk ingenieur juni 2014: algemene feedback IJkingstoets burgerlijk ingenieur 30 juni 2014 - reeks 1 - p. 1 IJkingstoets burgerlijk ingenieur juni 2014: algemene feedback In totaal namen 716 studenten deel aan de ijkingstoets burgerlijk ingenieur

Nadere informatie

Lijnen/randen en passe-partouts maken met Photoshop.

Lijnen/randen en passe-partouts maken met Photoshop. Lijnen/randen en passe-partouts maken met Photoshop. Les 1: Witte rand om de foto m.b.v. canvasgrootte. 1. Open de foto in Photoshop. 2. Klik in menu AFBEELDING op CANVASGROOTTE 3. Zorg dat in het vakje

Nadere informatie

Programmeren A. Genetisch Programma voor het Partitie Probleem. begeleiding:

Programmeren A. Genetisch Programma voor het Partitie Probleem. begeleiding: Programmeren A Genetisch Programma voor het Partitie Probleem begeleiding: Inleiding Het Partitie Probleem luidt als volgt: Gegeven een verzameling van n positieve integers, vindt twee disjuncte deelverzamelingen

Nadere informatie

5. Werken met afbeeldingen

5. Werken met afbeeldingen 103 5. Werken met afbeeldingen Foto s en tekeningen worden ook wel afbeeldingen genoemd. Afbeeldingen maken een website niet alleen mooier. Ze zijn ook belangrijk om duidelijk te maken wat je precies bedoelt.

Nadere informatie

Figuur 1: Kiezen van het Template in sketchup

Figuur 1: Kiezen van het Template in sketchup Tutorial : Tekenen van een sleutelhanger met sketchup. We willen zeer graag een sleutelhanger tekenen die de vorm heeft van het logo van onze school. Dit is namelijk een achthoek die verwijst naar een

Nadere informatie

Overzichten genereren in het FMIS

Overzichten genereren in het FMIS Overzichten genereren in het FMIS 1. Algemeen Het FMIS is een database-applicatie waarin een gigantische set aan gegevens zit. Deze gegevens worden beheerd door gebruik te maken van de verschillende modules:

Nadere informatie

IJkingstoets burgerlijk ingenieur juni 2014: algemene feedback

IJkingstoets burgerlijk ingenieur juni 2014: algemene feedback IJkingstoets burgerlijk ingenieur 30 juni 2014 - reeks 2 - p. 1 IJkingstoets burgerlijk ingenieur juni 2014: algemene feedback In totaal namen 716 studenten deel aan de ijkingstoets burgerlijk ingenieur

Nadere informatie

Oefeningenles beeldverwerking

Oefeningenles beeldverwerking Oefeningenles beeldverwerking Histogram Wat is een histogram hoe kunnen we een histogram opstellen? Welke afbeelding hoort bij welk histogram? Waarom? Een histogram geeft voor elke grijswaarde het aantal

Nadere informatie

Lesbrief GeoGebra. 1. Even kennismaken met GeoGebra (GG)

Lesbrief GeoGebra. 1. Even kennismaken met GeoGebra (GG) Lesbrief GeoGebra Inhoud: 1. Even kennismaken met GeoGebra 2. Meetkunde: 2.1 Punten, lijnen, figuren maken 2.2 Loodlijn, deellijn, middelloodlijn maken 2.3 Probleem M1: De rechte van Euler 2.4 Probleem

Nadere informatie

Creëer oppervlakken.

Creëer oppervlakken. Creëer oppervlakken. Hiernaast het iconenblok dat de mogelijkheden tot het creëren van oppervlakte weergeeft. Bovenste rij iconen. Het eerste links bovengeeft de mogelijkheid weer op een oppervlak te maken

Nadere informatie

Fractale dimensie. Eline Sommereyns 6wwIi nr.9

Fractale dimensie. Eline Sommereyns 6wwIi nr.9 Fractale dimensie Eline Sommereyns 6wwIi nr.9 Inhoudstabel Inleiding... 3 Gehele dimensie... 4 Begrip dimensie... 4 Lengte, breedte, hoogte... 4 Tijd-ruimte... 4 Fractale dimensie... 5 Fractalen... 5 Wat?...

Nadere informatie

5 Eenvoudige complexe functies

5 Eenvoudige complexe functies 5 Eenvoudige complexe functies Bij complexe functies is zowel het domein als het beeld een deelverzameling van. Toch kan men in eenvoudige gevallen het domein en het beeld in één vlak weergeven. 5.1 Functies

Nadere informatie

8 Word Art Teksten. De documentatie van deze API is te lezen in Bijlage P: WordArt Documentatie.

8 Word Art Teksten. De documentatie van deze API is te lezen in Bijlage P: WordArt Documentatie. 8 Word Art Teksten De tbvectorfont library maakt gebruik van alle standaard functionaliteit die de browsers bieden. Naast deze standaard functionaliteit ziet Tingly Games graag ook uitgebreidere tekst

Nadere informatie

WORKSHOP PHOTOSHOP ELEMENTS 6.0

WORKSHOP PHOTOSHOP ELEMENTS 6.0 Start Photoshop Elements op en kies in het Welkomstscherm voor de optie Bewerken Oefening 1 Filters half gebruikt en open afbeelding oefening 1.jpg. Door middel van filters kunnen we speciale effecten

Nadere informatie

Combinatorische Algoritmen: Binary Decision Diagrams, Deel III

Combinatorische Algoritmen: Binary Decision Diagrams, Deel III Combinatorische Algoritmen: Binary Decision Diagrams, Deel III Sjoerd van Egmond LIACS, Leiden University, The Netherlands svegmond@liacs.nl 2 juni 2010 Samenvatting Deze notitie beschrijft een nederlandse

Nadere informatie

Onafhankelijke verzamelingen en Gewogen Oplossingen, door Donald E. Knuth, The Art of Computer Programming, Volume 4, Combinatorial Algorithms

Onafhankelijke verzamelingen en Gewogen Oplossingen, door Donald E. Knuth, The Art of Computer Programming, Volume 4, Combinatorial Algorithms Onafhankelijke verzamelingen en Gewogen Oplossingen, door Donald E. Knuth, The Art of Computer Programming, Volume 4, Combinatorial Algorithms Giso Dal (0752975) Pagina s 5 7 1 Deelverzameling Representatie

Nadere informatie

OEFENINGEN PYTHON REEKS 4

OEFENINGEN PYTHON REEKS 4 Vraag 1: Introductie Tekenen OEFENINGEN PYTHON REEKS 4 Vanaf deze les gaan we gebruik maken van het pakket VPython om de objecten te tekenen en weer te geven. Om aan alle functies te kunnen die VPython

Nadere informatie

mailgroep photoshop Copyright

mailgroep photoshop Copyright http://psd.fanextra.com/tutorials/photo-effects/photo-manipulate-a-surreal-apple-habitat-scene/ Appelhuisje Nodig: achtergrond ; boomstronk ; appel ; oud venster1 ; oud venster2 ; ladder ; licht penselen

Nadere informatie

Paden en punten bewerken

Paden en punten bewerken Als u verder klikt, ziet u dat welk punt u de laatste hebt geplaatst, blauw zal tonen, terwijl alle andere punten met een witte binnenkant zijn omschreven: Dit komt doordat u op elk moment terug kunt gaan

Nadere informatie

Figuur 1: Kiezen van het Template in sketchup

Figuur 1: Kiezen van het Template in sketchup Tutorial : Tekenen van een Vernier lichtsensorhouder met sketchup. We willen zeer graag de lichtsensor uit deze link (http://www.rhombus.be/contents/nl/d156.html) gebruiken voor het meten van de lichtsterkte

Nadere informatie

IJkingstoets Wiskunde-Informatica-Fysica september 2018: algemene feedback

IJkingstoets Wiskunde-Informatica-Fysica september 2018: algemene feedback IJkingstoets wiskunde-informatica-fysica september 8 - reeks - p. IJkingstoets Wiskunde-Informatica-Fysica september 8: algemene feedback Positionering ten opzichte van andere deelnemers In totaal namen

Nadere informatie

Zoals altijd is dit de laatste afbeelding die we gaan maken:

Zoals altijd is dit de laatste afbeelding die we gaan maken: De tutorial bestaat uit twee hoofdonderdelen, waarbij de olieverftekst wordt gemaakt en de tubes worden gemaakt. U begint bij basisvormen, vult ze met een complex lineair verloop en past vervolgens het

Nadere informatie

Handleiding NarrowCasting

Handleiding NarrowCasting Handleiding NarrowCasting http://portal.vebe-narrowcasting.nl september 2013 1 Inhoud Inloggen 3 Dia overzicht 4 Nieuwe dia toevoegen 5 Dia bewerken 9 Dia exporteren naar toonbankkaart 11 Presentatie exporteren

Nadere informatie

Informatica: C# WPO 6

Informatica: C# WPO 6 Informatica: C# WPO 6 1. Inhoud Timers, switch cases, combobox 2. Oefeningen Demo 1: Bounce Demo 2: Hex to decimal converter Demo 3: Debug oplossing demo 1 A: Count to 10 A: Biljarttafel A: Azerty to qwerty

Nadere informatie

Recognition and Detection of Objects Using Visual and Textual Cues S. Karaoğlu

Recognition and Detection of Objects Using Visual and Textual Cues S. Karaoğlu Recognition and Detection of Objects Using Visual and Textual Cues S. Karaoğlu Samenvatting Met dit proefschrift richten we onze aandacht op object herkenning en detectie voor een beter begrip in afbeeldingen.

Nadere informatie

Oefeningenles beeldverwerking

Oefeningenles beeldverwerking Oefeningenles beeldverwerking Histogram Wat is een histogram hoe kunnen we een histogram opstellen? Welke afbeelding hoort bij welk histogram? Waarom? Een histogram geeft voor elke grijswaarde het aantal

Nadere informatie

Inhoudsopgave Voorwoord 5 Nieuwsbrief 5 Introductie Visual Steps 6 Wat heeft u nodig? 6 De volgorde van lezen 7 Uw voorkennis

Inhoudsopgave Voorwoord 5 Nieuwsbrief 5 Introductie Visual Steps 6 Wat heeft u nodig? 6 De volgorde van lezen 7 Uw voorkennis Inhoudsopgave Voorwoord... 5 Nieuwsbrief... 5 Introductie Visual Steps... 6 Wat heeft u nodig?... 6 De volgorde van lezen... 7 Uw voorkennis... 8 Hoe werkt u met dit boek?... 8 Website... 9 Toets uw kennis...

Nadere informatie

Examen HAVO. wiskunde B. tijdvak 2 woensdag 22 juni 13.30-16.30 uur. Bij dit examen hoort een uitwerkbijlage.

Examen HAVO. wiskunde B. tijdvak 2 woensdag 22 juni 13.30-16.30 uur. Bij dit examen hoort een uitwerkbijlage. Examen HAVO 20 tijdvak 2 woensdag 22 juni 3.30-6.30 uur wiskunde B Bij dit examen hoort een uitwerkbijlage. Dit examen bestaat uit 9 vragen. Voor dit examen zijn maximaal 78 punten te behalen. Voor elk

Nadere informatie

Bepaling energie en soortelijke warmte 2D-atoomrooster m.b.v. de Metropolis Monte Carlo methode

Bepaling energie en soortelijke warmte 2D-atoomrooster m.b.v. de Metropolis Monte Carlo methode Bepaling energie en soortelijke warmte 2D-atoomrooster m.b.v. de Metropolis Monte Carlo methode Verslag Computational Physics Sietze van Buuren Begeleider: Prof.Dr. H. de Raedt 29 december 25 Samenvatting

Nadere informatie

De eerste stappen met de TI-Nspire 2.1 voor de derde graad

De eerste stappen met de TI-Nspire 2.1 voor de derde graad De eerste stappen met TI-Nspire 2.1 voor de derde graad. Technisch Instituut Heilig Hart, Hasselt Inleiding Ik gebruik al twee jaar de TI-Nspire CAS in de derde graad TSO in de klassen 6TIW( 8 uur wiskunde)

Nadere informatie

GeoGebra Quickstart. Snelgids voor GeoGebra. Vertaald door Beatrijs Versichel en Ivan De Winne

GeoGebra Quickstart. Snelgids voor GeoGebra. Vertaald door Beatrijs Versichel en Ivan De Winne GeoGebra Quickstart Snelgids voor GeoGebra Vertaald door Beatrijs Versichel en Ivan De Winne Dynamische meetkunde, algebra en analyse vormen de basis van GeoGebra, een educatief pakket, dat meetkunde en

Nadere informatie

Bijlage Animation Shop 3

Bijlage Animation Shop 3 1 Bijlage Animation Shop 3 Bij Paint Shop Pro 9 wordt het programma Animation Shop 3 meegeleverd. Met Animation Shop kunt u eenvoudige animaties maken die u bijvoorbeeld op uw eigen website kunt gebruiken.

Nadere informatie

Stroomschema s maken in Word

Stroomschema s maken in Word 1 Stroomschema s maken in Word Een programma direct maken in Scratch gaat vaak wel goed als het een klein programma is. Als het programma groter en moeilijker is, is het lastig om goed te zien welk commando

Nadere informatie

Hoofdstuk 26: Modelleren in Excel

Hoofdstuk 26: Modelleren in Excel Hoofdstuk 26: Modelleren in Excel 26.0 Inleiding In dit hoofdstuk leer je een aantal technieken die je kunnen helpen bij het voorbereiden van bedrijfsmodellen in Excel (zie hoofdstuk 25 voor wat bedoeld

Nadere informatie

HTML Graphics. Hans Roeyen V 3.0

HTML Graphics. Hans Roeyen V 3.0 HTML Graphics Hans Roeyen V 3.0 19 maart 2015 Inhoud 1. HTML5 Canvas... 3 1.1. Het Canvas element... 3 2. SVG Element... 9 2.1. SVG vergeleken met Canvas... 9 2.2. Een cirkel tekenen met SVG... 10 2.2.1.

Nadere informatie

Titel: Workshop creatief met MS Word Auteur: Miriam Harreman / Jaar: 2009 Versie: Creative Commons Naamsvermelding & Gelijk

Titel: Workshop creatief met MS Word Auteur: Miriam Harreman /   Jaar: 2009 Versie: Creative Commons Naamsvermelding & Gelijk Versie: 1.0-1- Creative Commons Index INDEX... 2 INLEIDING... 3 INSTELLEN VAN DE PAGINA... 4 LIGGENDE KAART... 4 STAANDE KAART... 4 WERKRUIMTE... 4 WERKEN MET WORDART... 5 WORDART: WERKBALK... 5 WORDART:

Nadere informatie

Open eerst een affiniteit Designer monster opgenomen met uw download: "tutorial artwork.afdesign". Indien gewenst, kunt u werken met een van uw eigen

Open eerst een affiniteit Designer monster opgenomen met uw download: tutorial artwork.afdesign. Indien gewenst, kunt u werken met een van uw eigen Open eerst een affiniteit Designer monster opgenomen met uw download: "tutorial artwork.afdesign". Indien gewenst, kunt u werken met een van uw eigen kunstwerken, ik zal niet boos zijn, dat beloof ik.

Nadere informatie

Random-Getallen. Tristan Demont en Mark van der Boor en

Random-Getallen. Tristan Demont en Mark van der Boor en Random-Getallen Tristan Demont en Mark van der Boor 0768931 en 0772942 18 januari 2013 Begeleider: Relinde Jurrius Opdrachtgever: Berry Schoenmakers Modelleren B, 2WH02 Technische Universiteit Eindhoven

Nadere informatie

I. Vorming 4-5 (3&10/05/2012)

I. Vorming 4-5 (3&10/05/2012) I. Vorming 4-5 (3&10/05/2012) 1. Windows Live Photo Gallery Om de foto s op onze computer te beheren, hebben we voor de vorming gekozen om met Windows Live Photo Gallery te werken. Photo Gallery biedt

Nadere informatie

IJkingstoets Wiskunde-Informatica-Fysica 29 juni Nummer vragenreeks: 1

IJkingstoets Wiskunde-Informatica-Fysica 29 juni Nummer vragenreeks: 1 IJkingstoets Wiskunde-Informatica-Fysica 29 juni 206 Nummer vragenreeks: IJkingstoets wiskunde-informatica-fysica 29 juni 206 - reeks - p. /0 Oefening Welke studierichting wil je graag volgen? (vraag

Nadere informatie

mailgroep photoshop Copyright Lesje: Stel je eigen kamer samen -

mailgroep photoshop Copyright Lesje: Stel je eigen kamer samen - Lesje: Stel je eigen kamer samen - http://www2.hku.nl/~fotoshop/img-tutorial5 In deze les gaan we een drie-dimensionale ruimte bouwen, in dit geval een gezellige woonkamer. Uiteraard mag je deze zelf in

Nadere informatie

1 van 9 28-4-2010 12:19 Ik wil er nogmaals op wijzen dat als je een wijziging in de pagina aanbrengt het verstandig is om de pagina op te slaan. Dit moet een routine worden zodat je je werk niet steed

Nadere informatie

ProjectHeatmap. Onderzoeksrapport v0.5 11-03-11 Dennis Wagenaar

ProjectHeatmap. Onderzoeksrapport v0.5 11-03-11 Dennis Wagenaar ProjectHeatmap Onderzoeksrapport v0.5 11-03-11 Dennis Wagenaar 1 Inhoudsopgave Inleiding...3 Gheat...4 Info...4 Voordelen...4 Nadelen...4 Google Fusion Tables...5 Info...5 Voordelen...5 Nadelen...5 OLHeatmap...6

Nadere informatie

Examen VWO. wiskunde B1

Examen VWO. wiskunde B1 wiskunde B Eamen VWO Voorbereidend Wetenschappelijk Onderwijs Tijdvak Dinsdag 3 mei 3.3 6.3 uur 5 Voor dit eamen zijn maimaal 87 punten te behalen; het eamen bestaat uit vragen. Voor elk vraagnummer is

Nadere informatie

...dit is deel 1 van 3!

...dit is deel 1 van 3! We zullen het hebben over "selecties" een prachtgereedschap van psp, maaaaar niet zo echt makkelijk om mee te werken - dus ik zeg vooraf, die wordt geen makkie...dit is deel 1 van 3! Maar laat ons eens

Nadere informatie

Handicom. Symbol for Windows. Image Manager. (Versie 3) Handicom, 2006, Nederland

Handicom. Symbol for Windows. Image Manager. (Versie 3) Handicom, 2006, Nederland Handicom Symbol for Windows Image Manager (Versie 3) Handicom, 2006, Nederland Inhoud 1. Image Manager hoofdscherm... 2 1.1 Onderdelen van het venster... 2 1.2 Het scherm veranderen... 2 1.3 Een andere

Nadere informatie

vwo: Het maken van een natuurkunde-verslag vs 21062011

vwo: Het maken van een natuurkunde-verslag vs 21062011 Het maken van een verslag voor natuurkunde, vwo versie Deze tekst vind je op www.agtijmensen.nl: Een voorbeeld van een verslag Daar vind je ook een po of pws verslag dat wat uitgebreider is. Gebruik volledige

Nadere informatie

IJkingstoets burgerlijk ingenieur-architect september 2018: feedback deel wiskunde

IJkingstoets burgerlijk ingenieur-architect september 2018: feedback deel wiskunde IJkingstoets burgerlijk ingenieur-architect september 8: feedback deel wiskunde Positionering ten opzichte van andere deelnemers In totaal namen 5 studenten deel aan de ijkingstoets burgerlijk ingenieur-architect

Nadere informatie

IJkingstoets burgerlijk ingenieur-architect september 2018: feedback deel wiskunde

IJkingstoets burgerlijk ingenieur-architect september 2018: feedback deel wiskunde IJkingstoets burgerlijk ingenieur-architect september 8: feedback deel wiskunde Positionering ten opzichte van andere deelnemers In totaal namen 5 studenten deel aan de ijkingstoets burgerlijk ingenieur-architect

Nadere informatie

Informatica: C# WPO 8

Informatica: C# WPO 8 Informatica: C# WPO 8 1. Inhoud Procedures (functies zonder return-waarde) 2. Oefeningen Demo 1: Teken driehoeken Demo 2: Print array of double A: Stapel blokken A: Weerstanden 1 A: Weerstanden 2 A: Draw

Nadere informatie

Hoofdstuk 10: Groeperen* 2010

Hoofdstuk 10: Groeperen* 2010 Hoofdstuk 10: Groeperen* 2010 10.0 Inleiding Soms is het handig om het aantal rijen en kolommen op het scherm te verminderen. Het wordt aangeraden om dit te doen door rijen en kolommen te groeperen. Een

Nadere informatie

Ijkingstoets industrieel ingenieur aangeboden door UGent en VUB op 15 september 2014: algemene feedback

Ijkingstoets industrieel ingenieur aangeboden door UGent en VUB op 15 september 2014: algemene feedback IJkingstoets 5 september 04 - reeks - p. /0 Ijkingstoets industrieel ingenieur aangeboden door UGent en VUB op 5 september 04: algemene feedback In totaal namen 5 studenten deel aan deze ijkingstoets industrieel

Nadere informatie

WETENSCHAPPEN Oefeningen. LES 2 - Gebogen vlak op basis van een wiskundig bepaalde curve in Grasshopper. Tobias Labarque Rinus Roelofs Matthias Dziwak

WETENSCHAPPEN Oefeningen. LES 2 - Gebogen vlak op basis van een wiskundig bepaalde curve in Grasshopper. Tobias Labarque Rinus Roelofs Matthias Dziwak WETENSCHAPPEN Oefeningen LES 2 - Gebogen vlak op basis van een wiskundig bepaalde curve in Grasshopper Tobias Labarque Rinus Roelofs Matthias Dziwak STAP 1 : Panel Opmerking : je hoeft het Panel blok niet

Nadere informatie

http://photoshoptutorials.ws/photoshop-tutorials/text-effects/tron-grid/all-pages.html

http://photoshoptutorials.ws/photoshop-tutorials/text-effects/tron-grid/all-pages.html http://photoshoptutorials.ws/photoshop-tutorials/text-effects/tron-grid/all-pages.html Rooster Deze foto werd gebruikt in de hoogste resolutie. En dit is het einderesultaat: Het is heel belangrijk van

Nadere informatie

illustrator Alleen een hands- on.. LESBRIEVEN

illustrator Alleen een hands- on.. LESBRIEVEN illustrator LESBRIEVEN HANDS- ON: OPDRACHTEN: SITE MET ALLE OEFENINGEN VOORKENNIS: PLAATSEN WEBINHOUD GEBRUIK FLASH Adobe illustrator Hét pakket uit de Adobe- suite om vector- a?eeldingen mee te bewerken

Nadere informatie

Tentamen 8D040 - Basis beeldverwerking

Tentamen 8D040 - Basis beeldverwerking Tentamen 8D040 - Basis beeldverwerking 6 augustus 2008, 14.00-17.00 uur Vraag 1. (1.5 punten) Gegeven het binaire beeld Components (figuur 1). De componenten in dit beeld moeten automatisch gesegmenteerd

Nadere informatie

Uitleg van de Hough transformatie

Uitleg van de Hough transformatie Uitleg van de Hough transformatie Maarten M. Fokkinga, Joeri van Ruth Database groep, Fac. EWI, Universiteit Twente Versie van 17 mei 2005, 10:59 De Hough transformatie is een wiskundige techniek om een

Nadere informatie

Netwerkdiagram voor een project. AOA: Activities On Arrows - activiteiten op de pijlen.

Netwerkdiagram voor een project. AOA: Activities On Arrows - activiteiten op de pijlen. Netwerkdiagram voor een project. AOA: Activities On Arrows - activiteiten op de pijlen. Opmerking vooraf. Een netwerk is een structuur die is opgebouwd met pijlen en knooppunten. Bij het opstellen van

Nadere informatie

Objectgeoriënteerd Programmeren: WPO 4B

Objectgeoriënteerd Programmeren: WPO 4B Objectgeoriënteerd Programmeren: WPO 4B 1. Inhoud Polymorfie 2. Oefeningen A: Polygon A: Rekenmachine A: Infection A: Waves E: Snake X: Pacman X: Planetendans 2.1 A: Polygon Herneem de opgave Polygon van

Nadere informatie

Om paint te openen volgen we dezelfde weg als bij de rekenmachine:

Om paint te openen volgen we dezelfde weg als bij de rekenmachine: Paint is een éénvoudig tekenprogramma. Vele functies hiervan komen later terug bij diverse foto- en tekenprogramma s. Om paint te openen volgen we dezelfde weg als bij de rekenmachine: rechtbovenaan zoeken

Nadere informatie

Opdracht 1 bladzijde 8

Opdracht 1 bladzijde 8 Opdrachten Opdracht bladzijde 8 Uit een stuk karton met lengte 45 cm en breedte 8 cm knip je in de vier hoeken vierkantjes af met zijde cm. Zo verkrijg je een open doos. 8 cm 45 cm Hoe groot is het volume

Nadere informatie

Zwart-wit en grijstinten

Zwart-wit en grijstinten Zwart-wit en grijstinten 1. Kleur elk vakje dat een stukje lijn bevat zwart. Opdracht 1 is een eenvoudige opdracht vergelijkbaar met wat de computer op het beeldscherm ook doet. Normaal zie je dit niet

Nadere informatie

ICT. Meetkunde met GeoGebra. 2.7 deel 1 blz 78

ICT. Meetkunde met GeoGebra. 2.7 deel 1 blz 78 ICT Meetkunde met GeoGebra 2.7 deel 1 blz 78 Om de opdrachten van paragraaf 2.7 uit het leerboek te kunnen maken heb je het computerprogramma GeoGebra nodig. Je kunt het programma openen via de leerlingenkit

Nadere informatie

OPTIKA - Maken van selecties in Photoshop

OPTIKA - Maken van selecties in Photoshop 1. Maken van selecties Door het maken van selecties kunnen we bewerkingen uitvoeren op een gedeelte van de foto. Zoals in de meeste computertoepassingen kan je ook in Photoshop selecties kopiëren (Ctrl+C)

Nadere informatie

Broodje bakken in Photoshop

Broodje bakken in Photoshop http://psd.tutsplus.com/tutorials/drawing/create-a-realistic-loaf-of-bread-in-photoshop/ Broodje bakken in Photoshop Stap 1 Nieuw document = 1000 x 550 px. Nieuwe groep maken, je noemt die BG of background.

Nadere informatie

1. Exclusief aanvinken

1. Exclusief aanvinken 1. Exclusief aanvinken Hoe maak je meerkeuzevragen met exclusieve selectie? Het bestand 10_exclusiefhoe.ggb toont drie manieren om meerkeuzevragen te maken. 1.1 Aanvinkvakjes (voorlaatste knop) Op de aanvinkvakjes

Nadere informatie

OEFENINGEN PYTHON REEKS 5

OEFENINGEN PYTHON REEKS 5 Vraag 1: Interpoleren (vervolg) OEFENINGEN PYTHON REEKS 5 Bouw verder op je code van Reeks 3, vraag 4. Voeg vier constanten toe aan je code: X0 = 280, Y0 = 0, Z0 = 50 en SIZE = 8. a) Teken een kubus met

Nadere informatie

Deel 3: Impress. Klikoefeningen

Deel 3: Impress. Klikoefeningen Deel 3: Impress Klikoefeningen De mogelijkheden van Impress als ondersteunend middel voor een gedifferentieerde begeleiding van leerlingen met beperkingen. CNO Universiteit Antwerpen 1 Deel 3 Impress Klikoefeningen

Nadere informatie

Maak een Fancy Cartoon-gebouw in A Illustrator AD of Drawplus

Maak een Fancy Cartoon-gebouw in A Illustrator AD of Drawplus Maak een Fancy Cartoon-gebouw in A Illustrator AD of Drawplus Leer hoe je een gebouw in cartoonstijl kunt maken, met behulp van geometrische basisvormen en verschillende hulpmiddelen en functies van Adobe

Nadere informatie

Voor deze tutorial heb je een aantal afbeeldingen nodig. Deze afbeeldingen kan je downloaden via de site maureensphotoshoptutorials.wordpress.

Voor deze tutorial heb je een aantal afbeeldingen nodig. Deze afbeeldingen kan je downloaden via de site maureensphotoshoptutorials.wordpress. Voor deze tutorial heb je een aantal afbeeldingen nodig. Deze afbeeldingen kan je downloaden via de site maureensphotoshoptutorials.wordpress.com Zodra de bestanden gedownload zijn kan je beginnen. Veel

Nadere informatie

Informatica: C# WPO 5

Informatica: C# WPO 5 Informatica: C# WPO 5 1. Inhoud While-loop, do while, debuggen, graphics 2. Oefeningen Demo 1: Power of 2 Demo 2: Tel totdat... Demo 3: Debug oplossing demo s 1 en 2 A: Count down A: Random counting A:

Nadere informatie

Trippeltrap Content Management System

Trippeltrap Content Management System Handleiding Trippeltrap Content Management System versie 2.4 Aanmelden Voordat u de tekst op uw webpagina kunt aanpassen, moet u zich eerst aanmelden. Bovenaan de pagina vindt u een link naar het intranet.

Nadere informatie

Simulink. Deel1. Figuur 1 Model van het zonnepaneel in Simulink.

Simulink. Deel1. Figuur 1 Model van het zonnepaneel in Simulink. Simulink Deel1 In dit deel van het ontwerp simuleren we het gedrag van onze zonnepanneel bij weerstanden tussen 10 Ohm en 100 Ohm. Een beeld van hoe het model in Simulink is opgesteld is in figuur 1 opgenomen.

Nadere informatie

Cover Page. The handle holds various files of this Leiden University dissertation.

Cover Page. The handle   holds various files of this Leiden University dissertation. Cover Page The handle http://hdl.handle.net/1887/21763 holds various files of this Leiden University dissertation. Author: Fortes, Wagner Rodrigues Title: Error bounds for discrete tomography Issue Date:

Nadere informatie

TENTAMEN WISKUNDIGE BEELDVERWERKINGSTECHNIEKEN

TENTAMEN WISKUNDIGE BEELDVERWERKINGSTECHNIEKEN TENTAMEN WISKUNDIGE BEELDVERWERKINGSTECHNIEKEN Vakcode: 8D. Datum: Donderdag 8 juli 4. Tijd: 14. 17. uur. Plaats: MA 1.44/1.46 Lees dit vóórdat je begint! Maak iedere opgave op een apart vel. Schrijf je

Nadere informatie

Informatica: C# WPO 13

Informatica: C# WPO 13 Informatica: C# WPO 13 1. Inhoud Bestanden uitlezen, bestanden schrijven en data toevoegen aan een bestand, csv-bestanden 2. Oefeningen Demo 1: Notepad Demo 2: Read CSV-file Demo 3: Write CSV-file A: Plot

Nadere informatie

mailgroep photoshop Copyright

mailgroep photoshop Copyright http://www.photoshopessentials.com/photo-effects/window-blinds/ Schaduw maken met zonneblinden In deze les leer je licht en schaduw doorheen een soort zonneblinden maken. Dit is de startafbeelding waarmee

Nadere informatie

Een Panoramafoto maken Twee of meerdere foto s aan elkaar plakken.

Een Panoramafoto maken Twee of meerdere foto s aan elkaar plakken. Workshop 10 Micdigital Deel 1. Een Panoramafoto maken Twee of meerdere foto s aan elkaar plakken. In deze workshop gaan we twee foto s aan elkaar plakken en de helderheid aanpassen. Soms wil je van een

Nadere informatie

De grafiek van een lineair verband is altijd een rechte lijn.

De grafiek van een lineair verband is altijd een rechte lijn. 2. Verbanden Verbanden Als er tussen twee variabelen x en y een verband bestaat kunnen we dat op meerdere manieren vastleggen: door een vergelijking, door een grafiek of door een tabel. Stel dat het verband

Nadere informatie

Samenstelling van een mooie omslag met toepassen pengereedschap.

Samenstelling van een mooie omslag met toepassen pengereedschap. http://www.freepsd.com/2009/02/25/a-letter-from-florence/#more-536 Samenstelling van een mooie omslag met toepassen pengereedschap. Vooraleer je begint, bekijk de video s bij bovenstaande link, daar kan

Nadere informatie

TMC Winterschool 2016 Workshop LumenRT

TMC Winterschool 2016 Workshop LumenRT TMC Winterschool 2016 Workshop LumenRT Mark Stals Gemeente Eindhoven Louis van Amerongen Witteveen+Bos Christiaan Post - Sweco 2 Workshop LumenRT Inhoud Workshop LumenRT... 2 Inleiding... 2 MicroStation...

Nadere informatie

1. Collage Creator. In dit hoofdstuk leert u:

1. Collage Creator. In dit hoofdstuk leert u: 17 1. Collage Creator Met het programma ArcSoft Collage Creator kunt u uw eigen fotocollages maken van uw favoriete foto's. Knippen, schuiven en tekst toevoegen is heel eenvoudig in dit gebruiksvriendelijke

Nadere informatie

Opgaven bij het vormen van ruimte: van Poincaré tot Perelman

Opgaven bij het vormen van ruimte: van Poincaré tot Perelman Opgaven bij het vormen van ruimte: van Poincaré tot Perelman Roland van der Veen Inleiding Deze reeks opgaven is bedoeld voor de werkcolleges van de vakantiecursus Wiskunde in Wording, Augustus 2013. 1

Nadere informatie

Mailgroep photoshop. Copyright. Polaroid Effect video les. Nodig : model man; model vrouw; polaroid; touw

Mailgroep photoshop. Copyright. Polaroid Effect video les.   Nodig : model man; model vrouw; polaroid; touw https://www.youtube.com/watch?v=08mvwnchx28 Polaroid Effect video les Nodig : model man; model vrouw; polaroid; touw Open afbeelding met man ; achtergrond verwijderen; Snelle selectie van de man; laagmasker

Nadere informatie

Excel afdrukken Afdrukken in Excel. Afdrukbereik, afbeeldingen, kantlijnen e.d.

Excel afdrukken Afdrukken in Excel. Afdrukbereik, afbeeldingen, kantlijnen e.d. Excel afdrukken Afdrukken in Excel. Afdrukbereik, afbeeldingen, kantlijnen e.d. Peter Franke 2-2-2014 Inhoud Excel Les 07 Afdrukken... 3 Marges [ Kantlijnen ]... 3 Afdrukstand.... 4 Afdrukbereik... 4 Afdrukken

Nadere informatie

GEOGEBRA 4. R. Van Nieuwenhuyze. Hoofdlector wiskunde, lerarenopleiding HUB, Brussel. Auteur Van Basis tot Limiet. roger.van.nieuwenhuyze@skynet.

GEOGEBRA 4. R. Van Nieuwenhuyze. Hoofdlector wiskunde, lerarenopleiding HUB, Brussel. Auteur Van Basis tot Limiet. roger.van.nieuwenhuyze@skynet. ? GEOGEBRA 4 R. Van Nieuwenhuyze Hoofdlector wiskunde, lerarenopleiding HUB, Brussel. Auteur Van Basis tot Limiet. roger.van.nieuwenhuyze@skynet.be Roger Van Nieuwenhuyze GeoGebra 4 Pagina 1 1. Schermen

Nadere informatie

Objectgeoriënteerd Programmeren: WPO 1

Objectgeoriënteerd Programmeren: WPO 1 Objectgeoriënteerd Programmeren: WPO 1 1. Inhoud Opfrissing syntax, programmeermethodes, datatypes, functies/procedures, tekenen in C#. Herhaling Informatica 1 ste bachelor. 2. Oefeningen Demo 1: Volume

Nadere informatie

( ) Hoofdstuk 4 Verloop van functies. 4.1 De grafiek van ( ) 4.1.1 Spiegelen t.o.v. de x-as, y-as en de oorsprong

( ) Hoofdstuk 4 Verloop van functies. 4.1 De grafiek van ( ) 4.1.1 Spiegelen t.o.v. de x-as, y-as en de oorsprong Hoofdstuk 4 Verloop van functies Met DERIVE is het mogelijk om tal van eigenschappen van functies experimenteel te ontdekken. In een eerste paragraaf onderzoeken we het verband tussen de grafieken van

Nadere informatie

Sprookjesboek.

Sprookjesboek. http://photoshoptutorials.ws/photoshop-tutorials/photo-manipulation/make-a-story-book-come-tolife-in-photoshop.html Sprookjesboek Nodige foto s: hout ; oranje zonsondergang ; achtergrond ; gras ; lange

Nadere informatie