Anton Lopyrev - Stippler ponderat Voronoi
Anton Lopyrev - ianuarie 2010
Declinare de responsabilitate
Majoritatea imaginilor utilizate pentru testarea acestei misiuni care sunt afișate pe această pagină au fost extrase din domeniul public. Cu toate acestea, dacă vă rezervați drepturi pentru oricare dintre imagini și doriți să le dau jos, vă rugăm să ne anunțați prin e-mail: anton at lopyrev dot com. Voi încerca să vă răspund cererii cât mai repede posibil. Îmi cer scuze în avans pentru utilizarea neautorizată a oricărui material protejat prin drepturi de autor.
Dacă sunteți interesat să obțineți codul sursă, îl puteți lua aici.
1.0 Conținut
2.0 Introducere
Aceasta este o înregistrare pentru misiunea 1 a cursului de redare non-fotorealistă CS 791 pe care am urmat-o în iarna anului 2010. Vedeți specificațiile complete ale sarcinii aici.
În rezumat, misiunea a implicat implementarea unui algoritm de bază de stippling din lucrarea lui Adrian Secord Weighted Voronoi Stippling. Stippling este o tehnică de simulare a diferitelor grade de umbrire și ton folosind un număr de puncte mici. Punctele pot varia în mărime, culoare și formă. Punctarea ponderată a Voronoi utilizează diagrame cetoreale Voronoi și o variație ponderată a metodei iterative Lloyd pentru a distribui punctele în funcție de tonul imaginii.
Implementarea algoritmului meu utilizează o tehnică de eșantionare de importanță interesantă pentru a plasa setul inițial de capse. De asemenea, implică plasarea imaginii sursă la o rezoluție mai mare și un calcul eficient al centroizilor pentru a obține rezultate mai bune într-un timp mai scurt. Ambele tehnici sunt descrise în lucrarea originală.
3.0 Instrumente utilizate
4.0 Detalii de implementare
4.1 Interfața utilizatorului
Pentru ca implementarea mea să fie mai utilizabilă, am ales să proiectez o interfață de utilizator simplă pentru programul meu în loc să îl fac un instrument bazat pe linia de comandă pură. Acest lucru m-a ajutat, de asemenea, să vizualizez iterațiile algoritmului Lloyd pe măsură ce mergeau și, astfel, depanarea oricăror probleme a fost destul de nedureroasă. Interfața de bază a utilizatorului este prezentată în imaginea de mai jos:

După cum puteți vedea, interfața permite utilizatorului să deschidă un fișier nou (Fișier -> Deschidere), să aleagă un număr adecvat de stipples și să ruleze stippler-ul. Odată ce algoritmii concluzionează, utilizatorul poate salva rezultatul într-un fișier SVG (Fișier -> Salvare).
Există, de asemenea, 3 opțiuni suplimentare pe care utilizatorul le poate specifica:
- Afișați regiunile voronoi: această opțiune permite utilizatorului să vadă regiunile Voronoi din jurul punctelor în timp ce algoritmul rulează.
- Utilizați dimensiuni constante de puncte: această opțiune permite utilizatorului să schimbe dimensiunea punctelor de la constantă la una în funcție de intensitatea culorii. Citiți mai multe despre secțiunea 6.2.
- Folosiți eșantionarea importanței: această opțiune poate fi activată înainte ca stippler-ul să fie aplicat imaginii sursă. Permite importanța eșantionării, care este discutată în detaliu în secțiunea 6.1.
- Utilizați puncte de culoare: această opțiune permite utilizatorului să schimbe culoarea punctelor de la negru la una în funcție de intensitatea culorii. Citiți mai multe despre secțiunea 6.3.
4.2 Tehnica inițială de eșantionare
4.3 Rezoluția calculului Voronoi
Pentru a reduce efectele erorii relative a localizărilor centrului calculat, am folosit tehnica de placare menționată în lucrare. Am împărțit imaginea sursă în 16 plăci și apoi am redat fiecare placă la rezoluția maximă a imaginii, crescând astfel rezoluția virtuală a diagramei Voronoi de 16 ori.
Acest lucru a ajutat la reprezentarea tonurilor și a gradientelor mai întunecate mult mai bine, în special pentru imaginile cu peste 5000 de puncte.
4.4 Calcul eficient al Centroidului
5.0 Rezultate
Toate rezultatele au fost redate pe laptopul meu (2,53 Ghz Intel Core 2 Duo), deci timpul nu este foarte impresionant.