• Non ci sono risultati.

Risultati, considerazioni qualitative e sviluppi futur

5.5 Sviluppi futur

Il progetto presentato risponde in maniera più che soddisfacente al problema trattato. Lo sviluppo delle tecniche utilizzate riesce a fornire un discreto sistema di creazione di bassorilievi a partire da delle semplici immagini, attraverso un editor che rimane, in ogni caso, migliorabile. Il primo miglioramento in ordine di importanza è la possibilità di utilizzare una tassellazione non uniforme per il bassorilievo. Attualmente, infatti, l’editor utilizza una suddivisione uniforme dello del piano su cui viene costruita la mesh, alterando solamente la direzione  che può essere più o meno rialzata rispetto al piano originario. L’utilizzo di una tasselazione non uniforme potrebbe ottimizzare sia dal lato visivo, concentrando poligoni di piccole dimensioni nelle zone di maggior dettaglio, che dal lato delle performance, eliminando poligoni là dove è presente una superficie piana.

119 L’utilizzo di una tassellazione non uniforme è strettamente legata alla possibilità di usare il geometry shader del linguaggio GLSL, purtroppo non ancora supportato nella versione stabile di XVR. Con la nuova release di XVR, comunque, sarà possibile sfruttare anche questa tecnica, e migliorare ulteriormente l’editor.

La height map attualmente viene calcolata con una serie di operazioni matematiche elementari in modo sequenziale. Tra le operazioni presenti in questa pipeline, la più onerosa in termini di calcolo è la modifica delle altezze in base alla selezione di bordi, a seconda della quantità di punti che compongono il bordo. Questi bordi, ad ogni elaborazione, vengono trattati tutti insieme per modifica la heigh map come desiderato. Una naturale soluzione per migliorare le prestazioni potrebbe essere suddividere le operazioni ad ogni selezione di bordo, ossia, quando viene selezionato un bordo, applicare la modifica direttamente alla height map, utilizzando una struttura dati apposita e applicando i risultati delle modifiche alla pipeline di elaborazione. Una sì fatta modifica però renderebbe difficoltoso rimuovere bordi selezionati in precedenza, e soprattutto precluderebbe la possibilità di modificare la forma di un bordo già creato. Una maggiore importanza potrebbe avere la qualità dell’elaborazione, e quindi la possibilità di modificare bordi già selezionati nelle modifiche precedenti.

Questa scelta non preclude necessariamente un miglioramento delle prestazioni della pipeline di elaborazione. Tra le operazioni meramente sequenziali, come si è già visto, quelle con un’incidenza maggiore sono relative all’elaborazione dei dati ricavati dalla selezione dei bordi.

120 Escludendo il calcolo una tantum e trattando di operazioni d’algebra lineare, si può ipotizzare la possibilità di delegare il calcolo alla GPU, ottenendo una parallelizzazione del processo di elaborazione con la tecnica chiamata GPGPU (General-Purpose computing on Graphics Processing Units). Le GPU, infatti, negli ultimi anni sono diventati dei veri e propri processori programmabili attraverso linguaggi simili al C. Una delle principali architetture di schede video programmabili parallele è CUDATM (Compute Unified Device Architecture), per le schede grafiche di Nvidia [29]. Di fatto, le GPU elaborano in modo indipendente sequenze di dati, creando una sorta di data-parall e ottimizzando i tempi di elaborazione. Una tecnica di questo tipo ha di fatto solo alcune limitazioni:

• il trasferimento di dati dalla memoria principale alla memoria della GPU prima dell’elaborazione e viceversa dopo l’elaborazione comporta un aumento della latenza e un calo delle performance;

• le schede grafiche compatibili con CUDATM sono soltanto quelle prodotte da Nvidia19;

• i formati double precision binary floating point non sono supportati secondo lo standard IEEE20.

Per maggiori dettagli sulle architetture parallele vedi [30].

Se la seconda e terza limitazione sono di natura strutturale dovuta all’hardware e si possono risolvere rispettivamente usando framework

19 http://developer.nvidia.com/cuda-gpus

20 IEEE std 754TM – 2008 Standard for Floating-Point Arithmetic,

121 studiati per diverse piattaforme per la programmazione GPGPU (come OpenCL21, che comunque rimane compatibile con alcune schede) e limitandosi ad usare numeri con formato single precision floating point ottenendo comunque una buona approssimazione. Per ovviare alla prima limitazione si può prevedere l’utilizzo di queste tecniche solo dopo una stima delle prestazioni, che euristicamente potrebbe essere data dal numero di punti selezionati dai contorni ed, eventualmente, dalla risoluzione dell’immagine di partenza.

L’utilizzo di tecniche di GPGPU possono migliorare di fatto le prestazioni della pipeline di elaborazione e rendere migliore e più immediata l’interattività del sistema.

La natura di editor del progetto, infine, rende auspicabili miglioramenti dell’interfaccia utente attualmente funzionale ma elementare, così da fornire un aspetto sempre più user-friendly e personalizzabile, con particolare attenzione alla possibilità di effettuare più operazioni brevi in più step rispetto che lunghe operazioni in step singolo, al fine di garantire l’interattività dell’utente con il sistema.

21 http://www.khronos.org/opencl/

122

Bibliografia e Paper Reference

[1] R. Szeliski, “Computer Vision: Algorithms and Applications”, Springer 2011.

[2] P. Paolini, N. Di Blas, F. Alonzo, “ITC per i beni culturali: esempi di applicazioni”, Mondo digitale, N. 3, settembre 2005.

[3] S. Kr. Singh, D. S. Chauhan, M. Vatsa, R. Singh, “A Robust Skin Color Based Face Detection Algorithm”, Tamkang Journal of Science and Engineering, Vol. 6, N. 4, pp. 227-234, 2003.

[4] P. Viola, M. Jones, “Robust Real-time Object Detection”, Second International Workshop on Statistical and Computational Theories of Vision-Modeling, Learning, Computing and Sampling. Vancouver, 2001. [5] Y. Hu, D Jiang, L. Zhang and H. Zhang, “Automatic 3D Reconstruction for Face Recognition”, Sixth IEEE International Conference on Automatic Face and Gesture Recognition, IEEE 2004. [6] Y. Guan, “Automatic 3D Face Reconstruction based on Single 2D Image”, International Conference on Multimedia and Ubiquitous Engineering, IEEE 2007.

[7] R. Fooprateepsiri, W. Kurutach and S. Duangphasuk, “2D-to-3D Integrated Face Reconstruction for Face Recognition”, Proceedings of the 9th international conference on Communications and information technologies, IEEE 2009.

[8] B. K. P. Horn, “Shape from Shading: A Method for Obtaining the Shape of a Smooth Opaque Object from One View”, PhD thesis, MIT, 1970.

123 [9] Ruo Zhang, Ping-Sing Tsai, James Edwin Cryer e Mubarak Shah, “Shape from Shading: A Survey”, Pattern Analysis and Machine Intelligence, Vol. 21, N. 8, pp: 690-706, IEEE 1999.

[10] D. Terzopoulos, “The computation of visible-surface representation”, IEEE Pattern Analysis and Machine Intelligence, Vol. 10, N. 4, pp: 417-438, 1988.

[11] R. T. Franktot e R. Chellappa, “A Method for enforcing integrability in shape from shading”, IEEE Pattern Analysis and Machine Intelligence, Vol. 10, N. 4, pp: 439-451, 1988.

[12] P. Kovesi, “Shapelets Correlated with Surface Normals Produce Surfaces”, International Conference on Computer Vision (ICCV05), pp: 994-1001, 2005.

[13] A. Refrieger, “Shapelets: A method for image Analysis”, Mon. Not. R. Astron. Soc., 2001.

[14] T. Wu, C. Tang, M. S. Brown, H. Shum, “ShapePalettes: Interactive Normal Transfer via Sketching”, ACM SIGGRAPH 07 papers, 2007.

[15] T. Wu, J. Sun, C. Tang and H. Shum, “Interactive Normal Reconstruction from a Single Image”, ACM SIGGRAPH 08 papers, 2008.

[16] Y. Gingold e D. Zorin, “Shading-Based Surface Editing”, ACM Transaction on Graphics (TOG), Vol. 27, N. 3, 2008.

[17] C. Poynton, “Digital video and HDTV algorithms and interfaces”, Morgan Kaufmann, 2003.

124 [18] H. G. Barrow e J. M. Tanenbaum, “Interpreting Line Drawing as Three-Dimensional Surfaces”, Artificial Intelligence Center, Vol. 17, N. 1-3, pp: 75-116, 1981.

[19] I. Sobel e G. Feldman, “A 3x3 Isotropic Gradient Operator for image Processing”, presentato allo Stanford Artificial Project – non pubblicato ma spesso citato, 1968.

[20] H. Scharr, “Optimal Operators in Digital image Processing”, PhD thesis, Uni. Heidelberg, 2000.

[21] J. Canny, “A Computational Approach to Edge Detection”, IEEE Pattern Analysis and Machine Intelligence, Vol. 8, N. 6, pp. 679-698, 1986.

[22] A. Gray, “Modern Differential Geometry of Curves and Surfaces with Mathematica, 2nd ed.”, in Osculating Circles to Planes Curves, CRC Press, 1997.

[23] D. Salomon, “Curves and Surfaces for Computer Graphics”, Springer, 2006.

[24] T. W. Sederberg, “Computer Aided Geometric Design”, Brigham Young University - Course Notes, 2011.

[25] Mark Segal e Kurt Akele, “The OpenGL® Graphics System: A Specification”, Vers. 4.2, 2011.

[26] J. Kessenich, D. Baldwin e R. Rost, “The OpenGL® Shading Language”, Vers. 4.10, 2010.

[27] A. Troelsen, “Pro C# 2010 and the .NET 4 Platform 5th ed.”, Apress

125 [28] P. Cignoni, C. Rocchini e R. Scopigno, “Metro: measuring error on simplified surfaces”, Computer Graphics Forum, Vol. 17, N. 2, pp. 167- 174, Blackwell Publishers, 1998.

[29] J. Sanders e E. Kandrot, “CUDA by Example: An Introduction to General-Purpose GPU Programming”, Addison-Wesley, 2010.

126

Indice delle Figure

Figura 1: Modellazione poligonale ... 16

Figura 2: Maschera composta da lati elastici ... 21

Figura 3: Esempio di ritratto non realistico (Pablo Picasso, Donna con cappello verde, 1939) ... 22

Figura 4: Modello Lambertiano ... 24

Figura 5: I diversi canali di colore ... 25

Figura 6: Ricostruzione della forma con selezione manuale dei bordi con metodo di Kovesi ... 29

Figura 7: Pipeline del calcolo nell'approccio di Wu, Sun, Tang e Shum [15]. ... 30

Figura 8: Autoritratto di Van Gogh in scala di grigio. ... 35

Figura 9: Fernando Botero, Monna Lisa all’età di 12 anni, 1960. ... 41

Figura 10: Tangenti e Normali. ... 44

Figura 11: Cerchio osculatore di un’ellisse... 44

Figura 12: Cerchi osculatori di una retta. ... 46

Figura 13: Cerchio osculatore di una retta normale a una curva F(x,y) nel punto P, passante per due punti di cui uno il punto P. ... 47

Figura 14:Calcolo dell'ordinata di F(x,y) sfruttando il cerchio osculatore. ... 48

Figura 15: I due punti del cerchio osculatore che risolvono il sistema. . 49

Figura 16: Calcolo delle ordinate per tutta la curva. ... 50

Figura 17: Tipi di variazione dell'altezza di un piano. ... 52

127

Figura 19: Pipeline GLSL semplificata. ... 64

Figura 20: .Net framework nella versione 4.0 ... 67

Figura 21: Relazione tra CLR, CTS, CLS e Base Class Library... 68

Figura 22: XVR loop. ... 71

Figura 23: L'editor di bassorilievi. ... 78

Figura 24: Ambiente di lavoro ... 79

Figura 25: Tipi di selezione delle aree. ... 81

Figura 26: Immagine coi bordi fortemente selezionati. ... 82

Figura 27: Stile del contorno selezionato. ... 83

Figura 28: Modifica con lo Shapelet applicata a un ritratto. ... 84

Figura 29: Suddivisione della mesh in poligoni. ... 85

Figura 30: Anteprime dei bassorilievi. ... 86

Figura 31: Fase di preelaborazione. ... 89

Figura 32: La fase di pronto. ... 90

Figura 33: La fase di elaborazione. ... 93

Figura 34: Protocollo di comunicazione all'avvio del sistema. ... 100

Figura 35: Comandi per la modifica delle impostazioni di visualizzazione. ... 101

Figura 36: Richieste per l'esportazione. ... 102

Figura 37: Grafici delle prestazioni delle varie fasi.. ... 111

Figura 38: Comparazione delle prestazioni per pixel. ... 111

Figura 39: La mesh originale forma1. ... 113

128

Indice delle Tabelle

Tabella 1: Esempi di normal map. 42

Tabella 2: Confronti di normal map. 42

Tabella 3: Configurazione della Shapelet. 57

Tabella 4: Esempio di file .AAM. 77

Tabella 5: Prestazioni. 110

Tabella 6: Dati Omogenei dei tempi di servizio. 112 Tabella 7: Dati Omogenei per fasi di elaborazione. 112

Documenti correlati