UNIVERSITÀ DEGLI STUDI DI CASSINO SCUOLA DI DOTTORATO IN INGEGNERIA DIPARTIMENTO DI AUTOMAZIONE, ELETTROMAGNETISMO, INGEGNERIA DELL’INFORMAZIONE E MATEMATICA INDUSTRIALE Definizione e Valutazione di Algoritmi per la Decomposizione di Curve Digitali Rossella Patraccone [email protected] In Partial Fulfillment of the Requirements for the Degree of PHILOSOPHIAE DOCTOR in Electrical and Information Engineering Novembre 2007 TUTOR Prof. Francesco Tortorella COORDINATOR Prof. Giovanni Busatto UNIVERSITÀ DEGLI STUDI DI CASSINO SCUOLA DI DOTTORATO IN INGEGNERIA Date: Novembre 2007 Author: Rossella Patraccone Title: Definizione e Valutazione di Algoritmi per la Decomposizione di Curve Digitali Department: Automazione, Elettromagnetismo, Ingegneria dell’Informazione e Matematica Industriale Degree: Ph.D. Permission is herewith granted to Univertità degli Studi di Cassino to circulate and to have copied for non-commercial purposes, at its discretion, the above title upon the request of individuals or institutions. Firma dell’Autore THE AUTHOR RESERVES OTHER PUBLICATION RIGHTS, AND NEITHER THE THESIS NOR EXTENSIVE EXTRACTS FROM IT MAY BE PRINTED OR OTHERWISE REPRODUCED WITHOUT THE AUTHOR’S WRITTEN PERMISSION. THE AUTHOR ATTESTS THAT PERMISSION HAS BEEN OBTAINED FOR THE USE OF ANY COPYRIGHTED MATERIAL APPEARING IN THIS THESIS (OTHER THAN BRIEF EXCERPTS REQUIRING ONLY PROPER ACKNOWLEDGEMENT IN SCHOLARLY WRITING) AND THAT ALL SUCH USE IS CLEARLY ACKNOWLEDGED. Alla mia famiglia Ringraziamenti Questa è forse la parte più difficile di tutto il lavoro, poichè nel fare queste cose si corre sempre il rischio di dimenticare qualcuno, ma spero che non sia questo il caso. Vorrei ringraziare tutte le persone che mi sono state vicine in questi anni e che mi hanno dato molto concettualmente, professionalmente e interiormente, attraverso consigli, riflessioni, materiale, condivisione di esperienze. Il ringraziamento maggiore va al mio supervisore: Francesco Tortorella che con la sua disponibilità ed i suoi preziosi consigli ha reso possibile la preparazione di tutto il lavoro di tesi. Vorrei inoltre ringraziare tutta la mia famiglia per il loro sostegno e per il loro incoraggiamento. Un grazie particolare va ai miei nipotini “Luca” ed “Alessio”, il cui sorriso ha sempre illuminato le mie giornate più buie. Per ultimo, e sicuramente non per importanza vorrei rivolgere un ringraziamento particolare a Gianluca che con estrema pazienza ha sopportato i miei sbalzi di umore e le mie paranoie quando, sotto stress, non avevo altra valvola di sfogo che lui. Grazie per aver sempre riposto in me immensa fiducia. Non posso dimenticare poi il gruppo LIT, con cui ho trascorso “piacevoli” giornate di lavoro. A tutti voi un grazie di cuore. vii Sommario Gli esseri umani, ed anche altre specie animali, hanno sviluppato, nel corso della evoluzione, sofisticate architetture per interpretare e riconoscere “morfologie” nei dati acquisiti attraverso i loro organi di senso (Jain et al., 2000). Essi hanno imparato a riconoscere i “rumori”, gli “odori”, le “forme”, le ”scritture”. Inizialmente tale processo è stato originato dalla lotta alla sopravvivenza ed in seguito dallo sviluppo di comportamenti intelligenti (es. la scrittura). Oggi diamo per scontato le abilità umane nel riconoscere gli oggetti più consueti, ma le cose cambiamo quando proviamo ad insegnare ad una macchina a fare lo stesso. Nonostante cinquanta anni di ricerche, il progetto di una macchina di questo tipo di uso generale resta un obiettivo lontano. Il presente lavoro di tesi rientra nel campo del “Pattern Recognition” (riconoscimento di forme) ed ha l’obiettivo di fornire dei metodi di descrizione di immagini digitali, al fine di facilitare il successivo passo di riconoscimento delle stesse. Lo scopo primario del nostro studio, non è infatti, la ricostruzione perfetta di una immagine digitale, bensı̀ quello di descrivere adeguatamente la stessa. Il processo di decomposizione di un’immagine consiste nell’individuare delle caratteristiche descrittive significative da poter utilizzare nel successivo passo di riconoscimento. Il nostro lavoro cerca, appunto, di definire e validare algoritmi di decomposizione di curve digitali, verificandone la validità e la robustezza al variare della tipologia di curva digitale utilizzata. La tesi è stata cosı̀ articolata: • Capitolo 1: in questo capitolo si inquadra il contesto generale in cui si sviluppa il presente lavoro di tesi, in particolare si dà una descrizione generale dei passi che portano al riconoscimento di immagini digitali. Particolare attenzione è riservata alla descrizione delle metodologie utilizzate nel processo di decomposizione di curve. • Capitolo 2: dopo aver inquadrato il contesto applicativo, si espone, con maggiore dettaglio, la fase di descrizione di una immagine digitale. In particolare si descrive accuratamente la fase di estrazione di caratteristiche salienti, utili nel successivo passo di riconoscimento di una immagine digitale. ix • Capitolo 3: si introduce il concetto di primitiva strutturale, se ne descrivono le varie tipologie e si dà una giustificazione sulla scelta di una di esse, rispetto alle altre disponibili. In particolare si descrivono gli strumenti utilizzati per individuare tali primitive strutturali. • Capitolo 4: dopo aver scelto la tipologia di descrittori da utilizzare si presentano gli algoritmi di decomposizione, basati su valutazione dell’errore locale sviluppati per la rappresentazione dell’immagine originale, in termini di primitive strutturali. Si effettua, inoltre una comparazione tra le varie tecniche individuate. • Capitolo 5: in questo capitolo si introduce un metodo di decomposizione basato su programmazione dinamica, che lavora su valutazione dell’errore globale commesso nella decomposizione, consentendo di lavorare senza la definizione di nessun vincolo. • Capitolo 6: si da una descrizione di dettaglio dei passi condotti per la definizione delle curve di prova e della sperimentazione. A conclusione è fatta una comparazione tra le prestazioni ottenute dai vari algoritmi al variare della tipologia di curva utilizzata. Indice Ringraziamenti vii Sommario ix Elenco delle figure xv Elenco delle tabelle xxi Elenco degli algoritmi xxiii 1 Introduzione al Pattern Recognition 1 1.1 Campi di applicazione . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.2 Sistema di Pattern Recognition . . . . . . . . . . . . . . . . . . . . 5 1.3 Approccio statistico e strutturale-sintattico . . . . . . . . . . . . . 6 1.3.1 Statistical pattern recognition . . . . . . . . . . . . . . . . . 7 1.3.2 Structural pattern recognition . . . . . . . . . . . . . . . . . 9 1.4 Scelta della tipologia si approccio: Strutturale statistico o sintattico 13 2 Le fasi della descrizione 15 2.1 Acquisizione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 2.2 Filtraggio del rumore e sogliatura . . . . . . . . . . . . . . . . . . . 17 2.3 Thinning o assottigliamento dell’immagine . . . . . . . . . . . . . . 18 2.4 Pruning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 2.5 Labelling dello scheletro . . . . . . . . . . . . . . . . . . . . . . . . 19 2.6 Approssimazione poligonale . . . . . . . . . . . . . . . . . . . . . . 20 xi INDICE 3 Il processo di decomposizione 23 3.1 La decomposizione . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 3.2 Scelta della primitiva strutturale . . . . . . . . . . . . . . . . . . . 25 3.3 Rappresentzione nel piano trasformato (L − α) . . . . . . . . . . . 27 3.4 Scelta di una metrica . . . . . . . . . . . . . . . . . . . . . . . . . . 31 3.4.1 Metrica in L2 (Least Squares Approximation) . . . . . . . . 34 3.4.2 Metrica in L∞ (Uniform Approximation) . . . . . . . . . . 36 3.4.3 Metodo Least Median of Squares - LMS . . . . . . . . . . . 38 3.4.4 Confronto tra le diverse metriche . . . . . . . . . . . . . . . 41 Fitting ed accettazione . . . . . . . . . . . . . . . . . . . . . . . . . 43 3.5 4 La decomposizione in archi di cerchio 47 4.1 Algoritmo di “Merge” . . . . . . . . . . . . . . . . . . . . . . . . . 49 4.2 Algoritmo di “Split” . . . . . . . . . . . . . . . . . . . . . . . . . . 50 4.3 Algoritmo di “Split and Merge” . . . . . . . . . . . . . . . . . . 53 4.4 Considerazioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 5 Decomposizione basata su Programmazione Dinamica 57 5.1 Programmazione dinamica . . . . . . . . . . . . . . . . . . . . . . . 58 5.2 Formulazione del problema . . . . . . . . . . . . . . . . . . . . . . 59 5.3 Descrizione dell’algoritmo di Decomposizione . . . . . . . . . . . . 65 5.3.1 Studio della curva di errore e determinazione del valore di M ottimo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 5.3.2 Individuazione del punto di ginocchio: calcolo di M ottimo 75 5.3.3 Un caso particolare: decomposizione di un poligono regolare ad N lati . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 5.4 Descrizione dell’algoritmo DpDecomp con M dinamico . . . . . . . 78 5.5 Complessità computazionale dell’algoritmo DpDecomp . . . . . . . 80 5.5.1 Complessità computazionale con M assegnato . . . . . . . 80 5.5.2 Complessità computazionale con M calcolato dinamicamente 81 5.6 Considerazioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xii 84 INDICE 6 Valutazione degli algoritmi e conclusioni 87 6.1 Definizione del Set di curve di prova . . . . . . . . . . . . . . . . . 88 6.2 Performance degli algoritmi . . . . . . . . . . . . . . . . . . . . . . 90 6.2.1 Performance degli algoritmi in assenza di rumore . . . . . . 91 6.2.2 Performance degli algoritmi in presenza di rumore . . . . . 98 6.3 Caratterizzazione dell’algoritmo DpDecomp . . . . . . . . . . . . . 103 6.4 Conclusioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 A Costruzione del Set di curve di prova (“Test Set 2 ”) 109 A.1 Fast Circle Drawing . . . . . . . . . . . . . . . . . . . . . . . . . . 110 A.2 Fast Ellipse Drawing . . . . . . . . . . . . . . . . . . . . . . . . . . 112 A.3 Generazione del Set di immagini di prova . . . . . . . . . . . . . . 114 A.3.1 Immagine Test 7 . . . . . . . . . . . . . . . . . . . . . . . . 114 A.3.2 Immagine Test 8 . . . . . . . . . . . . . . . . . . . . . . . . 114 A.3.3 Immagine Test 9 . . . . . . . . . . . . . . . . . . . . . . . . 115 A.3.4 Immagine Test 10 . . . . . . . . . . . . . . . . . . . . . . . 115 A.3.5 Immagine Test 11 . . . . . . . . . . . . . . . . . . . . . . . 116 A.3.6 Immagine Test 12 . . . . . . . . . . . . . . . . . . . . . . . 116 B Rappresentazione in archi di cerchio 117 B.1 Visualizzazione degli archi di cerchio . . . . . . . . . . . . . . . . . 117 B.1.1 Calcolo dei parametri per la costruzione degli archi di cerchio 118 B.1.2 Rappresentazione degli archi di cerchio nel piano di riferimento cartesiano . . . . . . . . . . . . . . . . . . . . . . . . 120 Bibliografia 123 xiii INDICE xiv Elenco delle figure 1.1 1.2 1.3 1.4 1.5 1.6 2.1 2.2 2.3 2.4 3.1 3.2 3.3 3.4 3.5 3.6 Schema a blocchi di un sistema di Pattern Recognition per il conoscimento di immagini digitalizzate. . . . . . . . . . . . . . Mapping dallo spazio dei patterns a quello dei significati. . . . Rappresentazione delle features. . . . . . . . . . . . . . . . . . . Esempio di Pattern Recognition di tipo statistico. . . . . . . . . Esempio di grammatica della lingua inglese. . . . . . . . . . . . Attributed Relational Graph (ARG). . . . . . . . . . . . . . . . ri. . . . . . . . . . . . Esempio di descrizione della lettera “A” in termini di primitive strutturali semplici: il carattere è rappresentato in termini di tre “features”. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Immagine “raster ” di un carattere stampato, contenuto all’interno di un testo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Esempio di bitmap di un carattere stampato, ottenuta dalla rappresentazione “raster ” dello stesso. . . . . . . . . . . . . . . . . . Scheletro di una immagine di un carattere, ottenuto attraverso la fase di scheletrizzazione e/o “thinning ”. . . . . . . . . . . . . . . Decomposizione del carattere “R” in termini di primitive strutturali semplici: passaggio da una rappresentazione in termini di componenti del primo ordine ad una in termini di componenti del secondo ordine. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Confronto tra primitive strutturali del secondo e del primo ordine. Trasformazione della rappresentazione di una poligonale nel piano (x, y), ad una rappresentazione della stessa nel piano (l, α). . . . . Rappresentazioni notevoli: rappresentazione nel piano (L, α) di un poligono regolare a cinque lati e di una circonferenza. . . . . . . . Distanza tra forme nel piano (L, α). . . . . . . . . . . . . . . . . . Confronto tra metriche: rappresentazione delle rette approssimanti un insieme di osservazioni in assenza ed in presenza di errori di posizione delle stesse dovuti a fonti di rumore. . . . . . . . . . . . . xv 5 6 8 9 11 12 16 17 18 19 24 26 28 29 33 42 ELENCO DELLE FIGURE 3.7 3.8 4.1 5.1 5.2 5.3 5.4 5.5 5.6 5.7 5.8 Rappresentazione di una poligonale e dell’arco di cerchio approssimante nel piano (l, α). . . . . . . . . . . . . . . . . . . . . . . . . . 43 Rappresentazione di una poligonale e delle sue decomposizioni al variare di k. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 Poligonale nel piano (x, y) e relativa decomposizione in archi di cerchio e segmenti di retta. La figura (a) mostra la poligonale del carattere S e la sua rappresentazione nel paino (L, α); La figura (b) mostra la decomposizione dello stesso e le rette approssimanti nel paino (L, α). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 Grafo a livelli composto da N = 5 stadi: determinazione del minimo percorso che collega lo stato iniziale “O”, con lo stato di destinazione “D”; percorso ottimo: O − 11 − 22 − 33 − D. . . . . . . . 59 (a) Rappresentazione nel piano (x, y) di una poligonale e degli archi di cerchio approssimanti; (b) rappresentazione nel piano (L, α) della poligonale di figura (a) e degli archi di cerchio approssimanti. . . . 61 Raffigurazione di aclune fasi della decomposizione di una poligonale costituita N=25 segmenti in M=3 primitive strutturali. (a) H(P1:13 , 2)+h(P14:25 ); (b) H(P1:14 , 2)+h(P15:25 ); (c) H(P1:15 , 2)+ h(P16:25 ); (d ) H(P1:16 , 2) + h(P17:25 ). . . . . . . . . . . . . . . . . 65 Calcolo dell’errore commesso nella decomposizione della Poligonale P1:N , costituita da N segmenti consecutivi in M primitive strutturali ΓM 1:N . E tabella contenente i contributi di errore; E(N, M ) = H(P1:N , M ) errore minimo commesso nella decomposizione. . . . . 67 Calcolo dell’errore commesso nella decomposizione della Poligonale P1:N , costituita da N segmenti consecutivi in M = N primitive strutturali ΓN 1:N . E tabella contenente i contributi di errore; E(N, N ) = H(P1:N , N ) errore minimo commesso nella decomposizione. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 Dynamic Programming Decomposition Operating Characteristic. Andamento della curva di errore E(N, M ) in funzione del numero M degli archi di cerchio considerati, con M = 1, . . . , N . La curva decresce al crescere delle primitive strutturali considerate. . . 70 Scelta del punto di ottimo preferibile secondo i tre criteri. In questa figura k = 2 e Z è rappresentata dalla zona grigia. . . . . . . . . . 73 Rappresentazione della DPDOC in funzione di M ed individuazione di alcuni punti notevoli. . . . . . . . . . . . . . . . . . . . . . 73 xvi ELENCO DELLE FIGURE 5.9 Andamento della curva di errore E(N, M ) in funzione di M. (a) una piccola riduzione del numero degli archi di cerchio della decomposizione genera un notevole aumento dell’errore di approssimazione; (b) una piccola riduzione dell’errore di approssimazione comporta un notevole aumento del numero degli archi di cerchio M. . . . . . 75 5.10 Curva di errore e retta congiungente i due estremi della stessa. Sull’asse X si riporta il numero M delle primitive e sull’asse Y si riporta l’errore commesso nella decomposizione, al crescere di M , fino ad M = N . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 5.11 Rappresentazione grafica della determinazione del punto di ginocchio della curva di errore. . . . . . . . . . . . . . . . . . . . . . . . 76 5.12 Andamento della curva di errore E(N, M ) in funzione del numero di primitive utilizzato per vari poligoni regolari con rappresentazione in scala lineare. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 5.13 Andamento della curva di errore E(N, M ) in funzione del numero di primitive utilizzato per vari poligoni regolari con rappresentazione in scala logaritmica. . . . . . . . . . . . . . . . . . . . . . . . . . . 78 6.1 6.2 6.3 Set 1 - Primo Set di curve di prova utilizzate nella sperimentazione. (a) curva costituita da due semicerchi e da due punti di cuspide; (b) curva con tre semicerchi, due punti di cuspide più pronunciati ed un punto meno spigoloso; (c) curva costituita da quatto semicerchi, inglobati in un unico cerchio a raggio maggiore; (d) curva costituita da quattro semicerchi “Testa di Moro”; (e) rappresentazione poligonale di una foglia Leaf-Shaped ; (f) “Cockhead ”, curva complessa composta da segmenti di retta, cerchi ed archi di cerchio. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 Decomposizione dell’immagine test 1, secondo i quattro criteri di decomposizione (Merge, Split, Split & Merge, DpDecomp) e secondo i tre criteri di approssimazione (L2 , L∞ , LM S). (a) Decomposizione con Split, Split & Merge, DpDecomp, con metrica L2 , L∞ ed LM S; (b) Decomposizione con Merge e metrica L∞ . . . . . . . 91 Decomposizione dell’immagine test 2, secondo i quattro criteri di decomposizione ed i tre criteri di approssimazione. (a) Merge e DpDecomp con metrica L2 ed L∞ ; Split, Split & Merge, con metrica L2 ; (b) Split e metrica L∞ ; (c) Split & Merge e metrica L∞ ; (d) Merge e metrica LM S; (e) Split, Split & Merge e metrica LM S; (f ) DpDecomp e metrica LM S. . . . . . . . . . . . . . . . . . . . . 92 xvii ELENCO DELLE FIGURE 6.4 6.5 6.6 6.7 6.8 6.9 6.10 6.11 6.12 6.13 6.14 Decomposizione dell’immagine test 3, secondo i quattro criteri di decomposizione ed i tre criteri di approssimazione. (a) Merge e DpDecomp con metriche L2 , L∞ ed LM S; Split & Merge con metrica L2 ; (b) Split e metrica L∞ ; (c) Split & Merge e metrica L∞ ; (d) Split e Split & Merge e metrica LM S. . . . . . . . . . . . . . . Decomposizione dell’immagine test 4. (a) Merge con metrica L2 ; (b) Merge e metrica L∞ ; (c) Merge e metrica LM S; (d) Split e Split & Merge e metrica L2 ; (e) Split con metrica LM S; (f ) Split & Merge con metrica LM S. . . . . . . . . . . . . . . . . . . . . . . Decomposizione dell’immagine test 4, secondo il criterio DpDecomp ed i tre criteri di approssimazione. (a) DpDecomp con metrica L2 ed L∞ ; (b) DpDecomp con metrica LM S. . . . . . . . . . . . . Decomposizione dell’immagine test 5, secondo i criteri di decomposizione ed i tre criteri di approssimazione. (a) Merge con metrica L2 ; (b) Merge con metrica LM S; (c) Split & Merge con metrica L2 ; (d) Split & Merge con metrica LM S; (e) DpDecomp con metrica L2 ; (f ) DpDecomp con metrica LM S. . . . . . . . . . . . Decomposizione dell’immagine test 6, secondo i criteri di decomposizione ed i metodi di approssimazione. (a) Split & Merge con metrica L2 ; (b) DpDecomp con metrica L2; (c) Split & Merge con metrica LM S; (d) DpDecomp con metrica LM S. . . . . . . . . . Decomposizione dell’immagine test 1 affetta da rumore, con tasso del 100%. (a) Split & Merge con metrica L2 , L∞ ed LM S; (b) DpDecomp con metrica L2 , L∞ ed LM S. . . . . . . . . . . . . . . Immagine test 4 affetta da rumore, con tasso del 50% e del 100%. (a) Split & Merge con metrica L2 ; (b) Split & Merge con metrica L∞ ; (c) Split & Merge con metrica LM S; (d) DpDecomp con metrica L2 , L∞ ed LM S; (e) Split & Merge con metrica L2 ; (f ) DpDecomp con metrica L2 . . . . . . . . . . . . . . . . . . . . . . . Immagine test 5 affetta da rumore, con tasso del 40%. (a) Split & Merge con metrica L2 ; (b) Split & Merge con metrica L∞ ; (c) Split & Merge con metrica LM S; (d) DpDecomp con metrica L2 ; (e) DpDecomp con metrica L∞ ; (f ) DpDecomp con metrica LM S. Test Set 2 - Secondo Set di curve utilizzate nella fase di caratterizzazione dell’algoritmo “DpDecomp”. (a) test 7 topolino; (b) test 8 topolino; (c) test 9 5 Cerchi; (d) test 10 Cerchio&Ellissi; (e) test 11 Cerchio&Ellissi; (f) test 12 3 Cerchi. . . . . . . . . . . . . . Decomposizione con algoritmo DpDecomp e metrica L2 . (a) immagine test 7 (b) immagine test 8. . . . . . . . . . . . . . . . . . Decomposizione con algoritmo DpDecomp e metrica L2 . (a) immagine test 9 ; (b) immagine test 12. . . . . . . . . . . . . . . . . xviii 93 94 95 96 97 100 101 102 103 104 104 ELENCO DELLE FIGURE 6.15 Decomposizione con algoritmo DpDecomp e metrica L2 . (a) immagine test 10 ; (b) immagine test 11. . . . . . . . . . . . . . . . 105 B.1 Arco di cerchio approssimante un tratto Pi:j di Poligonale costituito da tre segmenti. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 xix ELENCO DELLE FIGURE xx Elenco delle tabelle 1.1 1.2 Applicazioni del Pattern Recognition. . . . . . . . . . . . . . . . . . Approcci e modelli per i sistemi di Pattern Recognition. . . . . . . xxi 4 7 ELENCO DELLE TABELLE xxii Lista degli Algoritmi 1 2 3 4 5 6 7 8 The One-Point Exchange Algorithm . . . . . . . . . . . . . . . . . 38 Algoritmo di Merge . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 Algoritmo di Split . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 Algoritmo di Split and Merge . . . . . . . . . . . . . . . . . . . . . 54 Algoritmo di Decomposizione basato su Programmazione Dinamica 66 Algoritmo DpDecomp con M dinamico . . . . . . . . . . . . . . . . 79 Plotcircle - Realizzazione di cerchi nel piano digitale . . . . . . . . 111 PlotEllipse - Realizzazione di ellissi nel piano digitale . . . . . . . . 113 xxiii LISTA DEGLI ALGORITMI xxiv Capitolo 1 Introduzione al Pattern Recognition Gli esseri umani e le specie animali, nel corso dell’evoluzione hanno sviluppato notevoli attitudini, che gli hanno permesso di imparare a riconoscere: forme, suoni, odori, etc. Distinguere i “rumori” dei predatori, riconoscere gli amici ed i nemici, . . . , riconoscere la scrittura, etc., sono processi che vengono svolti in massima parte a livello subcoscente. Gli studiosi, nel corso degli hanni hanno impiegato notevoli sforzi nella ricerca di tecnologie che gli permettessero di creare una macchina che avesse le stesse capacità. Notevoli ricerche sono state condotte in ambito tecnologico per creare una macchina in grado di riconoscere particolari configurazioni in maniera automatica. “Pattern Recognition can be defined as the scientific discipline that studies theories and methods for designing machines that are able to recognise patterns in noisy data . . . . . . . . . Pattern Recognition has an “engineering” nature, as its final goal is the design of machines” (Duin et al., 2002). Il Pattern Recognition (“riconoscimento di forme”) è lo studio su come le macchine possano osservare l’ambiente, imparare a distinguere patterns di interesse dalle osservazioni acquisite in precedenza e classificarli in maniera opportuna (Jain et al., 2000). Ma che cosa si intende esattamente per “Pattern”?. Watanable (Watanable, 1985) afferma che: un “pattern” è l’opposto del caos; è una entità, vagamente definita alla quale può essere attribuito un nome. Esempi di pattern possono essere: l’immagine di una impronta digitale, una parola scritta in corsivo, l’immagine di un volto umano, oppure un segnale acustico. Dunque il Pattern Recognition implica, dato un determinato oggetto, la sua identificazione in base alle conoscenze relative ad un modello cui ricondurlo (Pavlidis, 1980). 1 CAPITOLO 1. Introduzione al Pattern Recognition Occorre fare una distinzione netta tra processi di descrizione, classificazione, riconoscimento ed interpretazione. Tali concetti sono difficili da separare e sono attuati progressivamente in modo inconscio nella mente umana. Essi, tuttavia presentano delle differenze, ed in particolare gli possono essere assegnate le seguenti definizioni: • Descrizione: individuare, all’interno di una forma un insieme di primitive descrittive in grado di rappresentarla adeguadamente, in modo da facilitare il successivo passo di classificazione (es. descrivere la lettera “P ” come composta da due primitive strutturali); • Classificazione: assegnazione di una “forma” (“pattern”) incognita ad una classe (es. classificare le varie “lettere” in un testo); • Riconoscimento: confronto di un oggetto, che può essere composto da più “pattern”, con un modello predefinito (es. riconoscere una “parola” dopo aver classificato le lettere che la compongono; • Interpretazione: analisi volta ad evidenziare gli aspetti semantici dei dati di ingresso (ossia a dargli un “significato”, anche legato alla specifica applicazione). Ad es. interpretare un testo, dopo averne riconosciuto tutte le parole, e decidere che tratta di “economia” e non di “sport”. Dato un pattern, il suo riconoscimento (detto anche classificazione) può essere principalmente effettuato in due modi (Watanable, 1985): 1. supervisionato, in cui il pattern in input viene identificato come membro di una classe tra quelle predefinite, ovvero viene classificato in maniera supervisionata avendo l’utente o il progettista definito a priori le classi di interesse; 2. non supervisionato, in cui il pattern in input viene assegnato ad una classe sconosciuta a priori, ovvero i pattern vengono raggruppati nei cosiddetti cluster (tecniche di clustering). Il problema del pattern recognition quindi viene posto nella forma di classificazione o identificazione delle categorie di appartenenza, dove le classi o categorie possono essere sia definite dal progettista del sistema (nei metodi supervisionati), sia apprese dalle similarità tra i pattern (nei metodi non supervisionati). 1.1 Campi di applicazione I campi di applicazione del “Pattern Recognition” sono svariati e toccano diverse branche della tecnologia. Si può andare dalla gestione di un processo indu2 1.1 Campi di applicazione striale, all’ambito medico, al riconoscimento visivo e sonoro. In particolar modo, il riconoscimento di forme pu essere impiegato: • nel campo delle telecomunicazioni : per individuare i contorni dei diagrammi interferometrici prodotti da alcuni radar, allo scopo di ricavare informazioni sulla conformazione del terreno; • nel campo biomedico: per interpretare le immagini prodotte da diverse apparecchiature di diagnosi, allo scopo di localizzare meglio alcune zone di tali immagini, facilitando in questo modo la dignosi medica; • nell’elaborazione di testi : realizzazione di sistemi di conversione automatica di docuemnti su supporto cartaceo; riconoscimento di caratteri manoscritti; • in biometrics: identificazione personale basata su vari attributi fisici, quali viso, impronta digitale, etc. • nella sicurezza delle reti di calcolatori : rilevazione di attacchi intrusivi su sistemi informatici grazie allo studio del traffico di rete (Esposito et al., 2005). I sistemi di pattern recognition creano, nuovi scenari applicativi sia a livello accademico che industriale. Si pensi, per esempio, ai vantaggi per un processo industriale che, impiegando il riconoscimento automatico di oggetti, può beneficiare di un controllo qualità automatizzato. Sempre nell’ambito industriale, l’impiego di algoritmi di riconoscimento automatico, porta ad arricchire le funzionalità dei robot impiegati, come ad esempio la possibilità di muoversi in determinati ambienti riconoscendo automaticamente gli ostacoli. Già da questi primi esempi è chiaro come l’uso di tecniche di riconoscimento automatico possa notevolmente migliorare le attuali applicazioni tecnologiche in diversi campi, dal settore scientifico a quello sociale ed industriale. Di seguito (tabella 1.1) si riporta una sintesi dei principali domini applicativi dei sistemi di riconoscimento automatico evidenziando anche le classi di oggetti/entità coinvolte nei suddetti processi. Il rapido sviluppo della potenza di calcolo ha permesso l’elaborazione di grandi quantità di informazioni in tempi rapidi, facilitando l’uso di diversi ed alaborati metodi di analisi e di classificazione di dati. Allo stesso tempo, la crescita delle dimensioni dei database e l’esigenza di maggiori performance (velocità, accuratezza, costi, . . . ) hanno portato all’aumento della richiesta di sistemi automatici di pattern recognition. Tuttavia, in cinquanta anni di ricerca si è arrivati alla conclusione che non esiste un unico approccio “ottimale” e “generale” alla classificazione, ma esistono molti metodi che possono essere utilizzati, e la scelta di integrarli è la migliore da perseguire. Se il riconoscimento di forme “meccanizzato” è, dunque possibile, dipende da come noi lo definiamo. 3 CAPITOLO 1. Introduzione al Pattern Recognition Dominio Applicazioni Pattern Classi Analisi di documenti Ricerca su internet e Semantic Web Documenti testuali / corpus di documenti digitali o digitalizzati Categorie semantiche (esempio, affari, sport, scienza, ecc. Analisi di immagini di documenti Strumento di supporto per i diversamente abili, digitalizzazione automatica di documenti Immagini di documenti (esempio, acquisire da scanner Riconoscimento dei caratteri (OCR), parole, regioni di testo Automazione striale Verifica delle schede dei circuiti, verifica del software Immagini all’infrarosso o spettroscopiche, e moduli software) Rilevamento di componenti hardware e software difettosi Data Mining Ricerca di pattern significativi in insiemi di dati / documenti Punti nello spazio multidimensionale / vettori multidimensionali Gruppi omogenei e ben separati (cluster) Bioinformatica Analisi DNA Sequenze proteine / Tipi di geni / proteine Information Retrieval su basi dati multimediali Ricerca su internet o in reti aziendali di immagini ed audio / video Video clip ed immagini Generi video, tipi di immagini o tipologie di inquadrature (ed. nello sport: goal, rigore, fuorigioco, ecc.) Riconoscimento BioMetrico Identificazione personale attraverso rilevazione dati biometrici Immagini del volto, dell’iride, dell’impronta digitale Gestione controllata accessi Riconoscimento del parlato Inserimento dati per persone diversamente abili, interfaccia audio per l’uso di telefonia Onde sonore della voce Parole pronunciate, suoni modulati Sensor Data Fusion Riconoscimento della persona e della posizione geografica attraverso diversi sensori Informazioni provenienti da sensori (esempio, accesso mediante RFID identificazione a radio frequenza) Posizione, risorse disponibili, contesto dell’utente Computer Network Detezione di intrusioni informatiche Log di connessione Rilevazione di intrusioni indu- sequenze DNA Tabella 1.1: Applicazioni del Pattern Recognition. 4 1.2 Sistema di Pattern Recognition 1.2 Sistema di Pattern Recognition La progettazione di un sistema di “pattern recognition”, per il riconoscimento di immagini digitalizzate può essere scomposto in più fasi distinte (acquisizione, pre-elaborazione e normalizzazione, rappresentazione, decisione e classificazione), come riportato nella seguente figura 1.1. Figura 1.1: Schema a blocchi di un sistema di Pattern Recognition per il riconoscimento di immagini digitalizzate. Una immagine digitale può essere interpretata come una funzione bidimensionale f : R × R → R il cui valore ne rappresenta l’intensità luminosa. Il blocco di “acquisizione” è composto di tutte quelle fasi che portano da una immagine ad una sua rappresentazione sotto forma di matrice numerica. Tale blocco comprende i passi di campionamento e di quantizzazione in livelli di grigio, necessari per la sua discretizzazione nello spazio e nell’ampiezza. L’insieme dei patterns di interesse, è, infatti rappresentato da uno spazio Sx , generalmente di tipo continuo, e per ottenerne una rappresentazione informatica occorre effettuarne una discretizzazione come mostrato nella seguente figura 1.2. Il blocco di “preprocessing” permette, attraverso una serie di elaborazioni, di rappresentare l’immagine originale in una maniera più adatta ad essere trattata nelle successive fasi di elaborazione. Attraverso il blocco di estrazione delle caratteristiche (“features”) si ottiene una descrizione tramite primitive strutturali dell’immagine originale. In questo modo si riesce a concentrare l’informazione in pochi dati, ottenendo un maggiore potere discriminante ed una diminuzione dei dati utilizzati. Il blocco di “classificazione” effettua il confronto tra la descrizione ottenuta a valle delle precedenti fasi con un insieme di modelli possibili (presi come riferimento), in modo da poter giungere all’attribuzione della componente in esame, come appartenente ad una delle classi possibili. 5 CAPITOLO 1. Introduzione al Pattern Recognition Figura 1.2: Mapping dallo spazio dei patterns a quello dei significati. Come si può facilmente intuire il blocco di estrazione delle componenti descrittive (“features”) rappresenta il cuore dell’intero sistema (Ullman, 1973), in quanto una buona descrizione dell’immagine permette una più semplice classificazione della stessa. 1.3 Approccio statistico e strutturale-sintattico L’obiettivo di un sistema di riconoscimento automatico per l’analisi di immagini è fornire una descrizione, plausibile di una scena del mondo reale in tempi utili a prendere una decisione. Le immagini permeano il nostro mondo percettivosperimentale, spesso sono confuse ed indeterminate, e la ragione di tale confusione può essere legata alla natura casuale dei dati, ai criteri di rappresentazione utilizzati, o dalla scarsa cognizione del contesto conoscitivo in cui le immagini sono prodotte. Il riconoscimento di forme comporta la capacità, da parte di chi lo esercita, di attribuire un significato ad un insieme di informazioni, che si presume abbiano un qualche tipo di organizzazione interna (una determinata struttura). La descrizione o il riconoscimento di tali forme può condurre a delle decisioni circa azioni successive da intraprendere. Per riconoscere quindi, da un lato è necessario aver fatto esperienza su di un certo numero di situazioni che si è imparato a classificare, dall’altro in presenza di un qualcosa che non sia direttamente riconducibile ad un’esperienza nota, è indispensabile fare delle ipotesi o ricevere dei suggerimenti che orientino su certe scelte piuttosto che su altre. I quattro principali approcci al pattern recognition (Jain 2000) sono: il Tem6 1.3 Approccio statistico e strutturale-sintattico plate Matching (approcci basati su modello); lo Statistical Classification (approcci con classificazione statistica); il Syntactic or Structural Matching (approcci sintattici o strutturali); il Neural Networks (approcci basati su reti neurali). Vedi tabella seguente (tabella 1.2). Approccio Rappresentazione Riconoscimento Criterio di classificazione Basato su modello (Template Matching ) Dati campionati, pixel, curve introduzione di distanze Correlazione statistica Basato su stima dell’errore di classificazione Classificazione statistica (Statistical Classification Misure o caratteristiche (Features) Funzioni discriminanti Basato su stima dell’errore di classificazione Sintattico o strutturale (Syntactic or Structural Recognition Primitive Regole, grammatiche Basato su stima dell’errore di accettazione Reti Neurali (Neural Network ) Dati campionati, pixel, Caratteristiche (Features) Funzioni sinaptiche e di reti Basato su stima dell’errore quadratico medio Tabella 1.2: Approcci e modelli per i sistemi di Pattern Recognition. L’approccio più immediato al “pattern recognition” è il “Template matching”. Il pattern da classificare è confrontato con un insieme di prototipi (templates), ognuno rappresentativo di una delle classi di interesse. La classificazione è basata su un opportuno criterio di “Best matching”, in cui si definisce una funzione F di valutazione del matching, che assume valore massimo per il miglior accoppiamento esemplare-prototipo. Tale approccio ha fornito risultati apprezzabili quando il numero delle classi non è grande, e gli esemplari appartenenti ad una stessa classe presentano una ridotta variabilità tra loro. I modelli basati su reti neurali cercano di utilizzare principi di organizzazione dei dati, come: addestramento, generalizzazione, tolleranza ai guasti e distribuzione dei dati, in una rete di grafi pesati. Approcci più sofisticati al problema sono quello statistico (di tipo parametrico o non parametrico) (Fukunaga, 1990), (Schalkoff, 1992) e quello strutturale o sintattico. Nei successivi paragrafi verrà fatta una comparazione tra l’approccio di tipo statistico e quello di tipo strutturale per evidenziarne le analogie / differenze. 1.3.1 Statistical pattern recognition Secondo l’approccio statistico, un pattern viene caratterizzato attraverso un insieme di misure eseguite su di esso (vettore delle features) e quindi rappresentato 7 CAPITOLO 1. Introduzione al Pattern Recognition da un punto in un iperspazio delle features (vedi figura 1.3). Figura 1.3: Rappresentazione delle features. Il problema della classificazione può essere ricondotto a quello di suddividere lo spazio delle features in regioni, ognuna di pertinenza di una diversa classe (approccio non parametrico). Un esemplare è assegnato ad una classe se il punto che lo rappresenta cade nella regione di pertinenza di quella classe. Ovviamente per avere una rappresentazione ottimale del problema, gli oggetti di una stessa classe devono essere “simili ” tra di loro ed il più possibile “diversi ” da quelli appartenenti alle altre classi. Alla base dell’approccio statistico, vi è, infatti, l’idea che le forme di oggetti appartenenti alla stessa classe differiscano di poco tra loro, e per poter valutare la “lontananza” tra le forme è possibile fare delle misure di loro caratteristiche. In questa sezione la parola “feature” denota un’entità che è derivata da alcune misure iniziali. Watanable, insieme ad altri studiosi ha utilizzato un metodo di valutazione che usa uno spazio detto delle configurazioni o delle misure, in cui un oggetto esaminato è descritto attraverso un opportuno vettore, detto “feature vector ” di variabili aleatorie associate ai risultati di un insieme di misure effettuate sull’oggetto stesso. Il pattern rappresentante, l’oggetto è, dunque un insieme di misure eseguite sull’immagine. L’aspetto importante, consiste nello scegliere un insieme di misure adeguato, per le quali due punti poco distanti corrispondano a due oggetti con caratteristiche molto simili. Benché lo sembri, la valutazione delle similitudini tra forme non è un problema banale ed il concetto di distanza tra forme coinvolge la variazione di molti fattori. Nell’approccio statistico ogni pattern è rappresentato in termini di d features o caratteristiche ed è visto come un punto in uno spazio d-dimensionale. L’efficacia dello spazio di rappresentazione (feature set) è determinato da quanto bene patterns provenienti da classi differenti possono essere distinti. Dato un set di patterns di prova per ogni classe, l’obiettivo è quello di stabilire dei contorni di decisione nello spazio delle features con cui separare patterns 8 1.3 Approccio statistico e strutturale-sintattico appartenenti a classi differenti. I contorni sono determinati dalla distribuzione di probabilità dei patterns appartenenti ad ogni classe (Devroye et al., 1996). Detto V il vettore delle caratteristiche e D la sua cardinalità, un pattern può essere rappresentato da un punto in uno spazio S a D dimensioni: se si dispone di un insieme sufficientemente ampio di patterns campioni appartenenti a tutte le possibili classi (training set) e per ognuno di questi è nota la classe di appartenenza, è possibile definire in S delle regioni di pertinenza delle singole classi. Detto X il vettore delle caratteristiche, ottenuto dalle misure effettuate su un pattern incognito P, è possibile calcolare la distanza: Di = |X − Ci | con i = 1, ...., n Dove le Ci sono dei vettori modello che individuano le varie classi. La regola di decisione ottimale consiste nell’assegnare il pattern alla classe i-esima se risulta verificata la seguente condizione: Di < Dj ∀j 6= i Nell’approccio di tipo statistico, il sistema di riconoscimento è realizzato mettendo insieme due fasi: una di treaning/learning ed una di classification/testing (vedi figura 1.4). Figura 1.4: Esempio di Pattern Recognition di tipo statistico. Nella modalità training si selezionano le features adeguate per rappresentare i pattern di input ed il classificatore è addestrato a partizionare lo spazio delle features. Nella modalità di classificazione il classificatore assegna i pattern ad una delle classi possibli sulla base di valutazioni di misura effettuate sulle features. 1.3.2 Structural pattern recognition Nell’analisi di configurazioni complesse una soluzione ottimale può essere quella di considerare una prospettiva gerarchica al problema (Oommen & Kashyap, 1997), (Fu, 1982), dove i pattern vengono visti come insiemi di componenti elementari. Il metodo di riconoscimento di tipo sintattico permette di semplificare la struttura del pattern (Fu, 1974). Un pattern complesso è scomposto in un insieme di 9 CAPITOLO 1. Introduzione al Pattern Recognition subpatterns più semplici, i quali a loro volta possono essere suddivisi in sottoelementi. La componente più piccola che si riesce ad individuare, all’inerno di un pattern complesso è definita “primitiva strutturale”. Le primitive strutturali che compongono un pattern complesso sono legate tra di loro da relazioni; occorre quindi, individuare delle regole che riescano a rappresentarle e che ne diano una descrizione. L’approccio strutturale, vede, infatti le figure come costituite da un insieme complesso di primitive più semplici, e le relazioni tra di esse sono definite usando delle regole sintattiche o morfologiche. Per costruire una classificazione di questo tipo, si devono possedere tutte le tecniche necessarie per il riconoscimento e l’estrazione di componenti da un oggetto. Rispetto alle features di tipo statistico, le primitive strutturali costituiscono degli oggetti di più alto livello. Nell’approccio di tipo strutturale (e/o sintattico) si dà, infatti, maggiore rilievo al problema della scelta delle features; features significative dal punto di vista percettivo, geometrico o morfologico, che rappresentano componenti di un pattern, sono ritenute più affidabili. Il principale obiettivo è di giungere a descrizioni efficaci ed efficienti. Le features estratte utilizzando l’approccio di tipo sintattico possono essere usate all’interno di vari schemi di classificazione; dal template matching ai classificatori statistici. Esse si rivelano particolarmente adatte a conseguire descrizioni dei pattern complete, evidenziando, sia le primitive di cui il pattern si compone, sia il modo in cui esse sono correlate tra loro a formare strutture più complesse. Negli anni ottanta, Fu (1982) introdusse la nozione di grammatica con attributi che unifica i conceti di pattern recognition sintattico con quello basato su classificazione statistica. L’approccio strutturale consente di descrivere un ampio insieme di pattern complessi, usando un piccolo insieme di pattern assunti a primitive, e di regole di composizione per esse. L’approccio strutturale coinvolge l’insieme di tre processi indipendenti: 1. estrazione ed identificazione delle primitive; 2. identificazione delle relazioni esistenti tra le primitive; 3. identificazione di strutture valide in termini di primitive e di regole tra di esse. Una analogia potrebbe essere fatta tra l’approccio sintattico in pattern recognition e la sintassi del linguaggio. I pattern sono visti come frasi di un linguaggio, mentre le primitive vengono rappresentate come l’alfabeto del linguaggio e le frasi quindi sono generate a partire da una grammatica per questo linguaggio. Un “pattern” deve rispettare la grammatica di una determinata classe per appartenerle. 10 1.3 Approccio statistico e strutturale-sintattico Cosı̀ un vasto insieme di patterns complessi può essere descritto con un piccolo numero di primitive e regole grammaticali. (vedi figura 1.5). Figura 1.5: Esempio di grammatica della lingua inglese. Un linguaggio può avere diversi tipi di rappresentazioni: quello che interessa, comunque, è la possibilità di risalire ad una delle sue categorie, a partire dalle componenti elementari ricavate. Nel metodo sintattico (e/o strutturale) il riconoscimento di un esemplare come appartenente ad una tra tutte le classi possibili può essere ricondotto, quindi, al riconoscimento di una frase come appartenente ad uno tra un certo numero di linguaggi definiti. Il problema si può risolvere utilizzando una grammatica per la rappresentazione del linguaggio che, tramite la composizione delle primitive, permetta la costruzione di una rappresentazione formale della configurazione iniziale. La fase di apprendimento del sistema di riconoscimento coincide con la determinazione di tale grammatica. Nell’approccio di tipo strutturale sintattico esistono diverse tecniche per individuare ed estrarre le primitive (caratteristiche) elementari che costituiscono il pattern, tuttavia la maggior parte degli studi sono stati indirizzati alle rappresentazioni derivanti dalla teoria dei grafi. In particolare sono state sviluppate rappresentazioni in termini di alberi, di grafi e di ipergrafi, che consentono di rappresentare in maniera semplice una vasta classe di relazioni. Tra le rappresentazioni di questo genere una delle più utilizzate è costituita dai grafi relazionali con attributi (A. R. G.: Attributed Relational Graphs) (Cordella et al., 2002), in cui ai nodi e agli archi di un grafo sono associate informazioni che caratterizzano rispettivamente le primitive e le relazioni esistenti tra di esse. 1.3.2.1 Rappresentazione in termini di ARG Il metodo basato sui grafici relazionali con attributi consiste nell’ottenere un insieme di prototipi generali, partendo da un set di figure ben identificato. Un grafico 11 CAPITOLO 1. Introduzione al Pattern Recognition relazionale è composto da un insieme di nodi e di archi (rami), rappresentativi delle relazioni tra due nodi. Nel caso della descrizione di figure, gli attributi dei nodi e dei rami, rappresentano rispettivamente le proprietà delle componenti primitive delle figure e le relazioni tra di esse. Quindi, data una curva originale, la sua rappresentazione mediante ARG consiste, nell’individuare le primitive strutturali che la compongono e le relazioni ritenute significative esistenti tra di esse, e nel tradurle in attributi dell’ARG. Una volta individuate le primitive e le relazioni si costruisce un grafo ai cui nodi sono associate le informazioni che caratterizzano le primitive e ai cui rami sono associate le informazioni che caratterizzano le relazioni esistenti tra le stesse. Un grafo relazionale con attributi può, quindi essere definito come una sestupla (N, E, AN , AE ,αN , αE ), dove N ed E sono rispettivamente l’insieme dei nodi e l’insieme degli archi, AN ed AE sono gli insiemi degli attributi dei nodi e degli archi, mentre αN e αE sono le funzioni che associano ad ogni nodo o ad ogni arco l’attributo corrispondente. Lo stesso tipo di nodo può essere utilizzato per rappresentare diverse parti, anche di forma diversa di uno stesso oggetto (vedi figura 1.6). Figura 1.6: Attributed Relational Graph (ARG). Il problema del riconoscimento, consiste nell’attribuire un esemplare come appartenente ad una classe. L’algoritmo di apprendimento cerca di trovare una legge di corrispondenza tra nodi ed archi di due grafi, l’uno rappresentante una descrizione dell’esemplare e l’altro la descrizione di un prototipo di una classe. Nella pratica è molto difficile stabilire una perfetta corrispondenza tra un prototipo e la rappresentazione di una figura, in quanto l’insieme delle possibili figure è praticamente illimitato, mentre quello dei prototipi è un insieme finito. Bisogna quindi definire una metrica, che consenta di valutare le similitudini tra grafi in modo da poter stabilire quale dei prototipi è più vicino all’esemplare. Il problema si può quindi risolvere ricorrendo ad una tecnica di “matching” tra grafi, tecnica ampiamente usata in pattern recognition ed in particolar modo per l’OCR. Esistono diversi tipi di algoritmi per ottenere il matching tra grafi, alcuni di tipo deterministico ed altri di tipo euristico. Per alcuni di essi si hanno dei 12 1.4 Scelta della tipologia si approccio: Strutturale statistico o sintattico tempi di elaborazione esponenziali, mentre per altri il tempo di risposta è del tipo O(N logN ). Un tempo di risposta cosı̀ conveniente è stato ottenuto realizzando un algoritmo di matching tra grafi che confronta delle loro geometrie, come: gli angoli (tra gli archi), le posizioni (espresse come coordinate (x,y)) e le lunghezze (Pavlidis et al., 1995). Metodi per ottenere delle rappresentazioni strutturali più robuste e degli algoritmi con un basso costo computazionale per il matching tra grafi sono oggetto di una continua ricerca nel settore del “pattern recognition e dell’OCR. 1.4 Scelta della tipologia si approccio: Strutturale statistico o sintattico Come già esposto nei paragrafi precedenti, il “pattern recognition”, cerca di identificare un oggetto in base alle conoscenze relative ad un modello cui ricondurre l’oggetto in esame. Storicamente i due principali approcci al riconoscimento sono quello “statistico” e quello “sintattico o strutturale”, mentre una tecnica emergente è legata alle “reti neurali ”. Si ricorda che l’approccio statistico utilizza delle tecniche di classificazione, che sono intrinsecamente statistiche, poichè i vari pattern hanno delle distribuzioni controllate da leggi probabilistiche. Per valutare la lontananza tra forme (le loro differenze) si effettuano delle misure sulle loro caratteristiche. Ogni oggetto viene quindi descritto attraverso un opportuno vettore, detto “Feature Vector ” di variabili aleatorie associate ai risultati di un insieme di misure effettuate sull’oggetto stesso. Il feature vector è rappresentato da un punto P in uno spazio ddimensionale le cui coordinate sono date dai valori assunti dalle d variabili aleatorie. Nel caso ideale, ad oggetti appartenenti alla stessa classe corrisponderanno feature vector identici, mentre a quelli appartenenti a classi diverse corrisponderanno feature vector differenti. Il processo di classificazione consiste nell’individuare la regione di appartenenza del fature vector associato al campione in esame, risolvendo eventualmente ambiguità generate dalla contemporanea appartenenza a più regioni di alcuni punti. I modelli statistici sono decisamente più potenti. Essi mettono a disposizione strumenti estremamente sofisticati per procedere alla classificazione di un pattern una volta che questo sia stato opportunamente caratterizzato per mezzo di un vettore di features adeguatamente rappresentativo. Tuttavia questo tipo di algoritmo incontra notevoli difficoltà quando i patterns sono molto complessi od il numero di classi è elevato, ovvero quando è presente una larga variabilità tra membri di una stessa classe. In questo modo si avranno sempre più punti comuni a regioni di decisione diverse, generando una notevole ambiguità. Pertanto il metodo statistico diviene inadeguato quando la variabilità degli oggetti da rappresentare ed il loro 13 CAPITOLO 1. Introduzione al Pattern Recognition numero crescono. Il metodo di riconoscimento di tipo sintattico è indicato per configurazioni complesse. Un pattern complesso può essere scomposto in un insieme di subpatterns più semplici, i quali a loro volta cono suddivisi in sottocomponenti. In tal modo ci si può avvicinare alla maniera di descrivere un oggetto di un essere umano. Il primo fondamentale vantaggio di una tale impostazione è che la ricerca di un oggetto complesso può essere ricondotto alla sensibilità percettiva degli esseri umani. Un secondo vantaggio è la possibilità di spostare il problema della modellizzazione della variabilità delle forme in ingresso a quella della variabilità dei descrittori primitivi utilizzati. Lo svantaggio è che può generare una esplosione di combinazioni da investigare per inferire dalle primitive e dalle loro relazioni la grammatica conseguente; per cui necessita di grandi insiemi di pattern per l’apprendimento e quindi grosse risorse di elaborazione dati. 14 Capitolo 2 Le fasi della descrizione In generale il processo di riconoscimento può essere scomposto in quattro fasi, come di seguito evidenziato: 1. “scanning” o “acquisizione”: localizzazione e digitalizzazione delle immagini da interpretare; solitamente questa fase è svolta da delle apparecchiature atte al prelevamento dell’immagine, tramite meccanismi che tendono ad impedire all’utente di fornire immagini distorte; 2. “preprocessing” o “preelaborazione”: rappresentazione dell’immagine digitalizzata in un formato più conveniente per le successive elaborazioni; 3. “feature extraction”: decomposizione dell’immagine in componenti primitive e descrizione in termini di caratteristiche strutturali, ritenute descrittive dell’immagine originale; 4. “classification”: confronto della descrizione, ottenuta tramite primitive semplici con descrizioni di riferimento allo scopo di attribuire l’immagine in esame ad una delle possibili classi. Il lavoro di tesi sviluppato, non si pone come obiettivo la ricostruzione perfetta di una immagine digitale (“Curve Fitting”), ma bensı̀ la descrizione della stessa in termini di componenti elementari, in modo da facilitare il successivo passo di riconoscimento. La descrizione ottenuta deve essere tale, che attraverso le primitive strutturali individuate e le relazioni esistenti tra le stesse si riesca a determinare la classe di appartenenza dell’oggetto da riconoscere, mediante il confronto con dei modelli di riferimento. Consideriamo ad esempio il carattere “A”; l’obiettivo è quello di descriverlo come la decomposizione di tre primitive strutturali e di relazioni esistenti tra le stesse, come di seguito rappresentato (vedi figura 2.1). 15 CAPITOLO 2. Le fasi della descrizione Figura 2.1: Esempio di descrizione della lettera “A” in termini di primitive strutturali semplici: il carattere è rappresentato in termini di tre “features”. Un buon metodo di descrizione deve possedere la capacità di conservare le informazioni utili per il riconoscimento dell’oggetto descritto e di filtrare le informazioni non necessarie (in particolare il rumore introdotto nel processo di acquisizione), producendo una descrizione compatta e maneggevole che rappresenti in maniera simile oggetti che differiscono per dettagli non significativi (Foggia, 1999). Il punto di partenza è una adeguata rappresentagione dell’oggetto originale, che faciliti il processo di estrazione delle “features”. In particolare si parte da una rappresentazione in termini di segmenti di retta connessi a formare una “poligonale” dell’immagine originale. La rappresentazione poligonale deve, ovviamente essere libera da ogni fonte di rumore e deve contenere le sole informazioni necessarie. Tale rappresentazione è ottenuta sottoponendo l’immagine da descrivere alle seguenti fasi: 1. acquisizione; 2. filtraggio del rumore e sogliatura; 3. thinning o assottigliamento dell’immagine; 4. lebelling dello scheletro; 5. pruning; 6. approssimazione poligonale. Per ciascuno di questi passi analizzeremo quali sono le informazioni che sono ritenute importanti e vadano preservate e quali invece sono considerate inutili o dannose ai fini della descrizione e debbano essere eliminate. 2.1 Acquisizione Il primo passo di un sistema di riconoscimento è l’acquisizione dell’immagine da trattare. Essa è condotta utilizzando particolari dispositivi (scanner, sensori, 16 2.2 Filtraggio del rumore e sogliatura etc.). Attraverso questa fase si ottiene una rappresentazione digitale dell’immagine, denominata “rappresentazione raster ”. Mediante un campionamento spaziale dell’immagine si ottiene una matrice numerica in cui ogni elemento rappresenta un pixel. La distanza (orizzontale e/o verticale) tra due pixel definisce la risoluzione alla quale l’acquisizione è stata effettuata. Nella seguente figura 2.2 si riporta un esempio di immagine relativa a un carattere stampato. Figura 2.2: Immagine “raster ” di un carattere stampato, contenuto all’interno di un testo. 2.2 Filtraggio del rumore e sogliatura Le fasi successive a quella di acquisizione lavorano su di una bitmap dell’immagine originale; questo perchè nel processo di riconoscimento non è significativo il valore esatto della luminosità di un pixel. Quindi la prima elaborazione a cui l’immagine è sottoposta è una binarizzazione, il cui scopo è di trasformare l’immagine in una matrice di bit (bitmap) in cui ciascun pixel assume il valore 0 se appartiene allo sfondo e 1 se appartiene all’immagine. Per arrivare alla bitmap occorre, quindi effettuare una operazione di sogliatura (tresholding), che attribuisca ogni pixel come appartenente allo sfondo oppure all’immagine a seconda che superi o meno una soglia predefinita (Shaoo et al., 1988). Sulla bitmap dell’immagine originale potrebbero essere presenti dei punti spuri (pixel dello sfondo con valore 1) o dei buchi (pixel dell’immagine con valore 0) causati da fonti di rumore generate durante la precedente fase di acquisizione. Per ovviare a questi inconvenienti è necessario sottoporre la rappresentazione ottenuta 17 CAPITOLO 2. Le fasi della descrizione ad una operazione di filtraggio, mediante filtri digitali. Nella seguente figura 2.3 è riportata la bitmap dell’immagine mostrata nella precedente figura 2.2. Figura 2.3: Esempio di bitmap di un carattere stampato, ottenuta dalla rappresentazione “raster ” dello stesso. 2.3 Thinning o assottigliamento dell’immagine La “bitmap” dell’immagine ottenuta a valle delle fasi di acquisizione, di filtraggio e di sogliatura contiene una grande mole di informazioni, non tutte rilevanti al fine della descrizione e del successivo riconoscimento. Per ridurre la quantità di queste informazioni è possibile effettuare una operazione di assottigliamento, in modo da passare dalla bitmap a delle linee di spessore unitario. Tale trasformazione è detta “thinning” o “scheletrizzazione”. La seguente figura 2.4 mostra il processo di assottigliamento (scheletrizzazione) della lettera “K ”. Un algoritmo di thinning ottimale deve permettere di ricostruire la struttura lineare dell’immagine senza perderne la connessione, consentendo una riduzione dei dati, senza perdita di informazioni basilari (Arcelli et al., 1981), (Arcelli & di Baja, 1985), (Duda et al., 2001). La fase di thinning si basa, infatti sull’ipotesi che lo spessore dei tratti non sia una informazione necessaria al riconoscimento dell’oggetto. Ovviamente il thinning dell’immagine deve soddisfare alcuni requisiti fondamentali (Ramer, 1972): • non deve dare origine a connessioni se la figura di partenza non era connessa; • non deve operare fusioni tra parti non connesse. 18 2.4 Pruning Figura 2.4: Scheletro di una immagine di un carattere, ottenuto attraverso la fase di scheletrizzazione e/o “thinning ”. 2.4 Pruning La fase di thinning (o assottigliamento) potrebbe produrre, in alcuni casi uno cheletro che non riflette in maniera puntuale l’andamento dell’immagine. Lo scheletro potrebbe presentare delle distorsioni. La fase di “pruning” è necessaria per depurare lo scheletro da tutte queste imperfezioni, quali per esempio eventuali rami spuri che non trovano un corrispondente nell’immagine originale. 2.5 Labelling dello scheletro L’approssimazione ottenuta a valle delle precedenti fasi presenta però ancora un fondamentale difetto per poter essere considerata un buon punto di partenza per il riconoscimento; essa è infatti ancora una curva complessa e difficilmente gestibile. Il nostro obiettivo è quello di ottenere delle linee elementari da utilizzare nella fase di descrizione. Per poter suddividere la curva (complessa) ottenuta in un insieme di linee elementari bisogna individuare dei punti notevoli, rappresentanti i punti di incrocio, al fine di poter sbrogliare lo scheletro ed ottenere la poligonale su cui effettuare il processo di descrizione. Si possono individuare cinque classi differenti per i punti appartenenti ad uno scheletro, come di seguito descritto (Tortorella, 1995), (Kong & Rosenfield, 1989): • “normal point (NP)”: è un punto il cui cerchio di raggio massino tocca i bordi dell’oggetto in due insiemi separati e continui di punti; • “branch point (BP)”: è un punto il cui cerchio di raggio massimo tocca i bordi dell’oggetto in tre o più insiemi separati e continui di punti; 19 CAPITOLO 2. Le fasi della descrizione • “end point (EP)”: è un punto il cui cerchio di raggio massimo tocca il bordo in un unico insieme continuo di punti; • “terminal point (TP)”: è un punto con la stessa definizione di un NP, con il requisito aggiuntivo di essere adiacente ad un BP; • “adjacent branch point (ABP)”: è un punto con la stessa definizione di un BP con il requisito aggiuntivo di essere vicino ad un altro BP. 2.6 Approssimazione poligonale La rappresentazione mediante scheletro, consente di ridurre notevolmente l’enorme quantità di dati contenuti nell’immagine originale. Tale rappresentazione risulta notevolmente più sintetica rispetto alla bitmap, ma è ancora poco adatta ad essere trattata all’interno di un sistema di riconoscimento. Una volta estratto lo scheletro dell’immagine occorre compiere un altro passo per sfoltire ulteriormente il suo contenuto informativo, usando degli algoritmi di approssimazione poligonale. L’obiettivo di tale approssimazione è quello di rimuovere il rumore generatosi nelle precedenti fasi, comprimere i dati, e descrivere l’immagine in maniera opportuna (es. Spline ed Archi di Cerchio), mantenendone il contenuto informativo. La scelta delle primitive da utilizzare dovrebbe permettere di rappresentare in maniera compatta i tratti che compongono la poligonale. Ad esempio la lettera “A” dovrebbe poter essere rappresentata mediante tre stratti rettilinei, mentre la lettera “B ” dovrebbe essere descritta da un tratto rettilineo e due tratti curvilinei con concavità rivolta verso sinistra. Prima di procedere alla descrizione dei passi che compongono tutto il processo di decomposizione introduciamo alcune componenti che saranno utilizzate poi nel seguito di questo lavoro. Come già detto in precedenza, il nostro punto di partenza sarà una rappresentazione poligonale dell’immagine digitale originale, in altre parole un insieme di segmenti di retta che uniscono due punti consecutivi. Definiamo tali componenti “CPL o Componenti di Primo Livello”. Da tale rappresentazione si passa, poi ad una costituita da componenti dalle più ampie capacità descrittive, che verranno descritte in seguito, e che definiamo “CSL o Componenti di secondo Livello”. Esistono numerosi algoritmi di approssimazione poligonale (Ramer, 1972), che permettono di passare dalla descrizione tramite CPL a quella in termini di CSL, classificabili in funzione della strategia di accorpamento dei punti che adottano. Nel nostro lavoro abbiamo sviluppato delle metodologie di decomposizione basate su valutazione locale dell’errore di approssimazione ed una basata su valutazione globale dello stesso, ed in particolare: 20 2.6 Approssimazione poligonale • “Merge”; • “Split”; • “Split and Merge • “Decomposizione basata su programmazione dinamica”. L’algoritmo di “merge” (Slansky et al., 1972) procede in maniera sequenziale; parte da un estremo della curva, assumendolo come primo vertice della poligonale, tenta di approssimare con un unico segmento (arco di cerchio o spline), il tratto di curva compreso tra il primo vertice ed il punto successivo. Punti consecutivi della curva vengono considerati fino a quando il criterio di approssimazione è soddisfatto. Il primo punto in corrispondenza del quale l’errore di approssimazione supera la soglia prefissata viene assunto come nuovo vertice e da esso riparte il procedimento di approssimazione, fino a quando non è stato esaminato l’ultimo punto della curva. Quando è stato raggiunto, quindi, l’altro estremo della poligonale, il procedimento di decomposizione termina. L’algoritmo di “split” considera inizialmente l’intera curva, cercando di approssimarla con un unico segmento (arco di cerchio o spline); nel caso in cui l’errore di approssimazione risulti maggiore di una soglia prefissata, la curva viene suddivisa in due parti in corrispondenza del punto che produce l’errore massimo. In tale punto si pone un nuovo vertice e si riconsidera l’approssimazione su ognuna delle parti ottenute. Il procedimento viene ripetuto fino a quando l’errore di approssimazione non risulta inferiore della soglia per tutti i tratti in cui è stata divisa la curva originale, ed essa non ha subito mutamenti nel precedente passo. L’algoritmo di “split and merge” (Pavlidis & Horowitz, 1974) combina i due algoritmi precedenti, alternando un passo di split ad uno di merge che fonde coppie di segmenti successivi generate dal precedente passo di split, ma che comunque soddisfano il criterio di approssimazione. L’implementazione dei metodi appena descritti necessita la definizione di un criterio di accettazione delle approssimazioni effettuate. Esistono numerose tecniche per la definizione del criterio di accettazione, alcune delle quali segmentano la curva nei punti di massima deviazione, altre in corrispondenza dei punti di massima curvatura, mentre altre utilizzano tecniche miste. Purtroppo esse hanno l’inconveniente di utilizzare una soglia fissa, in questo modo la descrizione dell’immagine, cambia al variare delle dimensioni e della conformazione della stessa. Alcuni algoritmi sopperiscono al fatto di avere una soglia fissa con una misura ottenuta normalizzando la stessa rispetto alla lunghezza to21 CAPITOLO 2. Le fasi della descrizione tale del tratto approssimante (Wu & Wang, 1993), il che permette di ottenere l’invarianza dalla scala della soglia. Nel presente lavoro è stata sviluppata una ulteriore tecnica di decomposizione basata su programmazione dinamica che prescinde completamente dalla definizione della soglia e che quindi può essere utilizzata su qualsiasi tipo di curva, indipendentemente dalla dimensione della stessa. Il vantaggio ulteriore che ne deriva è l’assenza di vincoli nel processo di accettazione dell’approssimazione da effettuare. 22 Capitolo 3 Il processo di decomposizione Nel “capitolo 1 ” è stata data una panoramica dei possibili campi di applicazione del “Pattern Recognition”; in particolare sono stati analizzati i metodi di approccio ed i passi fondamentali che precedono la decomposizione di una immagine digitale. Nel “capitolo 2 ” sono state, invece analizzate le fasi che portano dalla rappresentazione “raster ” dell’immagine originale a quella mediante una poligonale, ovvero un insieme contiguo di segmenti. Attraverso una serie di passi (acquisizione, filtraggio del rumore e sogliatura, thinning o assottigliamento dell’immagine, labelling dello scheletro, pruning, ed approssimazione poligonale) si è, infatti giunti ad una rappresentazione dell’immagine costituita da un insieme di segmenti contigui che formano una poligonale. L’obiettivo della decomposizione è quello di partire da questa rappresentazione e di individuare un insieme di primitive strutturali, che siano significative e che descrivano adeguatamente la curva di partenza, mantenendo il solo contenuto informativo rilevante e riducendo la rappresentazione poligonale dell’immagine originale (Kanal, 1974). L’obiettivo del presente capitolo è quello di descrivere gli strumenti utilizzati per passare dalla rappresentazione mediante poligonale dell’immagine originale alla sua descrizione mediante tali primitive strutturali semplici. 3.1 La decomposizione Il punto di partenza per il processo di descrizione e di riconoscimento è una adeguata rappresentazione dell’immagine originale, fatta in termini di segmenti di retta connessi a formare una poligonale. I dati di input per il sistema di descrizione sono, dunque delle componenti di primo livello (“CPL”). Il fine ultimo è quello di ottenere una rappresentazione di secondo livello (“RSL”), costituita da un insieme di componenti di secondo livello (“CSL”), da fornire in ingresso al sistema 23 CAPITOLO 3. Il processo di decomposizione di riconoscimento. Nel nostro caso, le CPL sono i segmenti che costituiscono la poligonale, mentre le CSL sono le primitive strutturali individuate. Partendo da una rappresentazione abbastanza fedele dell’immagine originale, fatta in termini di segmenti di retta connessi a formare una poligonale, occorre utilizzare delle primitive strutturali dalle più ampie capacità descrittive, che riassorbano l’eccessiva variabilità dei singoli elementi della poligonale. Descrivere una curva, significa individuare, all’interno di essa delle caratteristiche (primitive) salienti, che la rappresentino adeguatamente, dandone una descrizione che sia quanto più possibile unica e che soprattutto riducano la rappresentazione della curva di partenza. La rappresentazione dell’immagine originale, in termini di poligonale (componenti di primo livello) conserva una quantità di informazioni superiore a quelle realmente necessarie per il successivo passo di riconoscimento. L’identificazione di primitive di secondo livello consente di descrivere i tratti salienti di una curva, mantenendo allo stesso tempo solo la quantità di informazioni necessaria alla sua identificazione, riducendone la complessità di rappresentazione. Se consideriamo uno stesso carattere che compare più volte all’interno di un testo possiamo osservare che le rappresentazioni delle sue occorrenze, in termini di matrici di pixel sono differenti, anche se per pochi dei pixel che le compongono. Dovremmo, invece trovare una rappresentazione, che permetta di descrivere una stessa curva sempre con le stesse primitive strutturali. Ad esempio uno stesso carattere (lettera “R”) dovrebbe essere descritto sempre con le stesse primitive fondamentali (per esempio, due tratti ed un arco; vedi figura seguente). Figura 3.1: Decomposizione del carattere “R” in termini di primitive strutturali semplici: passaggio da una rappresentazione in termini di componenti del primo ordine ad una in termini di componenti del secondo ordine. 24 3.2 Scelta della primitiva strutturale Analizzando la figura 3.1 si può notare che il contenuto informativo del carattere, necessario alla fase di riconoscimento (identificazione della curva) non è cambiato. Tuttavia, la seconda rappresentazione della curva (riquadro a destra) è notevolmente semplificata rispetto alla poligonale originale. Ciò comporta che la trasformazione ottenuta non sia reversibile, ovvero non è più possibile passare dalla rappresentazione in termini di componenti di secondo livello a quella in termini di componenti di primo livello. Le informazioni, ritenute scarsamente rilevanti al fine del riconoscimento della curva sono, ad esempio quelle relative alla rumorosità del processo di scrittura e/o a quello di acquisizione e sono completamente trascurate in fase di descrizione. Partendo dalla rappresentazione poligonale dell’immagine da descrivere, si vuole indagare sui diversi algoritmi di decomposizione, al fine di valutare il loro comportamento al variare di diverse condizioni operative ed arrivare ad un compromesso tra “accurata ricostruzione” e una “adeguata tolleranza” al variare della forma in esame. 3.2 Scelta della primitiva strutturale “Visual primitive” o “primitive component” è un concetto che ha un chiaro significato nell’approccio strutturale al “pattern recognition”. Secondo questo approccio un pattern complesso può essere decomposto in semplici subpatterns, in maniera ricorsiva. Essi successivamente possono essere caratterizzati in termini di semplici componenti, chiamate “primitive” ed in termini di relazioni tra di esse, in modo da descrivere la struttura del pattern. Selezionare delle primitive strutturali è un problema complesso, che non ha una soluzione generale. Il criterio di selezione di primitive strutturali adeguate si basa sul selezionare le stesse, come elementi base del pattern, in modo che diano una rappresentazione compatta, ma adeguata dello stesso, in termini di specifiche relazioni strutturali tra loro (Rosin & West, 1989) (Ichoku et al., 1996). Nella nostra applicazione le primitive strutturali utilizzate sono delle curve del secondo ordine, e cioè degli archi di cerchio, che sono usati come descrittori elementari della curva. Se avessimo usato dei segmenti di retta come descrittori elementari la complessità della rappresentazione sarebbe stata ancora elevata e la descrizione della curva non sarebbe stata abbastanza fedele. Utilizzare degli archi di cerchio, in luogo di segmenti di retta permette il conseguimento, a parità di sinteticità della descrizione ottenuta, di una rappresentazione più fedele degli oggetti da decomporre (vedi figura 3.2). 25 CAPITOLO 3. Il processo di decomposizione Figura 3.2: Confronto tra primitive strutturali del secondo e del primo ordine. Dalla figura 3.2 si vede chiaramente che utilizzando come primitive strutturali dei segmenti di retta (curve del primo ordine) la quantità di informazione a nostra disposizione non è sufficiente a descrivere adeguatamente la curva, e la sua rappresentazione non è sufficientemente semplificata. Scegliendo al contrario delle ellissi il contenuto informativo a nostra disposizione sarebbe inferiore a quello necessario. Gli archi di cerchio sembrano, quindi essere la soluzione ottimale per i nostri scopi. Inoltre, i segmenti di linea possono essere considerati come degli archi di circonferenza con curvatura nulla. Quindi, dal punto di vista matematico, descrivere una curva con archi di cerchio e/o con segmenti di linea è equivalente (Horng & Li, 2001). Nel nostro lavoro la poligonale da descrivere, che rappresenta l’immagine in esame è decomposta in archi di cerchio di differente raggio e curvatura e segmenti di retta. Come detto precedentemente, i segmenti di retta sono considerati come casi particolari di archi di cerchio a curvatura nulla. Dato un insieme di segmenti di retta, costituenti un tratto di poligonale, essi sono sostituiti con un unico arco di cerchio solo se si ottiene una semplificazione della rappresentazione (in termini di componenti di secondo livello) e se l’errore ottenuto nell’approssimazione è inferiore ad un determinato valore (ovvero solo se sussistono determinate condizioni). L’obiettivo è quello di ottenere la minore segmentazione possibile dell’immagine originale pur mantenendo basso l’errore di approssimazione. Si trasforma, quindi una rappresentazione di primo livello (RPL), costituita da componenti di primo livello (segmento di poligonale, CPL) in una rappresentazione di secondo livello (RSL) costituita da un insieme di componenti di secondo livello (CSL), ovvero archi di cerchio. Ciascuna componente di secondo livello (arco di cerchio) deve essere scelto in modo da poter rappresentare nel miglior modo possibile segmenti di retta consecutivi, costituenti un tratto di poligonale. Deve essere mantenuto sostanzialmente basso lo scostamento tra l’arco di cerchio approssimante e l’insieme di segmenti 26 3.3 Rappresentzione nel piano trasformato (L − α) della poligonale approssimati; ovvero l’errore di approssimazione commesso. Per non generare una eccessiva segmentazione della poligonale, si cerca di rappresentarla con il minor numero possibile di componenti di secondo livello (archi di cerchio). Il primo problema da affrontare è dunque quello di approssimare, con un unico arco di circonferenza una poligonale qualsiasi, di prefissato numero di segmenti. Questo problema, di non semplice soluzione può essere opportunamente semplificato, ricorrendo ad una trasformazione del piano geometrico (x,y) nel quale si rappresenta la poligonale e l’eventuale arco approssimante. L’introduzione di un opportuno piano trasformato ci consente di ottenere una descrizione di una immagine che sia indipendente dall’orientamento e dalla posizione della stessa. La rappresentazione ottenuta è unica indipendentemente dalla disposizione della curva originale. Inoltre utilizzando una trasformazione di coordinate si riesce ad ottenere una indipendenza dalla dimensione poichè si effettua una normalizzazione rispetto alla lunghezza. Informazioni relative alla dimensione, all’orientamento e/o alla posizione di una curva sono fondamentali in fase di ricostruzione (“curve fitting”) della stessa, ma non nel caso della descrizione; quindi passando al piano trasformsto si ottiene una notevole semplificazione del problema. 3.3 Rappresentzione nel piano trasformato (L−α) In molte applicazioni nel campo scientifico, si osserva che è utile effettuare le operazioni più onerose e complicate, non nello spazio che si è assunto come riferimento, bensı̀ in un opportuno spazio trasformato dotato di convenienti proprietà che facilitano le elaborazioni, semplificando il progetto degli algoritmi da adottare e lo studio del problema in esame. Il sistema di riferimento adottato nel presente lavoro è quello cartesiano, in cui ciascuno dei due vertici del segmento che costituisce la poligonale è rappresentato da una coppia di coordinate (xi , yi ). Poichè per molte delle elaborazioni che si dovranno effettuare sulla struttura a nostra disposizione è molto oneroso lavorare con tale riferimento, si è ritenuto particolarmente utile passare da tale riferimento ad un piano trasformato (de Santo, 1989), denominato (l, α). Tale trasformazione fa corrispondere, ad ogni punto del piano cartesiano di riferimento (xi , yi ), la coppia di coordinate (li , αi ) secondo la seguente definizione: 1. si assuma un riferimento curvilineo lungo la curva; li è definito come la coordinata curvilinea del punto (xi , yi ); 2. si scelga un riferimento angolare Ra , in cui l’angolo di riferimento è quello che la tangente alla curva nell’origine del riferimento curvilineo forma con l’asse x. αi sarà, quindi definito come l’angolo che la tangente al punto 27 CAPITOLO 3. Il processo di decomposizione (xi , yi ) forma con l’origine del riferimento Ra ; αi è per convenzione positivo nel verso antiorario. Utilizzando la trasformazione nel piano (l, α) una poligonale, anche complessa è rappresentata da una funzione costante a tratti. Ogni tratto della funzione ottenuta corrisponde ad un lato della poligonale, con lunghezza pari a quella del lato; la distanza lungo le ordinate tra due tratti contigui è data dall’angolo formato tra gli stessi nel sistema cartesiano di partenza. Nella seguente figura 3.3 si riporta un esempio di trasformazione nel piano (l, α) di una poligonale composta da sei tratti. Figura 3.3: Trasformazione della rappresentazione di una poligonale nel piano (x, y), ad una rappresentazione della stessa nel piano (l, α). Dalla figura 3.3 si può osservare che l’asse delle ascisse ha come unità di misura le lunghezze, mentre quello delle ordinate è tarato in gradi. 28 3.3 Rappresentzione nel piano trasformato (L − α) Si può facilmente intuire che: 1. la trasformata di una retta nel piano (l, α) è un segmento orizzontale, essendo nullo l’angolo tra ogni segmento ed il suo precedente o il suo successore. 2. la trasformata nel piano (l, α) di una circonferenza è una retta in quanto, lungo la circonferenza l’angolo formato dalla tangente con una direzione di riferimento varia linearmente con l’ascissa curvilinea. 3. la trasformata di un poligono regolare a k lati è una funzione costante a tratti che cresce, o decresce con passo assegnato (vedi figura 3.4). Figura 3.4: Rappresentazioni notevoli: rappresentazione nel piano (L, α) di un poligono regolare a cinque lati e di una circonferenza. 29 CAPITOLO 3. Il processo di decomposizione La trasformazione dal piano cartesiano di riferimento al piano trasformato (l, α) è ottenuta mediante le seguenti due equazioni: li = p (xi+1 − xi )2 + (yi+1 − yi )2 µ xi+1 − xi yi+1 − yi αi = arctan (3.1) ¶ (3.2) Come si può notare dalla figura 3.4 la rappresentazione nel piano trasformato di una circonferenza è una retta passante per l’origine, il cui coefficiente angolare è pari all’inverso del raggio “r ” della circonferenza stessa. L’angolo sotteso tra la retta e l’asse delle ascisse è pari a: µ ¶ 1 γ = arctan r (3.3) quindi il coefficiente angolare della retta nel piano (l, α) è proprio pari a: m = tan γ = dα dl (3.4) mentre in (x,y), supponendo che α sia espresso in radianti, risulta: dl = rdα (3.5) da cui si ottiene: r= 1 m (3.6) La trasformazione dal piano cartesiano di riferimento al piano trasformato (l, α) comporta notevoli semplificazioni, sia dal punto di vista degli algoritmi da implementare sia per quanto riguarda la complessità dei calcoli da eseguire. Lavorare con delle poligonali e con delle primitive di secondo livello (archi di cerchio) equivale a lavorare, nel piano trasformato (l, α) con delle funzioni a gradino e delle rette. Nel piano trasformato, inoltre si perde ogni informazione relativa alla posizione originale, all’orientamento ed alla dimensione della poligonale nel piano (x,y). In altre parole si perde ogni informazione legata alle proprietà geometriche delle curve. 30 3.4 Scelta di una metrica Una stessa curva è sempre disegnata nello stesso modo nel piano trasformato, indipendentemente dalla sua rappresentazione originale nel piano (x, y). L’angolo formato tra segmenti contigui della poligonale diviene, infatti il riferimento lungo le ordinate e la lunghezza dei segmenti, il riferimento lungo le ascisse. In questo modo si ottiene una invarianza per rotazione e per traslazione della rappresentazione; ogni poligonale nel piano (x, y) viene rappresentata, nel piano (l, α) con una funzione a gradino con primo vertice nell’origine. La complessità della rappresentazione diminuisce poichè nel piano (l, α) si trattano curve del primo ordine, invece che curve del secondo ordine, quali sono gli archi di cerchio. Nel riferimento (x, y), le curve sono rappresentate da poligoni ed archi di circonferenza, mentre nel piano (l, α), sono funzioni a gradino e rette. Ovviamente lavorare in (l, α) non è equivalente a lavorare in (x, y). Tutto ciò rende particolarmente interessante per i nostri scopi tale trasformazione. In definitiva il problema di trovare nel piano (x, y) il numero minimo di archi di cerchio che ben approssimano la poligonale di riferimento, viene tradotto nel piano (l, α), nel trovare il minimo numero di segmenti di retta che approssimino al meglio la funzione a gradino. Ovviamente, fissata la poligonale originale, rappresentata nel piano mediante una funzione a gradino, esisteranno più archi di cerchio, ovvero più rette in (l, α) in grado di approssimarla; la scelta della migliore retta approssimante può essere effettuata soltanto quando sia stato definito un opportuno criterio per misurare la distanza tra due curve nel piano geometrico. Lo spazio metrico M deve, per definizione, essere in grado di definire una funzione D, che gode di opportune proprietà e che sia rappresentativa della distanza tra due oggetti del dominio. 3.4 Scelta di una metrica Una volta ottenuta una poligonale dell’immagine originale bisogna descrivere la stessa con delle primitive strutturali idonee. Come già detto in precedenza le primitive designate sono degli archi di cerchio e dei segmenti di retta. Nel piano trasformato il problema può essere formulato nella determinazione di un insieme di segmenti di retta che ben approssimano una funzione a gradino (e/o costante a tratti). Ovviamente questo insieme non sarà unico e la determinazione del miglior insieme possibile è legato alla valutazione della distanza tra forme. Formalizziamo, quindi il problema come segue: Data una poligonale P costituita da K punti e da N=K-1 segmenti di retta {S1 , S2 , . . . , SN }, occorre determinare un insieme di M (M ≤ N ) archi di cerchio Γ = {γ1 , γ2 , . . . , γM } che rappresenti al meglio la poligonale P. 31 CAPITOLO 3. Il processo di decomposizione La bontà dell’approssimazione effettuata può essere valutata definendo una opportuna metrica che ci consenta di valutare l’entità dell’errore commesso approssimando con uno o più archi di cerchio la poligonale P. L’idea è quella di descrivere la poligonale P con il minor numero possibile di primitive strutturali e l’introduzione di una distanza tra forme consente di valutare, tra tutti gli insiemi Γ = {γ1 , γ2 , . . . , γM }, quale sia quello che fornisce l’errore di approssimazione minore. Ovviamente il grado di approssimazione ottenuto e la rappresentazione in archi di cerchio, saranno diversi al variare della metrica adottata. Nel nostro lavoro sono state introdotte diverse tipologie di metriche, al fine di valutare la bontà della rappresentazione fornita in funzione della tipologia di curva. In particolare sono state implementate: • la metrica in L2 : che stima il minimo della somma dei residui al quadrato; L2 è lo spazio delle funzioni al quadrato sommabili; • la metrica in L∞ : che minimizza il valore assoluto dei residui; • la regressione lineare LMS (Least Median of Squares): che stima il minimo del valor mediano dei residui al quadrato. Dove per residui intendiamo la differenza puntuale tra curva approssimante e curva approssimata. Attraverso queste metriche siamo riusciti a valutare la differenza di forma tra la poligonale P e la decomposizione in archi di cerchio Γ = {γ1 , γ2 , . . . , γM }. Una volta individuata la metrica da utilizzare si deve individuare il più piccolo valore di M (cardinalità dell’insieme degli archi di cerchio) per cui risulta soddisfatta la seguente relazione: kP − Γk < Emax (3.7) dove Emax è l’errore massimo tollerato. Ovviamente l’errore è calcolato secondo la metrica prescelta. Una volta individuato un insieme Γ = {γ1 , γ2 , . . . , γM } di archi di cerchio dobbiamo valutare se essi si prestano bene ad essere sostituiti alla poligonale P originale e per fare questo occorre individuare un criterio di accettazione della approssimazione effettuata. Ciò purtroppo comporta la definizione di una soglia di errore (Emax ), con cui confrontare l’errore commesso. La soglia può essere predefinita (soglia fissa) oppure può essere determinata dinamicamente; in base alla 32 3.4 Scelta di una metrica sua tipologia il grado di approssimazione ottenuto sarà differente. L’aspetto fondamentale, dunque è la definizione di un criterio che ci consenta di valutare quando una approssimazione è accettabile e ciò comporta la necessità di effettuare una misurazione tra le curve nel piano di riferimento (x, y) in cui esse si trovano. Per ridurre la complessità di questo problema si è pensato di effettuare una trasformazione del sistema di riferimento. La trasformazione nel piano (L, α) consente di semplificare notevolmente il problema della determinazione della distanza tra forme, in quanto ci troviamo ad operare con funzioni costanti a tratti e rette (curve del primo ordine), in luogo di poligonali ed archi di cerchio (curve del secondo ordine) come avveniva nel piano di riferimento (x, y). per capire meglio come l’introduzione del cambio di riferimento ci aiuti nella trattazione di seguito ne mostriamo delle caratteristiche fondamentali. Date le proprietà del piano trasformato, la distanza in (l, α) tra la retta approssimante e la funzione approssimata dipende, qualunque sia la metrica adottata, dalla differenza ∆α(l) che esiste tra le tangenti alle due curve nel piano (x, y) in punti aventi la stessa ascissa curvilinea l (vedi figura 3.5). Figura 3.5: Distanza tra forme nel piano (L, α). Dato che l’andamento della tangente in funzione della lunghezza della curva, 33 CAPITOLO 3. Il processo di decomposizione nel piano (x, y) costituisce un buon descrittore della forma (Cordella et al., 1994), la distanza in (l, α) può essere interpretata come la differenza di forma tra le curve nel piano (x, y). Date quindi due curve nel piano (x, y), e scelto un sistema di ascisse curvilineo lungo le due curve, la differenza del modulo degli angoli formati dalle due tangenti in quel punto con un comune angolo di riferimento: ∆α(l) = |α1 (l) − r(l)| (3.8) costituisce un buon descrittore della differenza di forma esistente tra le due curve nel piano (x, y). Il problema di determinare nel piano (x, y) l’insieme di archi di cerchio che ben approssimano una determinata poligonale costituita da segmenti consecutivi può essere risolto nel piano (l, α) determinando l’insieme di rette che approssimano un insieme di tratti, costituenti la funzione costante a tratti corrispondente alla poligonale nel piano (x, y). La nostra attenzione non sarà focalizzata sull’utilizzo di una sola metrica e ciò ci consentirà di effettuare un confronto di prestazioni tra le stesse. Di seguito riportiamo la formalizzazione dei criteri utilizzati per definire le tre differenti metriche. 3.4.1 Metrica in L2 (Least Squares Approximation) Il criterio dei minimi quadrati è spesso usato per approssimare dati sperimentali tramite regressioni lineari. In realtà è adeguato per approssimare i dati con qualsiasi combinazione lineare (a coefficienti costanti) di elementi appartenenti ad una base di uno spazio di funzioni (Monegato, 1998). Secondo la metrica in L2 , che è lo spazio delle funzioni al quadrato sommabili, l’errore commesso approssimando una funzione con una retta è definito come: ||f − r||22 Zltot = (f (l) − r(l))2 dl. (3.9) 0 dove ltot rappresenta la lunghezza totale della funzione da approssimare nel piano (L − α). Nel nostro caso l’equazione precedente può essere espressa nel modo seguente: 34 3.4 Scelta di una metrica v u ltot uZ u 2 E2 = t |α1 (l) − α2 (l)| dl. (3.10) 0 Per poter quindi trovare la retta che meglio approssima la nostra funzione (a gradino) occorre applicare il criterio dei minimi quadrati, implementando una regressione lineare. Il metodo di approssimazione proposto è definito “Least Squares Approximation” (Buchanan & Turner, 1992). Definiamo f (l) come la funzione a gradino da approssimare; ed assegniamo un generico intervallo [0, ltot ], in cui tale funzione si estende. Detta: r(l) = a0 + a1 l (3.11) la retta approssimante tale funzione, occorre determinare a0 ed a1 tali che la funzione: Zltot F (a0 , a1 ) = (f (l) − a0 − a1 l)2 dl = ||f − r||22 (3.12) 0 sia minimizzata. Il problema può essere anche formulato nel modo seguente: ∂F = −2 ∂ai Zltot li (f (l) − a0 − a1 l)dl ∀i. 0 La funzione F è minimizzata quando si verifica: quazione 3.13 si ottiene la seguente: ∂F ∂ai = 0 ∀i. Riorganizzando l’e- Zltot Zltot Zltot i i+1 a0 l dl + a1 l dl = li f (l)dl 0 (3.13) 0 (3.14) 0 che può essere espressa anche in forma matriciale come: La = f. 35 (3.15) CAPITOLO 3. Il processo di decomposizione Dove: Zltot lij = li+j−2 dl; Zltot fi = li−1 f (l)dl; 0 con i = 1, . . . , 2 e j = 1, . . . , i 0 (3.16) ed a rappresenta il vettore incognito da determinare. Nel nostro caso la risoluzione del problema di minimizzazione equivale a risolvere il seguente sistema di equazioni lineari: ½ f11 a0 + f12 a1 = f1 f21 a0 + f22 a1 = f2 (3.17) ovvero: " # · ¸ · ¸ a0 f1 • = a1 f2 2 ltot 2 3 ltot 3 ltot 2 ltot 2 dove a0 ed a1 sono rispettivamente, il termine noto ed il coefficiente angolare della retta approssimante, ottenuta con il metodo dei minimi quadrati e: Zltot f1 = f (l)dl Zltot f2 = lf (l)dl. 0 3.4.2 (3.18) 0 Metrica in L∞ (Uniform Approximation) In questa sezione affrontiamo il problema della determinazione della migliore approssimazione di una funzione a gradino f, all’interno di un intervallo [0, ltot ]. Nella metrica L∞ la definizione della distanza tra due forme è data dalla seguente equazione (Buchanan & Turner, 1992): ||f − p||∞ = min ||f − p||∞ = min max |f (l) − p(l)| p∈Πn p∈Πn l∈[0,ltot ] (3.19) dove p ∈ Πn (p ∈ Πn è l’insieme dei polinomi, ed n = 1 nel nostro caso) ed ltot è la lunghezza totale della funzione a gradino lungo l’asse delle ascisse; nel nostro caso tale formula può anche essere espressa come: E∞ = max |α1 (l) − α2 (l)|. l (3.20) Per determinare la retta approssimante la funzione data, bisogna selezionare dei 36 3.4 Scelta di una metrica punti l0 < l1 < . . . < ln+1 lungo l’asse delle ascisse e determinare gli elementi di Πn che minimizzano maxi |f (li ) − p(li )|. Teorema 3.1 Il polinomio p0 ∈ Πn con funzione di errore e0 (l) = f (l) − p0 (l) è la migliore approssimazione minima di f , nell’intervallo [0, ltot ] se e soltanto se esistono n + 2 punti 0 ≤ y0 < y1 < . . . < yn+1 ≤ ltot tali che: |e0 (yi )| = ke0 k∞ (i = 0, 1, . . . , n + 1) e0 (yi+1 ) = −e0 (yi ) (i = 0, 1, . . . , n) (3.21) (3.22) L’approssimazione uniforme determinata in questo modo è, inoltre l’unica possibile. Per determinare il polinomio p(l), per cui l’errore di approssimazione è e(l) = f (l) − p(l), utilizziamo il predente teorema. In particolare deve risultare: e(li ) = f (li ) − p(li ) = (−1)i c (i = 0, 1, . . . , n + 1) (3.23) dove: p(l) = a0 + a1 l + . . . + an ln è la retta da determinare. Nel nostro caso, il problema può essere semplificato in forma matriciale come segue: a0 + a1 l0 + a2 = f0 a0 + a1 l1 − a2 = f1 (3.24) a0 + a1 l2 + a2 = f2 ovvero: 1 1 1 dove: f0 = f (l0 ); l0 l1 l2 f1 = f (l1 ); 1 a0 f0 −1 • a1 = f1 1 a2 f2 f2 = f (l2 ); L = [l0 , l1 , l2 ] = [0, ltot 2 , ltot ]; ed a è il vettore incognito da determinare, in cui a0 è il termine noto ed a1 è il coefficiente angolare della retta, mentre a2 è un termine che ci consente di determinare l’errore (c) commesso nell’approssimazione. L’algoritmo utilizzato per l’approssimazione uniforme è: “The one-point exchange algorithm”. Si procede risolvendo il precedente sistema, ricercando a0 , a1 , a2 , . . . , an , c in modo tale che l’equazione 3.23 sia soddisfatta, ovvero, che l’errore e(li ) ∀i sia alternato in segno ed uguale in modulo. Una volta trovata la retta approssimante, si cerca di migliorare l’approssimazione, sostituendo ad li l’ascissa 0 curvilinea li0 , in corrispondenza della quale e(li ) è massimo, e si ridetermina la 37 CAPITOLO 3. Il processo di decomposizione 0 retta. Il processo termina solo quando tutti gli errori e(li ), calcolati nelle diverse scisse curvilinee sono uguali in valore assoluto ed opposti in segno. Ovviamente nel nostro caso n = 1. Di seguito riportiamo in dettaglio l’algoritmo utilizzato. Algorithm 1 The One-Point Exchange Algorithm Input: 0 ≤ l0 ≤ . . . ≤ ln+1 ≤ ltot e funzione da approssimare; Output: Coefficienti dell’approssimazione polinomiale a0 , . . . , an Iterate: find y: e(y) = max |e(l)| l∈[0,ltot ] if |e(y)| − |c| > ε then if y < l0 then if e(y)e(l0 ) > 0 then l0 = y else for i = (n + 1) : −1 : 1 do li = li−1 ; l0 = y end for end if else if y ∈ [li , li+1 ] then if e(y)e(l0 ) > 0 then li = y li+1 = y end if else if y > ln+1 then if e(y)e(ln+1 ) > 0 then ln+1 = y else for i = 0 : 1 : n do li = li+1 ln+1 = y end for end if end if end if 3.4.3 Metodo Least Median of Squares - LMS Lo scopo della regressione lineare è di determinare una funzione, in grado di rappresentare un insieme di osservazioni sperimentali. Nel nostro caso abbiamo una funzione a gradino (che rappresenta la poligonale nel piano (x, y)) e dobbiamo determinare la retta (arco di cerchio) che meglio approssima tale funzione a seconda della metrica adottata. 38 3.4 Scelta di una metrica La metrica in L2 , come già detto, determina tale retta cercando di minimizzare la somma dei quadrati dei residui: ri = yi − ŷi ovvero: min θ̂ n X ri2 = i=1 n X (yi − ŷi )2 i=1 Lo stimatore prodotto in questo caso dipende fortemente dalle osservazioni; se esse si spostano dalla loro posizione originaria, a causa di fonti di rumore sovrapposto, la metrica in L2 fornisce una approssimazione diversa da quella corretta, nel tentativo di minimizzare la somma dei quadrati dei residui. Eliminando la sola componente corrotta dal rumore si ottiene, infatti la retta approssimante desiderata (attesa). Utilizzando la metrica LMS si riesce ad ovviare a questo tipo di problematica. Secondo Rousseeuw & Leroy (1987), lo stimatore LMS che ben approssima la funzione data può essere determinato procedendo come di seguito descritto: considerato un insieme S di n punti in <2 , il problema consiste nel determinare uno stimatore ϑ̂ = (ϑ̂1 , ϑ̂2 ), che ben rappresenta l’insieme delle rappresentazioni, secondo il seguente modello: ŷi = θ̂1 xi + θ̂2 + ei i = 1, . . . , n (3.25) dove (e1 , . . . , en ) rappresenta l’errore incognito, con distribuzione di probabilità N (0, σ). In altre parole, detto: ri = yi − (xi ϑ1 + ϑ2 ) l’i-esimo residuo, secondo il metodo LMS, il vettore parametrico θ = (θ1 , θ2 ) è ottenuto risolvendo il seguente problema di minimizzazione non-lineare (Mount et al., 2007): £ ¤ min median ri2 = min median (yi − xi ϑ1 − ϑ2 )2 θ̂ i ϑ i (3.26) dove ϑ1 e ϑ2 rappresentano rispettivamente il coefficiente angolare ed il termine noto della retta approssimante le osservazioni. 39 CAPITOLO 3. Il processo di decomposizione Quindi, il metodo LMS (“Least Median of Squares”) cerca di trovare la retta che meglio approssima le osservazioni (nel nostro caso una funzione a gradino), non minimizzando la somma del quadrato dei residui, bensı̀ minimizzando il valor mediano degli stessi. Secondo Hampel (1975), questo tipo di approccio fornisce uno stimatore che è molto più robusto rispetto alle osservazioni. Il metodo LMS è in un certo senso equivalente alla metrica LS (Least Squares), a meno di una maggiore robustezza rispetto al rumore sovrapposto, sempre che si mantenga a livelli bassi. Non esiste una soluzione in forma chiusa per la determinazione della migliore approssimazione di un insieme di osservazioni con il metodo LMS (Barreto & Maharry, 2006); Molti algoritmi possono essere sviluppati per determinare la retta che ben approssima un insieme di punti, minimizzando il mediano dei residui al quadrato, ma il più efficiente sembra essere il metodo LSR (Least Squares Regressor). Nel nostro lavoro, per determinare uno stimatore ϑ̂ con il metodo LSR abbiamo utilizzato un algoritmo che procede iterativamente su sottocampioni di n differenti osservazioni, nello spazio p-dimensionale; dove nel nostro caso p = 2. Detto n il numero delle osservazioni; si procede effettuano la regressione lineare, cercando di determinare la retta che passa attraverso p = 2 punti su n (per esempio f e g), e quindi risolvendo il seguente sistema lineare: ½ αf = ϑ01 lf + ϑ02 αg = ϑ01 lg + ϑ02 (3.27) di due equazioni in due incognite, dove (lf , αf ) e (lg , αf ) sono le coordinate dei punti f e g . A questo punto si calcolano i residui: ri = αi − θ10 li − θ20 tra la retta ottenuta mediante la regressione e tutti i punti che costituiscono le osservazioni. Una volta ottenuto il vettore (r12 , r22 , . . . , rn2 ) dei residui al quadrato se ne determina il valor mediano. Il processo viene ripetuto per la coppia di punti (g , h), per la coppia (f , h), e cosı̀ via per tutte le possibili coppie. Viene scelta a questo punto, la retta che origina il minore valor mediano dei residui al quadrato, ovvero che soddisfa l’equazione 3.26. Questa tipologia di approccio consente di applicare l’algoritmo anche ad un numero n elevato di punti; nel processo di regressione sono considerati tutti i possibili sottocampioni (ottenuti raggruppando p < n punti, dove p è la dimensione dello spazio). 40 3.4 Scelta di una metrica 3.4.4 Confronto tra le diverse metriche Il problema dell’approssimazione di un insieme di dati consiste nel determinare con sufficiente precisione una curva (funzione) che descriva il fenomeno a cui i dati appartengono. Lo scopo è quello di determinare l’andamento del fenomeno, anche negli intervalli fra i punti di osservazione. In questa sezione daremo una descrizione delle analogie e differenze presentate dalle tre differenti metriche adottate per determinare tali approssimazioni; in particolare ne verranno analizzate: le caratteristiche, le prestazioni e le complessità. La metrica in L2 fornisce la misura dello scostamento medio tra due curve, che viene influenzato in maniera relativa dall’andamento locale della differenza |α1 (l) − α2 (l)|, in quanto eventuali picchi esibiti da tale differenza sono pesati proporzionalmente all’intervallo di integrazione. In tale modo l’andamento della retta approssimante sarà poco influenzato dalla posizione dei singoli punti, assicurando una buona approssimazione media. Tale metrica risulta maggiormente robusta rispetto agli scarti locali, conferendo un maggiore potere discriminante tra le varie forme. La metrica in L∞ è abbastanza sensibile alla posizione dei singoli punti, in quanto è influenzata dall’andamento locale della differenza |α1 (l) − α2 (l)|. Tale metrica possiede dunque un maggiore potere discriminante rispetto alla metrica in L2 e l’approssimazione ottenuta minimizzando E∞ segue maggiormente l’andamento locale della forma, a prezzo però di una maggiore sensibilità al rumore. Il metodo LMS (Least Median of Squares) determina la retta approssimante un insieme di osservazioni minimizzando il valor mediano, consentendo di ottenere una maggiore insensibilità alla variazione di posizione di una di essa a causa di fenomeni rumorosi sovrapposti. Un fattore che influenza il potere discriminante delle diverse metriche è, infatti il rumore sovrapposto alle forme da riconoscere e il metodo LMS mostra una minore sensibilità ad esso. Tale metodo riesce a fornire un’approssimazione abbastanza fedele delle osservazioni, anche nel caso in cui uno dei punti sia spostato dalla sua posizione originale. Per capire meglio la differenza di prestazioni delle metriche utilizzate in presenza di variazioni di posizione delle singole osservazioni consideriamo la regressione di n = 5 osservazioni: (x1 , y1 ), . . . , (x5 , y5 ). La figura 3.6(a) mostra, come la metrica L2 ed L∞ approssimino in maniera accurata la sequenza di punti, come mostrato dalle rette fornite da: ŷ = θ̂1 x + θ̂2 . Tuttavia supponendo che una osservazione si sposti dalla sua posizione originaria lungo le ascisse, le figure 3.6(b) e 3.6(c) mostrano come le due approssimazioni siano sensibili a questa variazione. In particolare per quanto riguarda la metrica L2 , il residuo r1 assume un valore 41 CAPITOLO 3. Il processo di decomposizione grande e fornisce un notevole contributo alla somma: 5 X ri2 i=1 causando lo spostamento della retta di regressione. Stessa cosa dicasi per la metrica in L∞ , che valuta il valore massimo della differenza |α1 (l) − α2 (l)|. Il regressore LMS, invece, valutando il valor mediano non è influenzato dall’aumento di valore del residuo r1 , come mostrato nella seguente figura 3.6(d). Figura 3.6: Confronto tra metriche: rappresentazione delle rette approssimanti un insieme di osservazioni in assenza ed in presenza di errori di posizione delle stesse dovuti a fonti di rumore. 42 3.5 Fitting ed accettazione Per quanto riguarda la complessità computazionale dei vari algoritmi utilizzati si nota che: il miglior algoritmo conosciuto che implementi il metodo LMS ha una complessità computazionale pari ad Ω(n2 ) (Edelsbrunner & Souvaine, 1990), pari a quella del metodo ai minimi quadrati; l’approssimazione uniforme ha una complessità comutazionale pari ad Ω(n). L’algoritmo LMS possiede, quindi una maggiore robustezza rispetto al rumore sovrapposto alle osservazioni, a partità di complessità computazionale rispetto alla metrica in L2 . 3.5 Fitting ed accettazione Una volta individuate le metriche da voler adottare per valutare la distanza tra le forme, occorre determinare l’arco di cerchio che ben approssima un tratto di lunghezza k di una poligonale costituita da n segmenti. La decomposizione di una poligonale costituita da n segmenti in m archi di cerchio può essere vista, nel piano trasformato (L, α), come la scelta di m segmenti di retta che ben approssimano una funzione a gradino costituita da n tratti. Secondo il criterio di fitting va ricercato l’arco di cerchio, che meglio approssima un dato insieme di segmenti, in base alla valutazione della distanza tra forme, in funzione della metrica di riferimento. Nel piano (L, α) il calcolo della distanza tra forme si semplifica, in quanto è sufficiente determinare la differenza di ordinate tra due punti di uguale ascissa curvilinea, appartenenti rispettivamente al tratto di retta approssimante ed alla funzione a gradino da approssimare, come mostrato nella seguente figura 3.7. Figura 3.7: Rappresentazione di una poligonale e dell’arco di cerchio approssimante nel piano (l, α). 43 CAPITOLO 3. Il processo di decomposizione La parte colorata di grigio della precedente figura rappresenta lo scostamento percentuale tra retta approssimante e la rappresentazione (l, α) della poligonale. L’approccio e la complessità computazionale saranno differenti a seconda della metrica adottata. In particolare: • secondo la metrica in L2 , determinare l’arco di cerchio che meglio approssima una poligonale, equivale a trovare la retta che minimizzi l’integrale tra [0, ltot ] dei quadrati delle proiezioni dei gradini sulla retta. Si applica, infatti il criterio dei minimi quadrati, cercando di trovare l’errore: ||f − r||22 , con f ∈ [0, ltot ]; • secondo la metrica in L∞ , determinare l’arco di cerchio che meglio approssima una poligonale, equivale (Buchanan & Turner, 1992) a trovare la retta che minimizzi lo scostamento massimo (in valore assoluto) tra le ordinate dei gradini della funzione e della retta approssimante nei punti di uguale ascissa curvilinea; • secondo il metodo LMS, determinare l’arco di cerchio che meglio approssima una poligonale, equivale (Rousseeuw & Leroy, 1987) a trovare la retta che minimizzi il valor mediano dei quadrati dei residui, e cioè dello scostamento tra le ordinate dei gradini della funzione e della retta approssimante nei punti di uguale ascissa curvilinea. Determinato l’arco di cerchio che ben approssima un tratto di poligonale, bisogna controllare la bontà dell’approssimazione effettuata, valutando se esso si presta bene ad essere sostituito, ai fini della descrizione, alla parte di poligonale approssimata. Come detto nel paragrafo 2.6, per definire quando un insieme k di segmenti costituenti una poligonale formata da n tratti possa essere rappresentato da un’unico arco di cerchio occorre definire dei criteri di accettazione. Si deve definire, quindi una opportuna soglia con cui confrontare gli errori commessi considerando tale arco di cerchio come rappresentativo del tratto di poligonale che si sta tentando di approssimare. Nel paragrafo 2.6 si è visto come gli algoritmi di descrizione basati su valutazione dell’errore locale utilizzino una opportuna soglia per confrontare l’adeguatezza di una approssimazione. La soglia deve essere scelta basandosi su di un criterio di somiglianza tra curve, ed in particolare: tra poligonale da approssimare ed arco di cerchio approssimante e tra una opportuna curva, da usare come confronto e lo stesso arco di cerchio. Dal punto di vista della descrizione si può ritenere somiglianti: un poligono regolare a k lati ed un cerchio, in quanto per k che tende all’infinito un poligono regolare può essere approssimato con un cerchio. Maggiore è l’ordine k del poligono e maggiore è la somiglianza tra esso ed il cerchio. La soglia può essere quindi determinata valutando l’errore di approssimazione che si ha descrivendo un poligono regolare a k lati con un unico arco di circonferenza. 44 3.5 Fitting ed accettazione Tale soglia deve essere scelta dinamicamente, ovvero deve variare in funzione della curva che si sta considerando; la scelta di una soglia fissa rischierebbe di non essere adeguata per ogni diverso caso che si presenti. La soglia dovrebbe in qualche modo essere legata alla forma della curva che si sta considerando, ovvero al numero dei segmenti che compongono la poligonale. Per ottenere tale soglia potremmo considerare l’errore che si commetterebbe approssimando con un solo arco di cerchio una porzione di un poligono regolare a k lati, che abbia lo stesso span angolare della poligonale in esame. Aumentando il numero k dei lati del poligono l’errore di approssimazione diminuisce, poiché idealmente per un valore di k tendente all’infinito un poligono regolare a k lati corrisponderebbe ad una circonferenza, generando quindi un errore di approssimazione nullo. Di seguito (figura 3.8) si riporta la possibile decomposizione di una poligonale in funzione del valore k. Figura 3.8: Rappresentazione di una poligonale e delle sue decomposizioni al variare di k. Come si può vedere dalla figura, al diminuire dell’ordine k del poligono regolare, l’errore di approssimazione aumenta. Si deve però tener presente che nella metrica in L2 la soglia di errore dipende fortemente dalla lunghezza dei tratti che costituiscono la poligonale. Per tale motivo occorre normalizzare l’errore relativo al poligono regolare per la sua lunghezza totale, al fine di rendere la soglia dinamica indipendente dalla dimensione del poligono, e quindi della poligonale. Data una poligonale P da descrivere, composta di n segmenti, si confronta l’errore commesso approssimando con un unico arco di cerchio una porzione k di tale poligonale con una soglia dinamica ottenuta calcolando l’errore che si avrebbe 45 CAPITOLO 3. Il processo di decomposizione approssimando, con un unico arco di cerchio una porzione, costituita da k lati consecutivi di un poligono regolare, avente n lati. Se il numero k dei lati considerati è maggiore dell’ordine n del poligono regolare, si impiega l’errore relativo all’intero poligono. Questa soluzione offre il vantaggio di rendere la procedura di decomposizione più flessibile ed indipendente dalla forma della poligonale e dal numero dei lati che la compongono. Molto più complesso e poco efficiente sarebbe, invece dover trovare una soglia fissa da poter utilizzare come valore di confronto nella decomposizione di tutte le poligonali. Tale valore sarebbe, infatti difficile da determinare e rischierebbe di non essere adeguato per tutte le figure da trattare. Una volta definito il criterio di accettazione occorre descrivere gli algoritmi utilizzati per poter individuare i tratti di poligonale ai quali si intende applicare il criterio di approssimazione. Nei seguenti capitoli verranno analizzati tutti gli algoritmi di decomposizione sviluppati, partendo da quelli basati su valutazione dell’errore locale, che necessitano quindi della definizione di una soglia di confronto per valutare la bontà delle approssimazioni, fino ad arrivare ad un algoritmo di tipo dinamico che non richiede tale tipo di confronto e che quindi non impone nessun tipo di vincolo nel processo di decomposizione. 46 Capitolo 4 La decomposizione in archi di cerchio Nei precedenti capitoli è stata fatta una panoramica del contesto in cui è stato sviluppato il presente lavoro e degli obiettivi che esso si propone. In particolare ci si è focalizzati sulla definizione del concetto di primitive strutturali e della descrizione di curve. È stata introdotta una semplificazione al problema trattato, attraverso la definizione di un opportuno piano trasformato che ci ha consentito di andare a lavorare con curve più semplici (del primo ordine). In questo modo si è perso ogni riferimento geometrico, relativo alla posizione, all’orientamento e alla dimensione delle curve esaminate. È stato introdotto il concetto di “similarità” tra curve ed in particolare di distanza e sono state definite delle opportune metriche. Per poter valutare la bontà delle approssimazioni fatte, nel processo di descrizione, è stato, inoltre definito un criterio di accettazione, basato sulla definizione di una soglia dinamica, da utilizzare negli algoritmi di decomposizione basati su valutazione dell’errore di approssimazione locale. In questo capitolo focalizzeremo la nostra attenzione sulla descrizione degli algoritmi utilizzati nella fase di descrizione di curve digitali, ovvero sul passo successivo alla rappresentazione della poligonale da decomporre nel piano trasformato (L, α). Nei metodi di analisi strutturata dell’immagine, gli algoritmi di decomposizione giocano un ruolo fondamentale ai fini del loro riconoscimento e della loro descrizione. Negli anni passati sono stati proposti diversi tipi di algoritmi di decomposizione. Affinché tali metodi siano realmente applicabili a situazioni reali è necessario che essi presentino alcune caratteristiche fondamentali, quali, unicità della soluzione, ed inoltre, devono essere “size translation” e “rotation indipendent”. Un’altra caratteristica, che è ritenuta fondamentale, è la prevedibilità dell’algoritmo, in altre parole, la capacità di ottenere predefiniti comportamenti dell’algoritmo in termini di sinteticità ed errore della decomposizione richiesta. 47 CAPITOLO 4. La decomposizione in archi di cerchio I metodi implementati consentono la decomposizione di una curva, rappresentata in termini di poligonale (ovvero di segmenti retta contigui), in un insieme di archi di cerchio, in modo da soddisfare ai precedenti requisiti e da garantire, a parità di sinteticità della descrizione ottenuta, una rappresentazione più fedele della curva originale. Gli algoritmi di Decomposizione sviluppati si differenziano tra di loro in base al tipo di strategia adottata per accorpare e rappresentare con un unico arco di cerchio, segmenti consecutivi della poligonale. Alcune tecniche di descrizione scandiscono sequenzialmente la curva da descrivere, altri applicano una sorta di ricerca dicotomica, altri ancora integrano le due precedenti tecniche e possono essere realizzati degli algoritmi di tipo dinamico, che cercano di ottenere la decomposizione della poligonale che genera il minimo errore. In particolare, nel seguito descriviamo gli algoritmi implementati, basati su valutazione dell’errore locale: • Algoritmo di Merge: si parte dal primo segmento che costituisce la poligonale e si considerano successivamente, uno per volta gli altri segmenti; si approssima tale insieme di segmenti con l’arco di cerchio che minimizza la distanza tra l’arco e l’insieme stesso, valutata in base alla metrica adottata. Il processo di accorpamento dei segmenti si arresta non appena la approssimazione risulta essere inaccettabile, ovvero appena è superata una determinata soglia valutata dinamicamente; il segmento in corrispondenza del quale la approssimazione non è verificata viene considerato come segmento di partenza del successivo tratto di poligonale e da esso riparte il procedimento di accorpamento; • Algoritmo di Split: si cerca di approssimare inizialmente l’intera poligonale con un unico arco di cerchio; se l’errore di approssimazione è maggiore della soglia ottenuta dinamicamente, si spezza la poligonale in corrispondenza del segmento che ha generato il massimo scostamento tra arco di cerchio approssimante e porzione di poligonale da approssimare. A questo punto il processo di accorpamento (e/o decomposizione) è applicato ad entrambi i pezzi della poligonale ottenuti; l’algoritmo è iterato fino a quando l’errore di approssimazione si mantiene al di sotto della soglia dinamica per ogni pezzo di poligonale ottenuto e la poligonale non ha subito trasformazioni nel precedente passo; • Algoritmo di Split and Merge: combiniamo insieme i due precedenti algoritmi (di split e di merge), alternando ad un passo di split uno di merge che cerca di accorpare insieme tratti di poligonale consecutivi, ottenuti nel precedente passo di split; sempre che l’errore di approssimazione è, naturalmente inferiore alla soglia dinamica per tutti i tratti che vengono accorpati insieme. 48 4.1 Algoritmo di “Merge” Tra i tre precedenti schemi di decomposizione, quelli più semplici sono quello di Split e quello di Merge, in quanto l’ultimo presentato è una combinazione dei precedenti due. Nei seguenti paragrafi analizzeremo dettagliatamente gli schemi di decomposizione proposti, evidenziandone le analogie e le differenze. 4.1 Algoritmo di “Merge” Di seguito riportiamo una descrizione dettagliata della procedura di merge. Algorithm 2 Algoritmo di Merge Input: Poligonale costituita da N segmenti S1 , S2 , . . . , SN Output: Insieme Γ = {γ1 , γ2 . . . , γm } di archi di cerchio; l’arco γj è rappresentativo di un cluster Pj , che contiene segmenti contigui della Poligonale. m = 1; /*Numero di archi di cerchio*/ j = 1; i = 2; /*Tiene conto dell’indice dei segmenti*/ P1 = S1 ∪ S2 ; /*Accorpo i primi due segmenti della poligonale in un unico arco di cerchio*/ while (i ≤ N ) do /*Determina l’arco di cerchio che meglio approssima Pj */ if kPj − γj k < Ek then if (i < N ) then /*Il prossimo segmento della poligonale è inserito nel cluster Pj */ i = i + 1; Pj = Pj ∪ Si ; end if else /*Il segmento Si non può essere incluso nel cluster Pj ; si considera allora un nuovo cluster che contiene inizialmente i segmenti Si ed Si+1 */ Pj = Pj − Si ; /*Devo togliere il segmento Si */ j = j + 1; Pj = Si ∪ Si+1 ; i = i + 2; end if end while return P /*Restituisco la rappresentazione della poligonale in termini di archi di cerchio.*/ Per quanto riguarda la strategia di “Merge’, si inizia considerando come primo vertice il punto iniziale della poligonale e si prosegue accorpando segmenti contigui della poligonale. L’insieme di segmenti considerato è, quindi rappresentato 49 CAPITOLO 4. La decomposizione in archi di cerchio con l’arco di cerchio che minimizza la distanza tra le due forme. Il processo di accorpamento prosegue fino a quando l’approssimazione è considerata accettabile e termina non appena l’errore di approssimazione è maggiore della soglia ottenuta dinamicamente. Il segmento in corrispondenza del quale l’approssimazione è ritenuta non accettabile è considerato come segmento iniziale del nuovo tratto di poligonale da approssimare; il processo di decomposizione riparte proprio da tale segmento. In definitiva, l’algoritmo di merge considera un segmento per volta della poligonale da approssimare e lo accorpa ai precedenti soltanto se l’errore di approssimazione non supera una determinata soglia calcolata dinamicamente; in caso contrario inizia un nuovo processo di decomposizione proprio da quel segmento, ma sempre considerando un segmento alla volta. 4.2 Algoritmo di “Split” Nell’algoritmo di “Split” si considera inizialmente l’intera poligonale da decomporre e si tenta di approssimarla con un unico arco di cerchio. Se l’errore di approssimazione, ottenuto in base alla metrica adottata, è maggiore della soglia, ottenuta dinamicamente si spezza la poligonale in corrispondenza del segmento che ha originato l’errore di approssimazione maggiore. L’algoritmo è ripetuto su entrambi i tratti generati dal passo precedente ed il processo di decomposizione prosegue in questo modo fino a quando l’errore di approssimazione non risulta minore della soglia dinamica, per ognuno dei pezzi di poligonale ottenuti. la descrizione dettagliata di tale tecnica è contenuta nel seguente Algoritmo 3. L’algoritmo di Split e quello di Merge precedentemente introdotti presentano alcuni problemi di raggruppamento. Per quanto riguarda la procedura di merge, il suo inconveniente principale è legato al modo in cui essa raggruppa i segmenti che costituiscono la poligonale da approssimare (Cordella et al., 1994). L’algoritmo di merge, infatti, accorpa i segmenti contigui della poligonale uno per volta fino a quando l’errore di approssimazione non supera la soglia calcolata dinamicamente. Procedendo in maniera sequenziale lungo la poligonale da descrivere, si rischia di generare più archi di cerchio approssimanti (poiché con pochi tratti la soglia di errore dinamica è bassa), anche se in realtà si sarebbe ottenuta una migliore approssimazione della poligonale accorpando insieme un maggior numero di tratti, in quanto, per un insieme più ampio di segmenti il criterio di accettabilità potrebbe essere ancora verificato (aumentando il numero di tratti, aumenta anche la soglia valutata dinamicamente, che cresce con l’ordine k del poligono). L’aver, inoltre esaminato la poligonale in maniera sequenziale ha impedito di poter determinare delle migliori configurazioni possibili dei segmenti che la compongono, ovvero delle 50 4.2 Algoritmo di “Split” combinazioni per cui l’errore complessivo di rappresentazione è più basso rispetto al precedente. Algorithm 3 Algoritmo di Split Input: Poligonale costituita da N segmenti S1 , S2 , . . . , SN Output: Insieme Γ = {γ1 , γ2 . . . , γm } di archi di cerchio; l’arco γj è rappresentativo di un cluster Pj , che contiene segmenti contigui della Poligonale. m = 1; /*Numero di archi di cerchio*/ i = 1; /*Numero di iterazioni*/ (1) N P1 = ∪ St ; /*Considero per primo l’intero tratto di poligonale*/ t=1 repeat SplitF lag = false; h = 0; /*Numero di cluster generati dall’algoritmo di Split*/ for j = 1 to m do (i) (i) /*Determina l’arco di cerchio γj che meglio approssima Pj */ ° ° ° (i) (i) ° if °Pj − γj ° ≥ Ek then (i) /*Il cluster Pj può essere approssimato da un solo arco di cerchio e deve essere suddiviso in due clusters*/ SplitF lag = true; (i) /*Suddividi Pj in due subclusters Q0 e Q00 con archi di cerchio θ0 e θ00 approssimanti in modo da minimizzare l’errore totale kQ0 − θ0 k + kQ00 − θ00 k*/ h = h + 1; (i+1) Ph = Q0 ; (i+1) Ph+1 = Q00 ; (i+1) γh = θ0 ; (i+1) γh+1 = θ00 ; h = h + 1; else h = h + 1; (i+1) (i) Ph = Pj ; /*Lascio invariato il tratto di poligonale in esame*/ end if m = h; i = i + 1; end for until (N otSplitF lag ) return P /*Restituisco la rappresentazione della poligonale in termini di archi di cerchio.*/ Se i rimanenti tratti della poligonale sono approssimati con un unico arco di cerchio e l’errore commesso in tale approssimazione è molto basso, si potrebbe 51 CAPITOLO 4. La decomposizione in archi di cerchio pensare, che spostando uno o più segmenti terminali dal primo insieme al successivo, in modo da ottenere due nuovi clusters, l’errore di approssimazione del secondo cluster sia ancora al di sotto della soglia, e contemporaneamente l’errore complessivo dei due clusters decresce rispetto alla prima decomposizione. Si ottiene in questo modo una ridistribuzione dell’errore. L’obiettivo della descrizione è quello di approssimare la poligonale con il minor numero possibile di archi di cerchio, pur rispettando il criterio di accettabilità, e cercando di mantenere basso l’errore di approssimazione complessivo. L’algoritmo di merge, pur producendo una decomposizione ammissibile ai fini dell’errore di approssimazione, non è però in grado di determinare una soluzione ottimale del problema. Gli algoritmi di Split permettono di approssimare segmenti di particolari poligonali con un minor numero di rette rispetto agli algoritmi di merge, ma per particolari configurazioni della poligonale presentano dei problemi. Se la poligonale può essere infatti approssimata con due soli clusters che mostrano concavità opposte, gli algoritmi di split portano ad un numero eccessivo di archi di cerchio approssimanti, come mostrato nella seguente figura 4.1. (a) (b) Figura 4.1: Poligonale nel piano (x, y) e relativa decomposizione in archi di cerchio e segmenti di retta. La figura (a) mostra la poligonale del carattere S e la sua rappresentazione nel paino (L, α); La figura (b) mostra la decomposizione dello stesso e le rette approssimanti nel paino (L, α). Il primo passo del processo di split prova a determinare l’arco di cerchio che meglio approssima l’intera poligonale e valuta l’errore commesso nella decomposizione. Se l’errore commesso è maggiore della soglia valutata dinamicamente, la 52 4.3 Algoritmo di “Split and Merge” poligonale è spezzata in corrispondenza del segmento che fornisce il maggiore contributo di errore. Nel caso considerato in figura 4.1 l’errore maggiore si presenta, generalmente agli estremi della poligonale e nel punto in cui essa cambia concavità. Se il massimo dell’errore è raggiunto proprio in uno degli estremi della curva, il primo passo di split restituisce due pezzi di poligonale, uno contenente un solo segmento e l’altra contenente i restanti segmenti della poligonale. Il successivo passo di split, opera su quest’ultimo ed ancora una volta restituirà due porzioni di poligonale, uno costituito da un solo segmento ed uno contenente i restanti segmenti. Il procedimento viene iterato fino a quando non viene raggiunto il cambio di concavità della curva. Il risultato di tale decomposizione è che una delle parti che costituiscono la poligonale è segmentata nei segmenti che la compongono. A causa delle problematiche presentate dagli algoritmi sopracitati, si è introdotta una nuova tecnica, che è essenzialmente una combinazione delle due precedenti. 4.3 Algoritmo di “Split and Merge” La strategia di Split and Merge alterna un passo di merge ad un passo di split, cercando di accorpare insieme e di rappresentare con un unico arco di cerchio una coppia di insiemi di segmenti generati dal precedente passo di split. La procedura termina quando non è più possibile né effettuare suddivisioni, né fusioni tra gruppi di segmenti contigui. Il procedimento è iterativo ed opera in questo modo: Nel primo passo si tenta di approssimare l’intero insieme di segmenti con un unico arco di cerchio; se questo non è possibile, la poligonale è spezzata in corrispondenza del segmento che fornisce il più elevato contributo di errore. Nelle successive iterazioni, l’algoritmo di split controlla se è possibile, per ciascuno degli insiemi generati precedentemente rappresentare i segmenti che li compongono con un unico arco di cerchio. Se i due insiemi verificano il criterio di accettazione, restano inalterati, altrimenti si procede ad una ulteriore suddivisione degli stessi. Dopo ogni passo di split viene eseguito un passo di merge, in cui si tenta di accorpare coppie di insiemi contigui generati dai precedenti passi di split. Ogni coppia di insiemi viene considerata come una possibile candidata ad essere rappresentata con un unico arco di cerchio; se ne calcola quindi l’errore di approssimazione, che viene inserito in una opportuna struttura. Dopo aver considerato tutte le possibili coppie di insiemi contigui e di averne calcolato gli errori di approssimazione, si tenta di fondere in un unico sottoinsieme la coppia che presenta l’errore di approssimazione più basso, purchè rispetti il criterio di accettazione dell’approssimazione. Se la struttura è vuota il passo di merge lascia invariati gli insiemi di segmenti della poligonale. La procedura termina quando, nell’ultimo passo effettuato non vengono effettuate né fusioni, né divisioni e la distribuzione dei segmenti rimane inalterata. Di seguito (algoritmo 4) si descrive in dettaglio l’algoritmo. 53 CAPITOLO 4. La decomposizione in archi di cerchio Algorithm 4 Algoritmo di Split and Merge Input: Poligonale costituita da N segmenti S1 , S2 , . . . , SN Output: Insieme Γ = {γ1 , γ2 . . . , γm } di archi di cerchio; l’arco γj è rappresentativo di un cluster Pj , che contiene segmenti contigui della Poligonale. m = 1; i = 1; /*Numero di archi di cerchio e di iterazioni*/ (1) N P1 = ∪ St ; /*Considero per primo l’intero tratto di poligonale*/ t=1 repeat SplitF lag = false; M ergeF lag = false; /*Passo di Split*/ h = 0; /*Numero di cluster generati dal passo di Split*/ for j°= 1 to m do ° ° (i) (i) ° if °Pj − γj ° ≥ Ek then SplitF lag = true; h = h + 1; (i+1) (i+1) Ph = Q0 ; Ph+1 = Q00 ; (i+1) (i+1) γh = θ0 ; γh+1 = θ00 ; h = h + 1; else (i+1) (i) h = h + 1; Ph = Pj ; /*Lascio invariato il tratto di poligonale*/ end if m = h; i = i + 1; end for /*Passo di Merge*/ for j = 1 to (m − 1) do (i) (i) Pj ∪ Pj+1 ; ° ° ° (i) (i) ° errj = °λj − Pj ∪ Pj+1 °; end for Dome = false; /*Realizza il possibile Merge*/ repeat (i) (i) /*Trova il cluster Pq ∪ Pq+1 con il più piccolo errore Eq */ if errq < Ek then (i) (i) (i) (i) (i) Pq = Pq ∪ Pq+1 ; Pq+1 = ∅; γq = λq ; errq−1 = +∞; errq = +∞; errq+1 = +∞; M ergeF lag = true; else Done = true; end if until Done /*Compatta la lista dei clusters*/ k = 0; for j = 1 to m do (i) if Pj 6= ∅ then (i+1) (i) (i+1) (i) k = k + 1; Pk = P j ; γk = Pj ; end if end for m = k; i = i + 1; until (N otSplitF lag orM ergeF lag ) return P /*Restituisco la rappresentazione poligonale.*/ 54 4.4 Considerazioni 4.4 Considerazioni Nelle precedenti sezioni abbiamo esaminato le caratteristiche e le modalità operative degli algoritmi di: • Merge, • Split, • Split and Merge evidenziandone i pregi ed i difetti, nonchè le differenze presentate in corrispondenza di differenti conformazioni delle curve da descrivere. In particolare abbiamo visto che: • l’algoritmo di merge, data la sua modalità sequenziale di procedere lungo la curva porta ad una eccessiva segmentazione della stessa, ovvero ad una rappresentazione con un numero maggiore di componenti di secondo livello rispetto a quelle necessarie; • l’algoritmo di split porta ad una segmentazione di un tratto di curva in tutti i segmenti che la compongono in corrispondenza di un cambio di concavità della stessa; • l’algoritmo di split and merge ovvia ai precedenti problemi e restituisce una decomposizione accurata ed affidabile della poligonale da descrivere. Da una prima analisi emerge che l’algoritmo di Split and Merge sembra essere preferibile agli altri due e che la descrizione della curva che si ottiene è abbastanza fedele; gli archi di cerchio e i segmenti di retta ottenuti, riducono la complessità della rappresentazione originale della curva e mantengono le informazioni necessarie ad un corretto riconoscimento della stessa. Ovviamente queste considerazioni devono essere avvalorate da una esaustiva sperimentazione degli algoritmi sopracitati su di un opportuno set di curve di prova. L’aspetto fondamentale su cui si basano i precedenti algoritmi è la valutazione della bontà delle approssimazioni che si vuole effettuare. Una volta individuato un insieme di segmenti di poligonale consecutivi, con uno dei precedenti metodi, per valutare se essi si prestano bene ad essere sostituiti (approssimati) con un unico arco di cerchio occorre valutare la distanza tra le due forme e confrontare la stessa con una opportuna soglia calcolata dinamicamente. L’aspetto critico è, dunque la scelta di un criterio di valutazione della soglia, in modo che sia del tutto indipendente dalla forma e dalla dimensione della poligonale da descrivere. 55 CAPITOLO 4. La decomposizione in archi di cerchio Il nostro obiettivo è quello di arrivare alla definizione di un algoritmo che consenta di eliminare anche quest’ultimo vincolo e che possa procedere indipendentemente, valutando soltanto la distanza tra le forme, basandosi sul concetto di determinazione del minimo percorso. Nel seguente capitolo 5 si introduce un metodo robusto di decomposizione basato su di una tecnica di Programmazione Dinamica. Al termine del presente lavoro tutti gli algoritmi sviluppati saranno testati su di un opportuno set di curve per validarli e per definirne le prestazioni in funzione della tipologia delle curve e della metrica utilizzata in fase di valutazione della distanza tra arco di cerchio e porzione di poligonale e di definizione del criterio di accettazione. 56 Capitolo 5 Decomposizione basata su Programmazione Dinamica Nel precedente capitolo si è visto come gli algoritmi di Merge, di Split e di Split and Merge si basino su di una valutazione dell’errore locale commesso nella rappresentazione di un insieme di segmenti contigui, costituenti la poligonale da descrivere con un unica primitiva strutturale. Tali tecniche necessitano, quindi della scelta di una soglia con cui valutare la bontà dell’approssimazione effettuata. L’introduzione della stessa è fondamentale per definire il punto in cui arrestare l’accorpamento di segmenti contigui costituenti la poligonale e proseguire con un nuovo insieme di segmenti. Questo aspetto è legato al fatto che la valutazione dell’errore commesso nella decomposizione è riferito al solo sottoinsieme di segmenti considerato in quel momento e non a tutta la poligonale da descrivere. Poichè la scelta di tale soglia è un aspetto particolarmente critico, sarebbe auspicabile poter definire un metodo che non richieda il suo utilizzo. In questo capitolo si introduce, un metodo robusto per la decomposizione di curve digitali che ha proprio tale caratteristica. Il metodo che si propone nel seguito si avvale dell’utilizzo della “Programmazione Dinamica” per determinare la migliore distribuzione possibile degli archi di cerchio. Data una poligonale da descrivere, l’intento è quello di individuare le primitive strutturali necessarie per ottenerne una rappresentazione fedele della stessa e di definire la migliore distribuzione dei segmenti che costituiscono la poligonale nelle primitive individuate senza l’utilizzo di una soglia di confronto. Prima di analizzare il nostro algoritmo, diamo una descrizione sulla programmazione dinamica e sulle proprietà che essa possiede. 57 CAPITOLO 5. Decomposizione basata su Programmazione Dinamica 5.1 Programmazione dinamica Nella Programmazione Dinamica si affrontano problemi in cui è possibile sviluppare un processo decisionale multistadio, nei quali si riescono ad individuare degli stati di evoluzione, di tipo temporale, spaziale o logico, cioè delle fasi di sviluppo successivo, sequenziale. In Dynamic Programming, Bellman (2003) afferma: “Il proposito di questo lavoro è fornire una introduzione della teoria matematica dei processi decisionali multistadio. Poichè questi considerano un notevole numero di problemi, abbiamo coniato l’espressione “Programmazione Dinamica” per descrivere l’argomento. In effetti, come si vedrà, al di là della differente terminologia, essa comporta una struttura concettuale ben precisa che fornisce un nuovo e versatile strumento matematico per il trattamento di molti, recenti e interessanti problemi sia in questa disciplina, sia in varie parti dell’analisi classica”. Nella formulazione classica del problema, si considera l’intero processo multistadio come costituente un solo stadio. In questo modo se il processo è ad N stadi ed M decisioni, queste ultime devo essere prese in ciascuno stadio, facendo diventare il processo monostadio di MN dimensioni. La metodologia di tipo dinamica decompone il problema nelle N fasi in esso individuabili e lo risolve per stadi, analizzando cioè queste fasi separatamente e in successione. In questo modo le decisioni non saranno prese tutte contemporaneamente, ma M alla volta in N gruppi successivi, basandosi sul principio di ottimalità definito da Bellman (1961). Consideriamo un generico problema in cui si debba andare da una città di origine ad una di destinazione passando attraverso delle città intermedie. Ad ogni strada di collegamento tra due città adiacenti sarà attribuito un peso (vedi figura 5.1). Il problema consiste nel determinare il percorso più breve che, passando per tutte le zone intermedie, congiunga la zona origine con la zona destinazione (supponiamo che le zone in totale siano cinque). Per giungere alla soluzione ottimale dell’intero problema si può pensare di frazionarlo nelle sue parti costituenti e affrontarlo per stadi, risolvendo in successione i sottoproblemi relativi al passaggio da ciascun livello al successivo. Procediamo esaminando le distanze relative al passaggio da ciascuno stadio al successivo ed associando a ciascun vertice individuato la minima distanza per giungere ad esso dallo stadio precedente. Per esempio il vertice 21 può essere raggiunto dai vertici 11 e 12; nel primo caso il cammino avrà lunghezza (2 + 1) = 3 e nel secondo caso (3 + 2) = 5. Tra questi si sceglie il primo e si segna il vertice 21 con il valore 3. Procedendo in questo modo si giunge al calcolo della soluzione del cammino ottimo che sarà dato da: O − 11 − 22 − 33 − D, la cui lunghezza è pari a: (2 + 2 + 1 + 1) = 6. 58 5.2 Formulazione del problema Figura 5.1: Grafo a livelli composto da N = 5 stadi: determinazione del minimo percorso che collega lo stato iniziale “O”, con lo stato di destinazione “D”; percorso ottimo: O − 11 − 22 − 33 − D. L’elemento che caratterizza la procedura che origina il grafo di figura 5.1 è l’aver calcolato il percorso minimo che porta dall’origine (O) alla destinazione (D). Nel nostro caso il valore attribuito ai percorsi tra i vari stadi sono dati dall’errore commesso nell’approssimazione. La metodologia sulla quale si basa la programmazione dinamica è il principio di ottimalità, che Bellman (2003) enuncia in questo modo: “Una politica ottimale ha la proprietà che, quali che siano lo stato e le decisioni che lo hanno preceduto, le rimanenti decisioni devono costituire una politica ottimale riguardo allo stato risultante dalle decisioni precedenti”. Quindi una “politica ottimale è costituita da sotto-politiche ottimali”. Nel segiuto si definisce una tecnica di decomposizione basata su Programmazione Dinamica, attraverso l’utilizzo di tale principio di ottimalità. 5.2 Formulazione del problema Prima di formulare matematicamente il problema evidenziamo che il nostro obiettivo può essere riassunto nella necessità di ottenere: • una rappresentazione fedele della curva originale, che sia insensibile a variazioni non significative presenti su istanze diverse dello stesso oggetto e che sia in grado di discriminare tra istanze di oggetti diversi; • una maggiore sinteticità nella descrizione, ovvero una rappresentazione dell’oggetto di interesse con il minor numero possibile di primitive strutturali. Supponiamo di poter fissare a priori un vincolo nella decomposizione; ad esempio il numero delle primitive strutturali da utilizzare nella descrizione. Il problema 59 CAPITOLO 5. Decomposizione basata su Programmazione Dinamica si riduce nella determinazione della rappresentazione più fedele della curva originale a partire dal numero di primitive assegnato. Occorre quindi determinare la migliore distribuzione possibile dei segmenti costituenti la poligonale. Il problema di rappresentare una poligonale costituita da N segmenti consecutivi, delimitati da (N+1) punti con un insieme M di archi di cerchio può essere, quindi enunciato come segue (Bellman, 1961): data una poligonale costituita da N segmenti consecutivi, si decomponga la stessa in M tratti, approssimando la poligonale originale con M archi di cerchio, delimitati da M+1 vertici, in modo tale da minimizzare l’errore commesso nella decomposizione. In particolare indichiamo con: S = {S1 , S2 , S3 , . . . . . . , SN } (5.1) l’insieme degli N segmenti, che costituiscono la poligonale da descrivere, la quale sarà indicata con la seguente notazione: N P = S1 ∪ S2 ∪ . . . ∪ SN = ∪ Sk . k=1 (5.2) Vogliamo definire l’insieme degli M archi di cerchio approssimanti la curva da dej scrivere, che minimizzi l’errore di approssimazione. Se definiamo con Pi:j = ∪ Sk k=i un generico tratto di poligonale e con γi:j il generico arco di cerchio che approssima il tratto di poligonale Pi:j , il nostro problema diviene quello di determinare la migliore distribuzione possibile degli archi di cerchio. In pratica vogliamo trovare, secondo i vari metodi di approssimazione, la soluzione al seguente problema: min ∗ k1∗ ,k2∗ ,...,kM ∗ d(P, γ1:k1∗ ∪ γk1∗ +1:k2∗ ∪ . . . ∪ γkM :N ) −1 (5.3) il quale può essere scritto come: (M ) min d(P, Γ1:N ) Γ (5.4) dove: (M ) M −1 Γ1:N = ∪ γki +1:ki+1 i=0 (5.5) dove k0 = 0 e kM = N . Di seguito riportiamo un esempio della decomposizione di una poligonale in due sole primitive (vedi figura 5.2). 60 5.2 Formulazione del problema (b) (a) Figura 5.2: (a) Rappresentazione nel piano (x, y) di una poligonale e degli archi di cerchio approssimanti; (b) rappresentazione nel piano (L, α) della poligonale di figura (a) e degli archi di cerchio approssimanti. Nell’esempio riportato in figura 5.2 il numero di archi di cerchio considerati è M = 2, mentre la poligonale da descrivere è composta da N = 18 segmenti consecutivi. L’arco di cerchio γ1:k1∗ approssima i segmenti della poligonale compresi tra il segmento S1 ed il segmento Sk1∗ = S9 , mentre l’arco di cerchio γk1∗ +1:N accorpa i segmenti compresi tra il segmento Sk1∗ +1 = S10 ed il segmento SN = S18 . Per cui nel nostro caso possiamo scrivere: (2) Γ1:18 = γ1:9 ∪ γ10:18 Tornando al problema iniziale dato dall’equazione 5.3, è quindi necessario determinare i valori di ki∗ per i = 1, . . . , M in corrispondenza dei quali interrompere l’accorpamento del tratto di poligonale corrente e considerare la successiva primitiva strutturale ed un nuovo tratto di poligonale, sulla base di una valutazione dell’errore commesso nelle approssimazioni. La formulazione matematica del problema si basa sulla valutazione dell’errore commesso nell’approssimazione di un insieme di segmenti con una unica primitiva, secondo i criteri di valutazione della distanza tra curve adottati. In particolare denotiamo con h(Pi:j ) l’errore commesso approssimando la porzione di poligonale Pi:j con un solo arco di cerchio. Data quindi la poligonale Pi:j , la migliore retta γi:j approssimante nel piano (L, α) è determinata utilizzando uno dei tre criteri di approssimazione definiti, ovvero: • Minimi quadrati ; la migliore retta approssimante è ottenuta valutando la differenza di forma in maniera integrale, come di seguito descritto: min ||Pi:j − γi:j γi:j ||22 Zltot = min (Pi:j (l) − γi:j (l))2 dl; γi:j 0 61 (5.6) CAPITOLO 5. Decomposizione basata su Programmazione Dinamica • Approssimazione uniforme; la migliore retta approssimante è ottenuta valutando la differenza di forma in maniera puntuale, come di seguito descritto: min max |Pi:j (l) − γi:j (l)| (5.7) γi:j l∈[0,ltot ] • Least median of squares; la migliore retta approssimante è ottenuta valutando il valor mediano dei residui al quadrato, come di seguito descritto: min med (Pi:j (l) − γi:j (l))2 γi:j l∈[0,ltot ] (5.8) Sulla base del tipo di metrica utilizzata definiamo l’errore commesso nell’approssimazione, come di seguito descritto: • Minimi quadrati : Zltot h(Pi:j ) = (Pi:j (l) − γi:j (l))2 dl (5.9) 0 • Approssimazione uniforme: h(Pi:j ) = max |Pi:j (l) − γi:j (l)| l∈[0,ltot ] (5.10) • Least median of squares: h(Pi:j ) = med (Pi:j (l) − γi:j (l))2 l∈[0,ltot ] (5.11) Definito l’errore h(Pi:j ), il problema può essere formulato, in forma matematica come segue: data una poligonale P costituita da N segmenti, delimitati da N+1 punti, determinare la migliore distribuzione possibile degli N segmenti consecutivi in M primitive strutturali (comprese tra k1 , . . . , kM ) minimizzando l’errore totale commesso nell’approssimazione. A tal proposito definiamo: H(P1:N , M ) = min k1 ,k2 ,...,kM −1 M −1 X h(Pkj +1:kj+1 ) (5.12) j=0 la funzione di errore da minimizzare per determinare la migliore configurazione 62 5.2 Formulazione del problema possibile degli N segmenti negli M archi di cerchio; ricordiamo nuovamente che k0 = 0 e kM = N . Assegnato il numero di archi di cerchio da utilizzare (in quanto vincolo imposto nella formulazione del problema) si deve determinare il valore dei ki con i = 1, . . . , M − 1, ovvero dei punti in corrispondenza dei quali si passa da una primitiva alla successiva. Il generico punto i-esimo, in cui interrompere l’accorpamento del tratto di poligonale Pi:j e considerare un altro tratto è compreso tra i segmenti ki e ki + 1; esso sarà indicato con il termine Break-Point. La tecnica adottata nel metodo di decomposizione basato su programmazione dinamica è quella di determinare la soluzione ottimale (la migliore combinazione possibile di segmenti consecutivi) al passo corrente, basandosi sulla combinazione ottimale trovata al passo precedente. Partendo dall’equazione 5.12, consideriamo i casi in cui M = 1, 2, 3, 4: H(P1:N , 1) = h(P1:N ) H(P1:N , 2) = H(P1:N , 3) = min[h(P1:k1 ) + h(Pk1 +1:N )] (5.13) min [h(P1:k1 ) + h(Pk1 +1:k2 ) + h(Pk2 +1:N )] (5.14) k1 k1 ,k2 = min[H(P1:k2 , 2) + h(Pk2 +1:N )] k2 H(P1:N , 4) = min [h(P1:k1 ) + h(Pk1 +1:k2 ) + h(Pk2 +1:k3 ) + h(Pk3 +1:N )] k1 ,k2 ,k3 (5.15) = min[H(P1:k3 , 3) + h(Pk3 +1:N )]. k3 Guardando l’equazione 5.14 si osserva facilmente che [h(P1:k1 ) + h(Pk1 +1:k2 )] è l’errore commesso approssimando la poligonale P1:k2 con due primitive strutturali, per cui tale termine può essere riscritto utilizzando l’equazione 5.13 con N = k2 . Analogo discorso può essere fatto per l’equazione 5.15, in cui il termine [h(P1:k1 ) + h(Pk1 +1:k2 ) + h(Pk2 +1:k3 )] rappresenta l’errore commesso approssimando la poligonale P1:k3 con tre primitive strutturali; per cui tale termine può essere riscritto utilizzando l’equazione 5.14, con N = k3 . Per induzione possiamo quindi dire che l’errore minimo commesso approssimando il generico tratto di poligonale P1:n con m primitive strutturali (archi di cerchio e/o segmenti di retta) può essere determinato applicando la seguente funzione: H(P1:n , m) = min m−1≤j≤n−1 [H(P1:j , m − 1) + h(Pj+1:n )] dove poniamo: 63 1≤m≤n (5.16) CAPITOLO 5. Decomposizione basata su Programmazione Dinamica P1:0 = {∅} (0) = {∅} Γ1:0 H(P1:0 , 0) = 0 H(P1:n , 0) = +∞ per n = 1, . . . , N H(P1:j , m − 1) è il minimo errore commesso approssimando j segmenti consecutivi con m-1 archi di cerchio e/o segmenti di retta ed h(Pj+1:n ) è l’errore commesso approssimando i rimanenti segmenti con un unico arco di cerchio (o segmento di retta). Inoltre possiamo definire: H(Pi:j , m) = min k1 ,k2 ,...,km−1 d(Pi:j , γi:k1 ∪ γk1 +1:k2 ∪ . . . ∪ γkm−1 :j ) (5.17) come l’errore commesso approssimando la poligonale Pi:j con m archi di cerchio γ. Si nota facilmente dalla equazione 5.17 che se si utilizza una sola primitiva strutturale si ha H(Pi:j , 1) = h(Pi:j ). La decomposizione in archi di cerchio della poligonale Pi:j può essere denotata come segue: (m) Γi:j = γi:k1 ∪ γk1 +1:k2 ∪ . . . ∪ γkm−1 :j (5.18) Di seguito (vedi figura 5.3) riportiamo un esempio per capire meglio come il metodo di decomposizione appena introdotto, basandosi sulla valutazione dell’errore commesso nella decomposizione, riesca ad individuare la migliore distribuzione possibile dei segmenti costituenti la poligonale da descrivere nelle M primitive (con M assegnato a priori). Sulla base dell’errore ottenuto distribuendo i vari segmenti consecutivi che com∗ pongono la poligonale P, si determina la posizione dei k1∗ , k2∗ , . . . , kM −1 ottimi in corrispondenza dei quali l’errore complessivo commesso H(P1:N , M ) è minimo. La poligonale da descrivere è composta da N=25 segmenti, delimitati da ventisei punti. Il numero delle primitive strutturali scelto per decomporre la poligonale è M=3, ovvero tre soli archi di cerchio. Il metodo di decomposizione procede valutando l’errore commesso in ogni passo accorpando vari tratti di segmenti consecutivi della poligonale, fino ad ottenere che l’errore minimo H(P1:25 , 3), è ottenuto quando k1 = k1∗ = 8 e k2 = k2∗ = 16 (mentre k0 = 0 e k3 = 25 per definizione), ovvero quando la porzione di poligonale P1:8 è approssimata dall’arco di cerchio γ1:8 , la porzione di poligonale P9:16 è approssimata dall’arco di cerchio γ9:16 e la porzione di poligonale P17:25 è approssimata dall’arco di cerchio γ17:25 (vedi figura 5.3). Il minore errore commesso nella decomposizione è quindi dato da: H(P1:25 , 3) = H(P1:16 , 2) + h(P17:25 ). 64 5.3 Descrizione dell’algoritmo di Decomposizione L L 0 0 −50 −50 −100 −100 −150 −150 −200 −200 −250 −250 −300 −300 −350 −350 −400 −400 −450 −450 0 5 10 15 20 Alfa 0 25 5 (a) 10 15 20 Alfa 25 15 20 Alfa 25 (b) L L 0 0 −50 −50 −100 −100 −150 −150 −200 −200 −250 −250 −300 −300 −350 −350 −400 −400 −450 −450 0 5 10 15 20 Alfa 25 0 (c) 5 10 (d) Figura 5.3: Raffigurazione di aclune fasi della decomposizione di una poligonale costituita N=25 segmenti in M=3 primitive strutturali. (a) H(P1:13 , 2) + h(P14:25 ); (b) H(P1:14 , 2)+h(P15:25 ); (c) H(P1:15 , 2)+h(P16:25 ); (d ) H(P1:16 , 2)+ h(P17:25 ). 5.3 Descrizione dell’algoritmo di Decomposizione In questa sezione descriveremo nel dettaglio il metodo con cui opera tale algoritmo ed i vantaggi che esso offre rispetto agli altri visti nel capitolo 4. Il metodo di decomposizione basato su programmazione dinamica opera partendo dal presupposto che siano noti a priori il numero degli archi di cerchio M da utilizzare nella decomposizione. Durante il procedimento, una poligonale costituita da N segmenti consecutivi è percorsa sequenzialmente alla ricerca della migliore distribuzione possibile degli stessi in M possibili archi di cerchio, basandosi sulla valutazione dell’errore commesso nella decomposizione ad ogni singolo passo. Il metodo si basa, quindi sulla distribuzione dell’errore lungo la poligonale in esame. La definizione del percorso con il minimo errore di approssimazione è garantita dal fatto che ad ogni passo si considera il valore dell’errore determinato al passo precedente. 65 CAPITOLO 5. Decomposizione basata su Programmazione Dinamica Alla fine del processo, sulla base dell’errore H(P1:N , M ) si determina la sequenza ∗ k1∗ , k2∗ , k3∗ , . . . , kM −1 (con k0 e kM assegnati) che ha generato il minimo contributo di errore e si considera la decomposizione in corrispondenza dei break-point individuati. Di seguito riportiamo una descrizione sintetica dell’algoritmo implementato, nel caso in cui sia fissato a priori il numero M delle primitive strutturali da utilizzare per descrivere la poligonale P1:N . Algorithm 5 Algoritmo di Decomposizione basato su Programmazione Dinamica Input: Poligonale P1:N costituita da N segmenti S1 , . . . , SN ; M , numero degli archi di cerchio da usare per descrivere la poligonale P1:N ; (M ) Output: Insieme Γ1:N = {γ (1) , . . . , γ (m) } di archi di cerchio; l’arco γi:j è rappresentativo di un cluster Pi:j , di segmenti di poligonale; H(P1:N , M ) errore minimo commesso nell’approssimazione di P1:N in M archi di cerchio Γ. E(0, 0) = 0; /*Inizializzazione dell’errore*/ for n = 1 to N do E(n, 0) = +∞; end for C(0, 0) = [ ] ; for i = 1 to M do for j = i + 1 to N do e(i, j) = h(P1:j ) c(i, j) = par(γi:j ) /*con par (γi:j ) intendiamo il Coefficiente angolare ed il termine noto di γi:j */ end for end for for m = 1 to M do for n = m to N do j min = arg min [E(j, m − 1) + e(j + 1, n)] m−1≤j≤n−1 E(n, m) = [E(jmin , m − 1) + e(jmin + 1, n)]; C(n, m) = [C(jmin , m − 1)[jmin + 1, n]] end for end for return E(N, M ); return c(N, M ); C(N, M ); /*Parametri della decomposizione; ΓM 1:N = (M −1) ∗ Γ1:jmin ∪ γjmin +1:N = γ1:k1∗ ∪ γk1∗ +1:k2∗ ∪ . . . ∪ γkM :N è la migliore distribuzione −1 di N segmenti in M archi di cerchio.*/ 66 5.3 Descrizione dell’algoritmo di Decomposizione Durante il procedimento si stima ripetutamente l’errore h(Pi:j ) per ogni insieme di sotto-segmenti della poligonale in esame e lo si inserisce all’interno di una matrice triangolare superiore. Il processo di decomposizione termina con il calcolo di E(N, M ), che rappresenta l’errore in corrispondenza della migliore distribuzione possibile degli N segmenti costituenti la poligonale P1:N in M archi di cerchio ΓM 1:N (vedi tabella rappresentata nella seguente figura 5.4). Figura 5.4: Calcolo dell’errore commesso nella decomposizione della Poligonale P1:N , costituita da N segmenti consecutivi in M primitive strutturali ΓM 1:N . E tabella contenente i contributi di errore; E(N, M ) = H(P1:N , M ) errore minimo commesso nella decomposizione. Le frecce verticali rappresentate nella figura 5.4 indicano la progressione del calcolo, ovvero la dipendenza dei valori determinati al passo corrente, da quelli determinati al passo precedente, mentre le frecce tratteggiate indicano la necessità di aggiungere una colonna nella tabella di errore per poter considerare una altra primitiva strutturale nella decomposizione. L’approccio di tipo dinamico permette di determinare la soluzione ottima, che in molti casi è anche unica; se ne esistono più di una, considera una di queste come soluzione. L’applicazione del metodo di decomposizione basato su Programmazione Dinamica richiede di determinare l’errore H(P1:N , M ), come definito nella equazione 5.12 e rappresentato nella tabella di figura 5.4, determinando l’errore h(Pi:j ) tra 67 CAPITOLO 5. Decomposizione basata su Programmazione Dinamica il tratto di poligonale Pi:j e l’arco di cerchio (o il segmento di retta) γi:j approssimante. In altre parole occorre determinare l’errore di approssimazione commesso sostituendo il trato di poligonale Pi:j (compreso tra i segmenti i e j) con l’unico arco di cerchio o segmento di retta γi:j , basandosi su di un criterio oggettivo di valutazione dello stesso come definito nelle equazioni 5.9, 5.10 e 5.11. Per ottenere la migliore distribuzione possibile degli (N) segmenti della poligonale negli M archi di cerchio, nel passo corrente si considera l’errore commesso al passo precedente, prendendone il contributo minore, come descritto nella equazione 5.16. Al passo corrente deve essere determinato, quindi il solo valore di h(Pi:j ). L’algoritmo sviluppato si basa sulla considerazione che siano noti a priori il numero M degli archi di cerchio da utilizzare nella decomposizione. Dalle sperimentazioni effettuate si è osservato che l’algoritmo ha un comportamento estremamente robusto, e fornisce una descrizione molto fedele della curva originale. Con l’introduzione di tale metodologia si è ovviato all’inconveniente di dover utilizzare una soglia per valutare la bontà dell’approssimazione. Nonostante ciò, l’algoritmo in esame impone un vincolo nella decomposizione, rappresentato dal numero di primitive strutturali da considerare per descrivere opportunamente la poligonale. La scelta di tale valore può essere basata soltanto su di una valutazione di tipo percettivo. Si può pertanto considerare di eliminare tale vincolo determinando il numero M ottimo andando a studiare il comportamento della decomposizione in funzione della variazione dello stesso. L’intento è quello di analizzare l’andamento dell’errore di approssimazione al fine di determinare delle analogie di comportamento, indipendentemente dalla curva considerata nella decomposizione. Iniziamo considerando il comportamento della curva di errore H(P1:N , M ), al variare di M, fino ad un massimo di M = N , ovvero fino al fitting completo della stessa e cercando di determinare il valore di M ottimo. 5.3.1 Studio della curva di errore e determinazione del valore di M ottimo Dopo aver rimosso il vincolo di avere un numero di primitive strutturali fisso per la decomposizione, lo scopo di questo paragrafo è quello di analizzare il problema e di sviluppare un criterio per la determinazione del numero essenziale delle stesse. Per poter ottenere una rappresentazione grafica della curva di errore in funzione dei vertici utilizzati nella decomposizione, facciamo variare M fino al numero dei segmenti che compongono la poligonale da descrivere. Si ottiene quindi la tabella di errore riportata nella seguente figura 5.5. Ovviamente per quanto detto E(N, N ) = 0, poichè rappresenta l’errore commesso approssimando la poligonale P1:N con se stessa. 68 5.3 Descrizione dell’algoritmo di Decomposizione Figura 5.5: Calcolo dell’errore commesso nella decomposizione della Poligonale P1:N , costituita da N segmenti consecutivi in M = N primitive strutturali ΓN 1:N . E tabella contenente i contributi di errore; E(N, N ) = H(P1:N , N ) errore minimo commesso nella decomposizione. Per capire come varia l’errore in funzione di M , consideriamo l’ultima riga della tabella rappresentata nella precedente figura 5.5. Questa contiene, per ogni valore di M = 1, . . . , N , l’errore commesso approssimando la poligonale P1:N con M primitive strutturali, ovvero con ΓM 1:N . Il grafico di tali valori, in funzione di M produce una curva che definiamo “Dynamic Programming Decomposition Operating Characteristic (DPDOC)”, la quale raffigura l’andamento della curva di errore E(N, M ) in funzione del numero delle primitive strutturali considerato (ovvero del numero degli archi di cerchio e/o segmenti di retta considerati). Come si può notare dal grafico di figura 5.6, l’errore commesso nell’approssimazione decresce all’aumentare del numero M delle primitive strutturali considerate, ovvero del numero degli archi di cerchio. L’errore minimo, uguale a 0 è raggiunto in corrispondenza del fitting completo della curva, cioè nella decomposizione della stessa in tutti i segmenti che la compongono. Prima di proseguire con la trattazione, ricordiamo quali sono gli intenti che vogliamo perseguire nel nostro lavoro: 69 CAPITOLO 5. Decomposizione basata su Programmazione Dinamica 30 25 E (N, M) 20 15 10 5 0 0 1 4 10 15 20 25 30 34 M Figura 5.6: Dynamic Programming Decomposition Operating Characteristic. Andamento della curva di errore E(N, M ) in funzione del numero M degli archi di cerchio considerati, con M = 1, . . . , N . La curva decresce al crescere delle primitive strutturali considerate. • Obiettivo 1 : ottenere il minor numero possibile di archi di cerchio approssimanti, ovvero avere una minore segmentazione della curva da descrivere; • Obiettivo 2 : avere il minimo errore possibile di approssimazione, ovvero ottenere una rappresentazione fedele della curva originale. Il problema della determinazione del valore di M ottimo non può essere risolto semplicemente determinando il minimo della curva di errore, in quanto tale valore è ottenuto banalmente in corrispondenza di un fitting completo della curva. Il nostro obiettivo è invece, quello di combinare insieme accuratezza della descrizione e riduzione della rappresentazione; si cerca di trovare un compromesso tra numero massimo dei vertici ammissibili ed errore di approssimazione. I due obiettivi sono, infatti in relazione (e in conflitto) tra di loro e devono essere entrambi contemporaneamente minimizzati. Occorre, quindi risolvere un problema di Ottimizzazione Multiobiettivo, caratterizzato dalla presenza contemporanea di più obiettivi, cioè funzioni a valori reali da massimizzare e/o minimizzare, tipicamente in contrasto tra di loro. Un problema di ottimizzazione multi-obiettivo (MOP - Multiobjective Optimization Problems) può essere definito come segue (Das, 1999): min (f1 (x)f2 (x) . . . fk (x)) x∈F 70 T (5.19) 5.3 Descrizione dell’algoritmo di Decomposizione ove k ≥ 2 e fi : <n → <, per i = 1, . . . , k. Indichiamo con <k lo spazio degli obiettivi, con <n lo spazio delle variabili di decisione, con x ∈ <n il vettore delle decisioni, con z ∈ <k il vettore degli obiettivi. Indichiamo inoltre con f (x) il vettore delle funzioni obiettivo (f1 (x)f2 (x) . . . ff (x))T e con Z = f (F ) l’immagine della regione ammissibile F nello spazio degli obiettivi: © ª Z = f (F ) = z ∈ <k : ∃x ∈ F, z = f (x) Il vettore ideale degli obiettivi Z id sarà definito come: (z1id z2id . . . zkid ), dove: ziid = min fi (x) (5.20) x∈F Per risolvere il problema multiobiettivo si devono minimizzare contemporaneamente tutte le funzioni obiettivo. Se non ci fossero conflitti tra le stesse, una soluzione banale al problema sarebbe quella ottenibile risolvendo separatamente k problemi di ottimizzazione (uno per ogni funzione obiettivo), ottenendo quindi come soluzione proprio il vettore ideale z id . Nel caso contrario le funzioni obiettivo f1 (x), f2 (x), . . . , fk (x) sono tutte, almeno in parte, in contrasto tra di loro ed occorre quindi determinare una soluzione ottima che soddisfi simultaneamente tutti gli obiettivi prefissati, per cui z id ∈ / Z. La definizione della soluzione ottima di un problema multiobiettivo è stata introdotta per la prima volta da Edgeworth (1881) e successivamente è stata ripresa da Pareto (1896), che la approfondı̀ ulteriormente. In particolare, quest’ultimo ha elaborato le seguenti definizioni. Definizione 5.1 Dati due vettori z 1 , z 2 ∈ <k , diciamo che z 1 domina z 2 secondo Pareto (z 1 ≤P z 2 ) quando risulta zi1 zj1 ≤ zi2 ∀i = 1, 2, . . . , k < zj2 per almeno un indice e j ∈ {1, . . . . . . , k} . Definizione 5.2 Un vettore di decisioni x∗ ∈ F è un ottimo di Pareto se non esiste un altro vettore x ∈ F tale che: f (x) ≤P f (x∗ ). Quindi, un vettore di obiettivi z ∗ ∈ Z è ottimo secondo Pareto quando non esiste un altro vettore z ∈ Z tale che z ≤P z ∗ . Dove la relazione binaria ≤P è un ordinamento parziale nello spazio delle k -uple di numeri reali. 71 CAPITOLO 5. Decomposizione basata su Programmazione Dinamica Se ci troviamo in un punto di ottimo secondo Pareto e vogliamo ulteriormente diminuire il valore di una o più funzioni obiettivo dobbiamo essere disposti ad accettare un conseguente aumento in alcune (oppure tutte) le rimanenti funzioni del problema. In tal senso possiamo affermare che, nello spazio degli obiettivi, gli ottimi di Pareto sono punti di equilibio che si trovano sulla frontiera dell’insieme Z . Definizione 5.3 Diciamo frontiera efficiente l’insieme degli ottimi di Pareto del problema. Molti problemi reali di ottimizzazione implicano il coinvolgimento di più obiettivi da considerare simultaneamente. Solitamente essi sono in conflitto tra di loro e non è possibile trovare una soluzione unica al problema che sia ottima rispetto a tutti gli obiettivi considerati. La presenza contemporanea di tali obiettivi conflittuali genera, quindi un insieme di soluzioni ottime in luogo di una unica (Branke et al., 2004) (Deb, 2003). In particolar modo esistono delle soluzioni denominate pareto-ottime, caratterizzate dal fatto che il miglioramento di uno degli obiettivi può essere determinato causando un grosso degrado in tutti o alcuni degli altri obiettivi del problema. Per poter considerare una unica soluzione occorre definire un criterio di preferenza tra tutte le possibili soluzioni pareto-ottime (Veldhuizen & Lamont, 2000). Esistono numerose tecniche euristiche che possono essere adottate per scegliere un punto pareto ottimo come preferibile, ovvero come punto di lavoro. Le principali tecniche impiegate in letteratura sono: 1. Compromise Programming : l’ottimo preferibile è il punto più vicino al punto ideale, valutato secondo diverse tipologie di distanza (Zeleny, 1973); 2. Marginal Rate of Return: il punto di ottimo preferibile coincide con il punto in cui l’ottenimento di un lieve miglioramento di uno degli obiettivi causa un grosso peggioramento in tutti o alcuni degli altri obiettivi del problema; 3. Weighted Average: il punto di ottimo preferibile è determinato cercando di ottenere una linearizzazione nel problema attraverso l’attribuzione di opportuni pesi agli obiettivi. Di seguito si riporta la raffigurazione dei punti di ottimo preferibile scelti attraverso l’utilizzo delle tecnice sopra citate (vedi figura 5.7). 72 5.3 Descrizione dell’algoritmo di Decomposizione Figura 5.7: Scelta del punto di ottimo preferibile secondo i tre criteri. In questa figura k = 2 e Z è rappresentata dalla zona grigia. Nel nostro problema di ottimizzazione l’insieme dei punti ammissibili è rappresentato dalla DPDOC, come mostrato nella seguente figura 5.8. Figura 5.8: Rappresentazione della DPDOC in funzione di M ed individuazione di alcuni punti notevoli. Ogni punto su tale curva è un punto di ottimo secondo Pareto, in quanto non è dominato da nessun altro; per cui essa coincide con la frontiera ottima di Pareto. I due obiettivi del problema sono rappresentati dal numero degli archi di cerchio M della decomposizione e dall’errore commesso nell’approssimazione (ovvero nella sostituzione di un insieme di segmenti consecutivi con unico arco di cerchio o 73 CAPITOLO 5. Decomposizione basata su Programmazione Dinamica segmento di retta). Essi devono essere contemporaneamente minimizzati al fine di ridurre sia la complessità della rappresentazione di partenza, sia di descrivere adeguatamente la curva in esame. Secondo tutti e tre i criteri sopra elencati il punto di ottimo preferibile coincide con il ginocchio della DPDOC. Il punto di ginocchio costituisce una protuberanza nella frontiera ottima di Pareto (nel nostro caso DPDOC), in cui il miglioramento di uno degli obiettivi causa un grosso degrado di tutti gli altri obiettivi (Taboada et al., 2005). La presenza del ginocchio è, inoltre scala-invariante (Rachmawati & Srinivasan, 2006) ed è estremamente significativa in quanto esso rappresenta il punto di equilibrio in corrispondenza del quale: • diminuendo di poco il numero di primitive M della decomposizione (al fine di ridurre la segmentazione della stessa), abbiamo un grande aumento dell’errore di approssimazione ovvero una rappresentazione meno fedele della curva originale; • diminuendo di poco l’errore di approssimazione, cercando di ottenere una descrizione più fedele, abbiamo un aumento del numero degli archi di cerchio; si ha una aumento di complessità della rappresentazione (segmentazione eccessiva della poligonale originale). Come si può facilmente notare dalla seguente figura 5.9, il punto di ginocchio1 sulla DPDOC, anche dal punto di vista percettivo rappresenta un buon compromesso tra numero di primitive strutturali da utilizzare nella decomposizione ed errore di approssimazione, ovvero tra sinteticità della rappresentazione ed accuratezza della descrizione. Se ci spostiamo da tale punto per cercare di minimizzare ulteriormente uno dei due obiettivi dobbiamo essere disposti ad accettare un aumento notevole dell’altro, ovvero un peggioramento nel raggiungimento dell’altro obiettivo. Nella figura 5.9(a) è mostrato chiaramente come il tentativo di ridurre leggermente il numero delle primitive strutturali utilizzate nella decomposizione (circa del 3 %), comporta un notevole aumento dell’errore di approssimazione (circa del 13 %), mentre la figura 5.9(b) mostra come una piccola riduzione dell’errore di approssimazione (circa del 3 %) comporti un aumento del numero delle primitive strutturali (circa del 6 %). La curva rappresentata in figura 5.9 è la stessa riportata in figura 5.8, con un opportuno ingrandimento per poter apprezzare meglio tale comportamento. 1 Il punto di ginocchio sulla frontiera di Pareto è il punto più lontano dal raggiungimento di ciascun obiettivo parziale (Das, 1999). 74 19 19 18 18 17 17 15.8 15.8 E (N, M) E (N, M) 5.3 Descrizione dell’algoritmo di Decomposizione 15 14 15 14 13 13 12.2 12.2 11.3 11 10 10 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 M M (a) (b) 6 7 8 9 10 Figura 5.9: Andamento della curva di errore E(N, M ) in funzione di M. (a) una piccola riduzione del numero degli archi di cerchio della decomposizione genera un notevole aumento dell’errore di approssimazione; (b) una piccola riduzione dell’errore di approssimazione comporta un notevole aumento del numero degli archi di cerchio M. 5.3.2 Individuazione del punto di ginocchio: calcolo di M ottimo Descriviamo ora un metodo operativo per ottenere il punto di ginocchio della curva di errore. Come è facile osservare, è possibile determinare tale punto in corrispondenza dello scostamento massimo tra retta congiungente i due estremi e funzione di errore, come mostrato nella seguente figura 5.10. 27 25 E (N, M) 20 15 10 5 0 0 1 4 10 15 20 25 30 35 M Figura 5.10: Curva di errore e retta congiungente i due estremi della stessa. Sull’asse X si riporta il numero M delle primitive e sull’asse Y si riporta l’errore commesso nella decomposizione, al crescere di M , fino ad M = N . 75 CAPITOLO 5. Decomposizione basata su Programmazione Dinamica La retta congiungente gli estremi è traslata parallelamente ad essa fino a quando non tocca la curva di errore in un unico punto, rappresentante il ginocchio della stessa, come rappresentato nella seguente figura 5.11. 30 27 25 E (N, M) 20 15 10 5 0 0 1 4 10 15 20 25 30 35 M Figura 5.11: Rappresentazione grafica della determinazione del punto di ginocchio della curva di errore. Per ottenere il ginocchio della curva di errore si procede quindi come di seguito descritto. Definiamo: y c = m c x + qc ; la retta congiungente i due estremi della curva di errore, yp = mc x + qp ; la generica retta parallela alla stessa e: 1 x + q⊥ ; mc la retta perpendicolare ad entrambe e passante per il ginocchio della curva. Per ogni valore di (M, E(N, M )) determiniamo le due rette yp e y⊥ , ottenendo il punto di intersezione (x(m,E(N,m)) , y(m,E(N,m)) ) con la retta yc . Per cui definita: q D(m) = [(X(m,E) − m)2 + (Y(m,E) − E(N, m))2 ] m = 1, . . . , N y⊥ = la freccia tra la tangente alla curva di errore e la retta congiungente i due estremi della stessa, per ogni valore di m, si ottiene: F = M AX(D); 76 (5.21) 5.3 Descrizione dell’algoritmo di Decomposizione ed M è l’ascissa in corrispondenza di F ; dove (m, E(N, m)) è la coordinata di un generico punto sulla curva di errore. 5.3.3 Un caso particolare: decomposizione di un poligono regolare ad N lati Al fine di comprendere meglio le caratteristiche del metodo proposto, analizziamo i risultati ottenuti dalla decomposizione di alcuni poligoni regolari. In particolare consideriamo dei poligoni regolari inscritti in una circonferenza di raggio fissato. Quando il numero dei lati del poligono è piccolo (es. triangolo, pentagono, etc.), il punto di ottimo preferibile (secondo i tre criteri euristici citati precedentemente) è rappresentato dal raggiungimento di uno dei due obiettivi parziali, ovvero dalla minimizzazione dell’errore di approssimazione. La descrizione migliore corrisponde quindi al fitting del poligono stesso, ovvero alla decomposizione in tutti i segmenti che lo compongono. In figura 5.12 è rappresentato l’andamento dell’errore di approssimazione in funzione di M , per un triangolo, pentagono e decagono in scala lineare. 30 Poligono 3 lati Poligono 5 lati Poligono 10 lati 25 E (N, M) 20 15 10 5 0 0 1 2 3 4 5 6 7 8 9 10 M Figura 5.12: Andamento della curva di errore E(N, M ) in funzione del numero di primitive utilizzato per vari poligoni regolari con rappresentazione in scala lineare. All’aumentare dell’ordine del poligono la curva di errore tende ad abbassarsi ed a divenire parallela all’asse delle ascisse (es. poligono regolare a cinquanta lati, etc.). Il punto di ottimo preferibile si sposta verso il punto rappresentato dal raggiungimento dell’altro obiettivo parziale e la decomposizione migliore è ottenuta utilizzando una sola primitiva strutturale. In figura 5.13 si riporta l’andamento di 77 CAPITOLO 5. Decomposizione basata su Programmazione Dinamica E(N, M ) rispettivamente per un poligono a tre, cinque, dieci, cinquanta, cento e cinquecento lati. La rappresentazione è stata effettuata tarando l’asse delle ascisse in scala logaritmica per facilitare la visualizzazione e per consentire una maggiore discriminazione tra le varie curve. 30 Poligono 3 lati Poligono 5 lati Poligono 10 lati Poligono 50 lati Poligono 100 lati Poligono 500 lati 25 E (N, M) 20 15 10 5 0 0 10 1 10 2 M 10 3 10 Figura 5.13: Andamento della curva di errore E(N, M ) in funzione del numero di primitive utilizzato per vari poligoni regolari con rappresentazione in scala logaritmica. In definitiva quando l’ordine del poligono è tale da poter approssimare lo stesso con la circonferenza in cui esso è inscritto, la curva di errore giace sul piano delle ascisse. In tal caso l’errore commesso nella decomposizione è nullo, qualunque sia il numero delle primitive strutturali considerato. Per cui una circonferenza può essere rappresentata con l’utilizzo di un unico arco di cerchio. Nel seguito il metodo di decomposizione basato su programmazione dinamica sarà denotato con l’acronimo “DpDecomp”. 5.4 Descrizione dell’algoritmo DpDecomp con M dinamico Studiando quindi, la matrice di errore in funzione del numero dei vertici considerato si è giunti alla conclusione che è possibile ottenere dinamicamente tale numero M risolvendo un problema di ottimizzaizone multiobiettivo; per cui l’algoritmo può essere modificato in questo modo: 78 5.4 Descrizione dell’algoritmo DpDecomp con M dinamico Algorithm 6 Algoritmo DpDecomp con M dinamico Input: Poligonale P1:N costituita da N segmenti S1 , . . . , SN ; (M ) Output: Insieme Γ1:N = {γ (1) , . . . , γ (m) } di archi di cerchio; l’arco γi:j è rappresentativo di un cluster Pi:j , di segmenti di poligonale; H(P1:N , M ) errore minimo commesso nell’approssimazione di P1:N in M archi di cerchio. M numero degli archi di cerchio della decomposizione. E(0, 0) = 0; for n = 1 to N do E(n, 0) = +∞; /*Inizializzazione dell’errore commesso accorpando N segmenti con un solo arco di cerchio*/ end for Epd (1, 1) = ∞; Epd (1, 2) = 1; C(0, 0) = [ ]; for i = 1 to N do for j = i + 1 to N do e(i, j) = h(Pi:j ); c(i, j) = par(γi:j ); /*con par (γi:j ) intendiamo il Coefficiente angolare e termine noto di γi:j */ end for end for for m = 1 to N do for n = m to N do j min = arg min [E(j, m − 1) + e(j + 1, n)] ; m−1≤j≤n−1 E(n, m) = [E(jmin , m − 1) + e(jmin + 1, n)]; C(n, m) = [C(jmin , m − 1)[jmin + 1, n]]; end for Epd (m, 1) = E(N, m); Epd (m, 2) = m; /*Determino il valore di E(N, M ) ∀ m = 1, . . . , N */ end for X E = Epd (:, 1); Y E = Epd (:, 2); for i = 1 to p N do F (i, 1) = (XiE − Xir )2 + (YiE − Yir )2 F (i, 2) = i; end for M = arg max [F ] ; /*M = Ginocchio della curva di errore Epd ;*/ 1≤i≤N return E(N, M ); (M ) return c(N, M ); C(N, M ); /*Parametri della decomposizione; Γ1:N = (M −1) ∗ Γ1:jmin ∪ γjmin +1:N = γ1:k1∗ ∪ γk1∗ +1:k2∗ ∪ . . . ∪ γkM :N è la migliore distribuzione −1 di N segmenti in M archi di cerchio.*/ 79 CAPITOLO 5. Decomposizione basata su Programmazione Dinamica Nell’algoritmo di decomposizione basato su programmazione dinamica, introdotto nel paragrafo 5.3 si cercava di determinare la migliore distribuzione possibile di N segmenti, costituenti la poligonale in M archi di cerchio. Nell’algoritmo DpDecomp con M dinamico, data una poligonale da descrivere, si determina il numero degli archi di cerchio Ottimo in cui decomporre la stessa ed in seguito si distribuiscono gli (N) segmenti consecutivi della stessa negli M archi individuati, cercando di minimizzare l’errore di approssimazione. Quindi i passi essenziali di questo algoritmo sono la decomposizione della poligonale in M archi di cerchio (con M = 1, . . . , N ), lo studio della curva di errore E con conseguente determinazione del numero di primitive Ottimo e la selezione della migliore distribuzione dei segmenti costituenti la poligonale negli M archi di cerchio individuati. Ad ogni passo si determina anche la distribuzione dei segmenti in funzione dell’M corrente in modo da non doverlo ripetere a valle della determinazione di M. Nel seguito vedremo quanto questo processo sia costoso a livello computazionale. 5.5 Complessità computazionale dell’algoritmo DpDecomp Nel presente paragrafo si cerca di dare una valutazione della complessità computazionale dovuta all’utilizzo della tecnica di decomposizione basata su programmazione dinamica. 5.5.1 Complessità computazionale con M assegnato Se consideriamo assegnato a priori il numero M delle primitive strutturali da utilizzare nella decomposizione, la complessità computazionale può essere ottenuta considerando separatamente il calcolo dei termini e(i, j) = h(Pi:j ) per ogni generico tratto di poligonale Pi:j ed E(N, M ). In particolare il calcolo di e(i, j) = h(Pi:j ) richiede l’esecuzione delle seguenti istruzioni: for i = 1 to M do for j = i + 1 to N do e(i, j) = h(Pi:j ); c(i, j) = par(γi:j ); end for end for il cui costo computazionale è dato da: M X N X i=1 j=i+1 80 1 (5.22) 5.5 Complessità computazionale dell’algoritmo DpDecomp il cui risultato in forma chiusa è: M X N X 1= i=1 j=i+1 M [2N − M − 1] ; 2 (5.23) per cui la complessità di tale calcolo è O(N M ). Il calcolo di E(N, M ) richiede l’esecuzione delle seguenti istruzioni: for m = 1 to M do for n = m to N do j min = arg min [E(j, m − 1) + e(j + 1, n)] ; m−1≤j≤n−1 E(n, m) = [E(jmin , m − 1) + e(jmin + 1, n)]; C(n, m) = [C(jmin , m − 1)[jmin + 1, n]]; end for end for Risolvendo l’equazione: M X N n−1 X X 1 (5.24) m=1 n=m j=m−1 si ottiene il seguente risultato in forma chiusa: M X N n−1 X X m=1 n=m j=m−1 1= ¤ M£ 2 N + M 2 + 3N − M N − 2M 2 (5.25) per cui la complessità di tale calcolo è O(M N 2 ), che rappresenta anche la complessità dell’intero algoritmo. 5.5.2 Complessità computazionale con M calcolato dinamicamente Nel DpDecomp con calcolo del numero delle primitive strutturali da utilizzare nella decomposizione, la complessità computazionale aumenta leggermente poichè andiamo da M = 1 ad M = N . Il calcolo di e(i, j) = h(Pi:j ) richiede l’esecuzione delle seguenti istruzioni: for i = 1 to N do for j = i + 1 to N do e(i, j) = h(Pi:j ); c(i, j) = par(γi:j ); end for end for 81 CAPITOLO 5. Decomposizione basata su Programmazione Dinamica il cui costo computazionale è dato da: N X N X 1 (5.26) i=1 j=i+1 il cui risultato in forma chiusa è: N X N X N [N − 1] ; 2 1= i=1 j=i+1 (5.27) per cui la complessità di tale calcolo è O(N 2 ). Il calcolo di E(N, N ) richiede l’esecuzione delle seguenti istruzioni: for m = 1 to N do for n = m to N do j min = arg min [E(j, m − 1) + e(j + 1, n)] ; m−1≤j≤n−1 E(n, m) = [E(jmin , m − 1) + e(jmin + 1, n)]; C(n, m) = [C(jmin , m − 1)[jmin + 1, n]]; end for end for Risolvendo l’equazione: N X N n−1 X X 1 (5.28) m=1 n=m j=m−1 si ottiene il seguente risultato in forma chiusa: N X N n−1 X X m=1 n=m j=m−1 1= ¤ N£ 2 N − 3N − 4 6 (5.29) per cui la complessità di tale calcolo è O(N 3 ), che rappresenta anche la complessità dell’intero algoritmo. Il notevole vantaggio dell’implementazione di questo algoritmo risiede nella considerazione che ad ogni passo non è necessario ricalcolare l’errore di approssimazione dei passi precedenti, ma è sufficiente aggiungere uno step al crescere di M di una unità. In termini di tabelle di errore è necessario aggiungere una sola colonna. Per capire meglio come questo sia possibile consideriamo la decomposizione di una poligonale costituita da cinque (5) segmenti, dapprima in M = 3 e poi in M = 4 archi di cerchio. Nel primo caso dobbiamo fermarci ad E(5, 3), mentre nel secondo caso ad E(5, 4); 82 5.5 Complessità computazionale dell’algoritmo DpDecomp 1. determinazione di E(5, 3): E(0, 0) = 0; E(n, 1) = +∞ E(1, 1) = min {[E(0, 0) + e(1, 1)]} E(2, 1) = min {[E(0, 0) + e(1, 2)], [E(1, 0) + e(2, 2)]} E(3, 1) = min {[E(0, 0) + e(1, 3)], . . . . . . , [E(2, 0) + e(3, 3)]} E(4, 1) = min {[E(0, 0) + e(1, 4)] , . . . . . . , [E(3, 0) + e(4, 4)]} E(5, 1) = min {[E(0, 0) + e(1, 5)], . . . . . . , [E(4, 0) + e(5, 5)]} E(2, 2) = min {[E(1, 1) + e(2, 2)]} E(3, 2) = min {[E(1, 1) + e(2, 3)], [E(2, 1) + e(3, 3)]} E(4, 2) = min {[E(1, 1) + e(2, 4)] , . . . . . . , [E(3, 1) + e(4, 4)]} E(5, 2) = min {[E(1, 1) + e(2, 5)] , . . . . . . , [E(4, 1) + e(5, 5)]} E(3, 3) = min {[E(2, 2) + e(3, 3)]} E(4, 3) = min {[E(2, 2) + e(3, 4)], [E(3, 2) + e(4, 4)]} E(5, 3) = min {[E(2, 2) + e(3, 5)] , . . . . . . , [E(4, 2) + e(5, 5)]} per n = 1, . . . , 5 2. determinazione di Ep (5, 4): E(0, 0) = 0; E(n, 1) = +∞ E(1, 1) = min {[E(0, 0) + e(1, 1)]} E(2, 1) = min {[E(0, 0) + e(1, 2)], [E(1, 0) + e(2, 2)]} E(3, 1) = min {[E(0, 0) + e(1, 3)], . . . . . . , [E(2, 0) + e(3, 3)]} E(4, 1) = min {[E(0, 0) + e(1, 4)] , . . . . . . , [E(3, 0) + e(4, 4)]} E(5, 1) = min {[E(0, 0) + e(1, 5)], . . . . . . , [E(4, 0) + e(5, 5)]} E(2, 2) = min {[E(1, 1) + e(2, 2)]} E(3, 2) = min {[E(1, 1) + e(2, 3)], [E(2, 1) + e(3, 3)]} E(4, 2) = min {[E(1, 1) + e(2, 4)] , . . . . . . , [E(3, 1) + e(4, 4)]} E(5, 2) = min {[E(1, 1) + e(2, 5)] , . . . . . . , [E(4, 1) + e(5, 5)]} per n = 1, . . . , 5 83 CAPITOLO 5. Decomposizione basata su Programmazione Dinamica E(3, 3) = min {[E(2, 2) + e(3, 3)]} E(4, 3) = min {[E(2, 2) + e(3, 4)], [E(3, 2) + e(4, 4)]} E(5, 3) = E(4, 4) = min {[E(3, 3) + e(4, 4)]} E(5, 4) = min {[E(3, 3) + e(4, 5)], [E(4, 3) + e(5, 5)]} . min {[E(2, 2) + e(3, 5)] , . . . . . . , [E(4, 2) + e(5, 5)]} Come si può facilmente vedere dall’esempio precedente il passare da E(5, 3) ad E(5, 4) comporta l’aggiunta di un solo passo, a partire da quelli precedenti, in termini di tabella di errore, si aggiunge una sola colonna composta dai seguenti termini: E(4, 4), E(5, 4). Quindi il grosso vantaggio a livello computazionale è che aumentare il numero delle primitive utilizzate nella decomposizione non richiede di effettuare nuovamente il calcolo della tabella di errore e la distribuzione dei segmenti della poligonale, ma di riprendere dal passo in cui è stata arrestata la computazione. 5.6 Considerazioni L’algoritmo appena descritto fornisce una maggiore flessibilità rispetto agli algoritmi di merge, di split e di split and merge, basati su valutazione locale dell’errore di approssimazione. Prima di verificare le prestazioni degli stessi, in funzione del set di curve di prova definito, possiamo dire in prima battuta che il fondamentale vantaggio nell’utilizzare il DpDecomp consiste nel non dover definire una soglia di valutazione della bontà delle approssimazioni effettuate. Inoltre l’algoritmo sviluppato consta di due differenti utilizzi: • il DpDecomp, che si basa sulla definizione a priori del numero di primitive della decomposizione e che determina la migliore distribuzione possibile degli N segmenti costituenti la poligonale negli M archi di cerchio definiti; • il DpDecomp con M dinamico, che prima determina dinamicamente il numero ottimale delle primitive della decomposizione per la poligonale da descrivere e poi considera la migliore distribuzione possibile degli N segmenti costituenti la poligonale negli M archi di cerchio individuati. Una volta definiti questi algoritmi, occorre passare ad una fase di sperimentazione esaustiva, che consiste nel valutare il loro comportamento in diverse situazioni, al variare della tipologia di curva utilizzata. Occorre, infatti, valutare l’effettiva validità degli stessi nei vari casi che si presentano, ad esempio in funzione della forma e delle dimensioni dell’immagine in esame. In particolare ciò che si vuole fare è testare il comportamento dei diversi algoritmi nella decomposizione di una 84 5.6 Considerazioni immagine e confrontarla con il risultato della decomposizione della stessa immagine corrotta dal rumore (additivo). Come già detto, parlando delle metriche adottate, il rumore può causare lo spostamento di uno o più punti che costituiscono la linea poligonale dell’immagine dalla posizione originaria, compromettendo la decomposizione della stessa. Gli algoritmi di decomposizione adottati si basano su diverse strategie, e si vuole valutare quale di queste sia meno sensibile al rumore, fornendo ugualmente buoni risultati quando esso è presente. Da ciò si evince, come sia fondamentale poter effettuare una rappresentazione visiva dei risultati delle decomposizioni. Per questo motivo abbiamo realizzato una rappresentazione grafica degli archi di cerchio con cui è descritta la poligonale, sovrapponendoli alla stessa, come descritto nell’appendice B. In questo modo è più semplice effettuare una valutazione dell’efficacia nel processo di decomposizione. 85 CAPITOLO 5. Decomposizione basata su Programmazione Dinamica 86 Capitolo 6 Valutazione degli algoritmi e conclusioni Nei capitoli 4 e 5 abbiamo introdotto e descritto gli algoritmi di decomposizione definiti e sviluppati; ne abbiamo evidenziato i punti di forza e le carenze, nonchè le differenti strategie di accorpamento dei tratti di poligonale. Arrivati a questo punto abbiamo a nostra disposizione tutti gli elementi e gli strumenti, per poter valutare il comportamento degli algoritmi di decomposizione in funzione della conformazione e dimensione delle curve da descrivere. Gli algoritmi proposti saranno testati in presenza di fonti di rumore, attraverso il confronto delle decomposizioni prodotte dagli stessi su di un insieme di curve di prova con le decomposizioni prodotte sulle repliche delle stesse corrotte da rumore additivo. Tale studio è utile per valutare quanto sia robusta ed affidabile la fase di decomposizione, all’interno dell’intero processo di riconoscimento di una generica immagine digitale, quando intervengono delle condizioni che distorcono la poligonale che la rappresenta. Questo aspetto è di notevole importanza per l’intero processo di riconoscimento, perché una maggiore robustezza del processo di descrizione, in presenza di immagini affette da rumore permette di avere una rappresentazione più fedele e stabile dell’immagine originale al variare dei disturbi sovrapposti, permettendo al classificatore di svolgere al meglio il proprio lavoro e di fornire risultati attendibili. La robustezza degli algoritmi di decomposizione può essere intesa come la capacità di quest’ultimi di assorbire delle variazioni delle forme, che non sono dovute al rumore, ma alle fasi che precedono la decomposizione, come ad esempio, le distorsioni introdotte dalla fase di thinning e non perfettamente eliminate dalla successiva fase di pruning. In questo modo è possibile semplificare il lavoro che deve svolgere il classificatore, ottenendo un riconoscimento attendibile, anche in presenza di distorsioni (non a livelli troppo elevati, da cambiare completamente aspetto alla curva). Da ciò si intuisce l’importanza degli algoritmi di decomposizione e la necessità di progettarli in maniera che siano quanto più possibile insensibili a tali disturbi. 87 CAPITOLO 6. Valutazione degli algoritmi e conclusioni 6.1 Definizione del Set di curve di prova Il passo di validazione degli algoritmi di decomposizione implementati deve essere basato sulla scelta di un insieme di curve di prova adeguato agli scopi che ci si propone. In particolare il set di immagini deve racchiudere, quanto più possibile delle curve con delle caratteristiche che possano far risaltare il comportamento dei diversi schemi di decomposizione. Si utilizzano, quindi delle immagini di prova che mettano in risalto il comportamento dei diversi algoritmi in presenza di punti angolosi e di cambi di concavità, che rappresentano delle tipiche situazioni in cui essi hanno dei comportamenti differenti e sono testati efficacemente. L’insieme di curve di prova, appartenenti al primo Set di immagini è riportato in figura 6.1. Le figure che appartengono a questo insieme possiedono una grande varietà di caratteristiche (Teh & Chin, 1989) e si prestano molto bene a testare le performance dei quattro algoritmi sviluppati e delle metriche utilizzate. L’insieme è costituito da curve con andamenti molto regolari ed altre con tratti frastagliati, più simili ad immagini del mondo reale. In particolare: le curve rappresentate in figura 6.1 (a), (b) e (c), create da noi mettendo insieme archi di cerchio quasi perfetti e la curva di figura 6.1 (d), utilizzata da Pei & Horng (1996) e ripresa da Horng & Li (2001) hanno un andamento abbastanza regolare, con soli punti di cuspide; la curva di figura 6.1 (e), utilizzata da Pei & Horng (1996) per validare il proprio algoritmo di approssimazione rappresentante la sintetizzazione di una foglia ha un andamento molto irregolare e frastagliato; la curva di figura 6.1 (f), definita da Sheu & Hu (1999), composta da ogni combinazione possibile di punti di giunzione e da segmenti di diversa lunghezza rappresenta la sintetizzazione della testa di un gallo. Oltre all’insieme di curve classiche riportato nella figura 6.1 è stato definito un ulteriore insieme di immagini sintetiche che saranno presentate nel paragrafo 6.3. Mediante l’utilizzo del primo set di curve è stato possibile valutare l’andamento e le prestazioni degli algoritmi implementati, attraverso la comparazione delle diverse decomposizioni al variare della curva in esame. Il secondo insieme di immagini, invece è stato utilizzato per caratterizzare il metodo di decomposizione basato su Programmazione Dinamica al variare dei parametri caratteristici (quali raggio e centro) delle curve; in particolare è stata analizzata la capacità di descrizione di quest’ultimo in funzione della modalità di composizione della poligonale che rappresenta la curva. La fase di sperimentazione sarà dunque articolata in due frasi: • nella prima fase si considera il primo set di prova (“Test Set 1 ”) e la sua versione corrotta dal rumore e si valutano le decomposizioni generate dagli algoritmi al variare della percentuale di distorsione introdotta ed in funzione delle diverse metriche adottate. Questo processo consente di ana88 6.1 Definizione del Set di curve di prova lizzare le performance degli algoritmi in assenza ed in presenza di disturbi e di confrontare le relative prestazioni; • nella seconda fase si caratterizza l’algoritmo “DpDecomp” sul secondo insieme di curve (“Test Set 2 ”), confrontando le decomposizioni ottenute al variare del centro e del raggio degli archi di cerchio e di ellisse che compongono le curve stesse. Tale insieme sarà presentato nel paragrafo 6.3. (a) test 1 (b) test 2 (c) test 3 (d) test 4 (e) test 5 (f ) test 6 Figura 6.1: Set 1 - Primo Set di curve di prova utilizzate nella sperimentazione. (a) curva costituita da due semicerchi e da due punti di cuspide; (b) curva con tre semicerchi, due punti di cuspide più pronunciati ed un punto meno spigoloso; (c) curva costituita da quatto semicerchi, inglobati in un unico cerchio a raggio maggiore; (d) curva costituita da quattro semicerchi “Testa di Moro”; (e) rappresentazione poligonale di una foglia Leaf-Shaped ; (f) “Cockhead ”, curva complessa composta da segmenti di retta, cerchi ed archi di cerchio. 89 CAPITOLO 6. Valutazione degli algoritmi e conclusioni 6.2 Performance degli algoritmi Il processo di validazione dei quattro algoritmi definiti ed implementati è oggettivamente molto complesso, in quanto occorre considerare diversi fattori, per cercare di dare una spiegazione univoca e coerente dei risultati ottenuti, ovvero delle decomposizioni delle curve prodotte dagli stessi. Consideriamo, quindi in prima analisi le decomposizioni delle immagini con errore nullo (ideali), cercando di analizzare il comportamento dei quattro algoritmi in funzione della metrica adottata, identificando quale tra loro fornisce una decomposizione più fedele. Il primo passo è quello di verificare il comportamento dei diversi algoritmi e la robustezza delle metriche adottate per verificare la bontà delle approssimazioni. Consideriamo, quindi le immagini di prova appartementi al Test Set 1 , non corrotte dal rumore (ideali), ovvero con rumore nullo sovrapposto ad esse. Le immagini che costituiscono questo set di prova possono essere suddivise in due sottoinsiemi, uno contenente figure più regolari, con archi di cerchio quasi perfetti (Test 1, Test 2, Test 3, Test 4) e l’altro contenente figure più aderenti alla realtà, che hanno una conformazione più frastagliata, ed un andamento più irregolare (Test 5, Test 6). L’immagine test 4, pur essendo sintetica, è una via di mezzo tra il primo ed il secondo sotto-insieme. Nella fase di sperimentazione seguente si può notare una differenza di comportamento tra le decomposizioni di un’immagine appartenente ad un sottoinsieme e quelle di un’immagine appartenente all’altro sottoinsieme; ciò consente di descrivere il comportamento dei diversi algoritmi in base all’andamento regolare (o irregolare) delle immagini. Questa analisi può essere ripetuta anche per le metriche, che esibiscono, anch’esse un comportamento diverso (diverse prestazioni), a seconda che siano usate per decomporre un’immagine del primo o del secondo sottoinsieme. Non è, quindi semplice valutare e definire il comportamento degli schemi di decomposizione; vanno infatti esaminati diversi aspetti, tra cui il comportamento delle metriche al variare della conformazione delle immagini di prova, quello degli algoritmi e la robustezza rispetto al rumore sovrapposto all’immagine di prova. Il punto di partenza per la sperimentazione è la rappresentazione tramite componenti di primo livello (RPL) e la trasformazione nel piano (L, α) dell’immagine originale e di un certo numero di repliche distorte con un assegnato tasso di distorsione. Si effettua la decomposizione dell’immagine originale con le sue repliche distorte, utilizzando, uno alla volta, i quattro algoritmi e le tre metriche implementate, ottenendo quindi, per ogni assegnato tasso di distorsione, dodici decomposizioni dell’immagine originale e dodici per la sua replica distorta (per ogni tasso di distorsione abbiamo 24 decomposizioni). Nel nostro lavoro sono state utilizzate sei immagini di prova appartenenti al Test Set 1 e cinque repliche distorte per ciascuna di esse. Per ciascuna immagine digitale originale, sono state considerate 90 6.2 Performance degli algoritmi le repliche distorte, ottenute prendendo un tasso di distorsione dal 5% al 100% con passo del 5%, in modo da poter valutare il comportamento dei vari algoritmi in funzione della quantità di rumore sovrapposto. Per ogni percentuale di rumore si ha, dunque a disposizione un set composto da sei immagini di prova, da utilizzare come confronto rispetto al set originale. Di seguito saranno quindi analizzate le decomposizioni prodotte dagli algoritmi sul Test Set 1 (vedi par. 6.2.1) e sulla sua versione corrotta dal rumore (vedi par. 6.2.2). 6.2.1 Performance degli algoritmi in assenza di rumore In questa sezione consideriamo il Test Set 1 (vedi figura 6.1) in assenza di rumore e verifichiamo la bontà delle decomposizioni prodotte dagli algoritmi, in funzione delle tre metriche adottate. Per gli algoritmi basati su valutazione dell’errore locale si è scelto, in maniera euristica, di considerare una soglia pari a cinque, considerando come poligonale di confronto, quella rappresentante un pentagono regolare. La prima immagine considerata ha un andamento piuttosto regolare e presenta soltanto due punti angolosi; le sue decomposizioni, ottenute attraverso l’utilizzo dei quattro metodi di decomposizione ed i tre criteri di approssimazione sviluppati sono pressochè identiche (vedi figura 6.2 seguente). (b) (a) Figura 6.2: Decomposizione dell’immagine test 1, secondo i quattro criteri di decomposizione (Merge, Split, Split & Merge, DpDecomp) e secondo i tre criteri di approssimazione (L2 , L∞ , LM S). (a) Decomposizione con Split, Split & Merge, DpDecomp, con metrica L2 , L∞ ed LM S; (b) Decomposizione con Merge e metrica L∞ . Come è semplice osservare dalla precedente figura 6.2, le decomposizioni dell’immagine sono identiche a meno di una lieve differenza per l’algoritmo di Merge, unitamente con la metrica L∞ , per il quale si generano tre primitive strutturali in luogo di due. Dalle decomposizioni si osserva che gli altri algoritmi individuano invece due soli archi di cerchio, i quali danno un’accurata descrizione della curva. 91 CAPITOLO 6. Valutazione degli algoritmi e conclusioni Sono, inoltre ben evidenziati i due punti angolosi, in corrispondenza dei quali si passa da un arco di cerchio al successivo. Considerando le decomposizioni dell’immagine test 2 prodotte dagli algoritmi si può facilmente notare che il metodo di approssimazione LM S tende, per figure estremamente regolari come questa e per alcuni degli algoritmi di decomposizione, a trascurare uno dei tre punti angolosi (quello meno pronunciato) considerandolo come fonte di rumore. (a) (b) (c) (d) (e) (f ) Figura 6.3: Decomposizione dell’immagine test 2, secondo i quattro criteri di decomposizione ed i tre criteri di approssimazione. (a) Merge e DpDecomp con metrica L2 ed L∞ ; Split, Split & Merge, con metrica L2 ; (b) Split e metrica L∞ ; (c) Split & Merge e metrica L∞ ; (d) Merge e metrica LM S; (e) Split, Split & Merge e metrica LM S; (f ) DpDecomp e metrica LM S. 92 6.2 Performance degli algoritmi Come si può facilmente osservare dalla precedente figura 6.3, gli algoritmi di split e di Split & Merge pur trascurando, con il metodo di approssimazione LM S, il punto di cuspide meno pronunciato, riescono a discriminare perfettamente i due più rilevanti; si osserva che gli stessi algoritmi forniscono delle decomposizioni non accurate quando utilizzano il criterio di approssimazione L∞ . L’algoritmo DpDecomp, invece, pur producendo una primitiva strutturale in più rispetto ai precedenti algoritmi, riesce a discriminare perfettamente tutti e tre i punti di cuspide quando si utilizza il metodo LMS. Inoltre tale algoritmo produce delle decomposizioni fedeli dell’immagine originale anche con gli altri due criteri di approssimazione (vedi figura 6.3 (a) e (f )). Nella seguente figura 6.4 analizziamo il comportamento degli schemi di decomposizione sull’immagine test 3. (a) (b) (c) (d) Figura 6.4: Decomposizione dell’immagine test 3, secondo i quattro criteri di decomposizione ed i tre criteri di approssimazione. (a) Merge e DpDecomp con metriche L2 , L∞ ed LM S; Split & Merge con metrica L2 ; (b) Split e metrica L∞ ; (c) Split & Merge e metrica L∞ ; (d) Split e Split & Merge e metrica LM S. Come si può osservare dalla figura sopra riportata, gli algoritmi DpDecomp e di Merge producono la stessa decomposizione indipendentemente dal criterio di approssimazione utilizzato. Inoltre la descrizione dell’immagine risulta estremamente fedele alla stessa. Gli altri due schemi di decomposizione producono, invece una decomposizione che varia in funzione del tipo di metrica impiegata; L’algoritmo di 93 CAPITOLO 6. Valutazione degli algoritmi e conclusioni Split & Merge comunque genera una descrizione fedele della curva quando è utilizzata la metrica L2 . Dall’analisi del primo sottoinsieme di curve (con caratteristiche molto regolari) appartenente al test set 1, si nota come l’algoritmo DpDecomp fornisca delle decomposizioni fedeli della curva da descrivere. Le decomposizioni fornite dallo stesso sono indipendenti dal tipo di metrica utilizzata nella valutazione dell’errore di approssimazione. L’algoritmo di Split & Merge appare anche esso robusto su questo tipo di curve, anche se legato al criterio di approssimazione ed al valore scelto per la soglia. Per avvalorare queste considerazioni passiamo ora all’immagine sintetica test 4, che rappresenta una via di mezzo tra i due sotto-insiemi di curve appartenenti al test set 1. (a) (b) (c) (d) (e) (f ) Figura 6.5: Decomposizione dell’immagine test 4. (a) Merge con metrica L2 ; (b) Merge e metrica L∞ ; (c) Merge e metrica LM S; (d) Split e Split & Merge e metrica L2 ; (e) Split con metrica LM S; (f ) Split & Merge con metrica LM S. 94 6.2 Performance degli algoritmi Dalla figura 6.5 si nota come l’algoritmo di Split & Merge sia robusto ed efficace nella decomposizione di tale curva. Si osserva nuovamente che le decomposizioni prodotte dagli algoritmi basati su valutazione locale dell’errore producono delle decomposizioni diverse in funzione delle metriche adottate. In particolare l’algoritmo di Merge, data la modalità sequenziale di procedere genera una eccessiva segmentazione della curva, nella descrizione prodotta; esso porta all’individuazione di un numero eccessivo di archi approssimanti, benchè la curva possa essere ben approssimata con un numero minore. Gli algoritmi di Split e Split & Merge, unitamente con la metrica L2 generano una rappresentazione fedele dell’immagine originale, anche se con una primitiva strutturale in più rispetto a quelle necessarie. Nella seguente figura 6.6 è possibile apprezzare le decomposizioni prodotte dall’algoritmo DpDecomp. (a) (b) Figura 6.6: Decomposizione dell’immagine test 4, secondo il criterio DpDecomp ed i tre criteri di approssimazione. (a) DpDecomp con metrica L2 ed L∞ ; (b) DpDecomp con metrica LM S. L’algoritmo DpDecomp genera una descrizione fedele della curva test 4, rappresentando la stessa con sole quattro primitive strutturali (quattro archi di cerchio), nel caso di metrica L2 ed L∞ . Con la metrica LM S, pur individuando il numero corretto di primitive da considerare, l’algoritmo non riesce a discriminare due dei punti di cuspide, considerandoli come fonte di rumore. Questa caratteristica è strettamente legata al criterio di approssimazione LM S. In definitiva possiamo affermare che per questo tipo di curva, l’algoritmo DpDecomp fornisce un’adeguata decomposizione della stessa, generando delle caratteristiche strutturali che ben la rappresentano. Passiamo ora all’analisi delle due curve con andamento molto più irregolare e frastagliato, appartenenti al secondo sottoinsieme del Test set 1. Nella seguente figura 6.7 riportiamo la decomposizione dell’immagine test 5. 95 CAPITOLO 6. Valutazione degli algoritmi e conclusioni (a) (b) (c) (d) (e) (f ) Figura 6.7: Decomposizione dell’immagine test 5, secondo i criteri di decomposizione ed i tre criteri di approssimazione. (a) Merge con metrica L2 ; (b) Merge con metrica LM S; (c) Split & Merge con metrica L2 ; (d) Split & Merge con metrica LM S; (e) DpDecomp con metrica L2 ; (f ) DpDecomp con metrica LM S. 96 6.2 Performance degli algoritmi Gli algoritmi di Merge e di Split producono, per questi tipi di curve, una segmentazione eccessiva della stessa. L’algoritmo di Split & Merge fornisce delle decomposizioni accurate, soprattutto quando sono utilizzati i criteri di approssimazione L∞ ed LM S. Tali metodi di approssimazione sono infatti molto più robusti quando sono utilizzati su curve più frastagliate e molto più aderenti alla realtà. L’algoritmo DpDecomp genera delle decomposizioni accurate con tutti e tre i criteri di approssimazione considerati; esso fornisce, inoltre una decomposizione migliore e meno segmentata rispetto ai precedenti algoritmi, generando una descrizione con quindici primitive strutturali. (a) (b) (c) (d) Figura 6.8: Decomposizione dell’immagine test 6, secondo i criteri di decomposizione ed i metodi di approssimazione. (a) Split & Merge con metrica L2 ; (b) DpDecomp con metrica L2; (c) Split & Merge con metrica LM S; (d) DpDecomp con metrica LM S. Come si può osservare dalle curve riportate nella precedente figura 6.8, gli algoritmi di Split & Merge e DpDecomp producono delle decomposizione accurate. Il metodo DpDecomp permette, inoltre di ottenere un adeguato compromesso tra accurata descrizione e sinteticità della rappresentazione, fornendo una decompo97 CAPITOLO 6. Valutazione degli algoritmi e conclusioni sizione in sole tredici (13) primitive strutturali. L’algoritmo di Split & Merge produce, invece una maggiore segmentazione della stessa. Dalle sperimentazioni effettuate sul Test set 1 si evince che, tra gli algoritmi di decomposizione basati su valutazione dell’errore locale, il più efficiente è quello di Split & Merge. Tale algoritmo genera una decomposizione accurata dell’immagine originale, trovando un buon compromesso tra accurata descrizione e sinteticità della rappresentazione. Gli algoritmi di Merge e Split producono, invece delle decomposizioni formate da un numero eccessivo di primitive strutturali rispetto a quelle necessarie per ottenere una adeguata rappresentazione della stessa. Le prestazioni di tali algoritmi sono state valutate utilizzando una soglia di confronto pari a cinque, ovvero prendendo come poligonale di riferimento, quella relativa ad un pentagono. Dalle decomposizioni ottenute variando il valore della soglia utilizzata si è arrivati, infatti alla conclusione che, per curve estremamente regolari non si hanno grossi cambiamenti nelle decomposizioni all’aumentare della stessa, mentre per figure irregolari è preferibile utilizzare la soglia relativa ad un pentagono regolare. Per quanto concerne l’algoritmo di decomposizione DpDecomp, l’analisi effettuata consente di affermare che esso genera delle rappresentazioni delle curve estremamente fedeli alle immagini originali. Tale criterio è in grado sia di determinare il numero essenziale di primitive strutturali necessarie per una accurata descrizione, sia di definire la posizione dei break-point, in corrispondenza dei quali si passa da un arco di cerchio (o segmento di retta) al successivo. Per poter avvalorare tali considerazioni passiamo ad analizzare le decomposizioni generate in presenza di rumore. La fase di sperimentazione proseguirà soffermando la nostra attenzione sugli algoritmi di Split & Merge e DpDecomp. 6.2.2 Performance degli algoritmi in presenza di rumore Per poter testare gli algoritmi di decomposizione occorre creare delle immagini di prova corrotte dal rumore e confrontare le decomposizioni ottenute su di esse con quelle delle immagini di prova originali (non distorte). La fase di validazione degli algoritmi consiste, dunque nella sequenza di passi di seguito descritti: 1. definizione e rappresentazione dell’immagine di prova originale (appartenente al Test Set 1 ); 2. introduzione del rumore per creare delle repliche distorte delle immagini di prova appartenenti al test set 1; 3. decomposizione dell’immagine originale e della sua replica distorta, in fun98 6.2 Performance degli algoritmi zione dei diversi algoritmi di decomposizione, e dei diversi metodi di approssimazione; 4. comparazione tra le diverse decomposizioni ottenute. Il punto di partenza dovrebbe essere la rappresentazione poligonale delle immagini di prova. La creazione delle repliche distorte del set di immagini di prova dovrebbe ottenersi attraverso lo spostamento delle coordinate dei punti che costituiscono la poligonale di una quantità pari alla percentuale di rumore introdotto, generato in maniera casuale: ∆Xrumore = ρ · percentuale rumore · Lx; ∆Y rumore = ρ · percentuale rumore · Ly; dove ρ è una quantità casuale, generata in base ad una densità di probabilità uniforme nell’intervallo [−0.5, 0.5] ed LX e LY sono rispettivamente la lunghezza totale della curva in X ed in Y . L’aspetto importante, nell’introduzione del rumore è quello di non modificare completamente la curva, per conservare una certa similitudine tra immagine di prova e replica distorta (corrotta dal rumore). Si è, pertanto deciso di non partire dalla rappresentazione poligonale dell’immagine originale, ma bensı̀ dalla sua rappresentazione nel piano trasformato (L, α). Partendo dal piano (L, α) si sposta ogni singolo tratto della trasformata dell’immagine in esame andandogli a sommare un rumore casuale generato nell’intervallo [−0.5, 0.5] moltiplicato per una percentuale di distorsione fissata. Si ottengono in questo modo delle repliche distorte in (L, α), con vari tassi di distorsione, dell’immagine suddetta. Definita: ∆Lrumore = ρ · percentuale rumore · L; ∆αrumore = ρ · percentuale rumore · α. la percentuale di distorsione da introdurre su ogni singolo tratto (per ogni tasso di rumore considerato), la replica distorta di un generico tratto è data da: Li = Li + ∆Lrumore; αi = αi + ∆αrumore. 99 CAPITOLO 6. Valutazione degli algoritmi e conclusioni Una volta ottenuta la replica distorta della rappresentazione in (L, α) di una immagine appartenente al Test Set 1 si ripassa al piano cartesiano (x, y) per ottenerne una rappresentazione in termini di poligonale, ovvero di RPL, applicando una trasformazione inversa: (L, α) −→ (x, y). In questa sezione consideriamo il Test Set 1 affetto da rumore, verificando la differenza di comportamento tra le decomposizioni prodotte dagli algoritmi su di esso e quelle prodotte dagli stessi sul set originale. Le percentuali di errore considerate vanno dal 5% al 100%, con passo del 5%; sono state considerate cinque delle repliche distorte cosı̀ ottenute. Per quanto riguarda l’immagine test 1, si ottiene una decomposizione unica per tutte le percentuali di errore, con identiche prestazioni rispetto al rumore per entrambi gli algoritmi e per tutte le metriche adottate (vedi figura seguente). (a) (b) Figura 6.9: Decomposizione dell’immagine test 1 affetta da rumore, con tasso del 100%. (a) Split & Merge con metrica L2 , L∞ ed LM S; (b) DpDecomp con metrica L2 , L∞ ed LM S. Di seguito consideriamo invece l’immagine sintetica test 4 con varie percentuali di rumore sovrapposto e valutiamo il comportamento dei due algoritmi, anche in funzione dei criteri di approssimazione. Dalla figura 6.10 si osserva facilmente che il criterio di approssimazione LM S produce una minore segmentazione della curva sia nella parte superiore che inferiore della stessa, fornendo una decomposizione che è molto più simile a quella 100 6.2 Performance degli algoritmi prodotta nel caso di curva (ideale) non rumorosa. Lo stesso comportamento, anche se con lievi differenze è riscontrato per la metrica L∞ , mentre la metrica L2 fornisce una decomposizione abbastanza differente rispetto a quella della curva ideale e molto frammentata. L’algoritmo di Split & Merge è più sensibile al rumore rispetto al criterio DpDecomp e produce una segmentazione maggiore nella decomposizione delle repliche distorte dell’immagine test 4. (a) rumore al 50% (b) rumore al 50% (c) rumore al 50% (d) rumore al 50% (e) rumore al 100% (f ) rumore al 100% Figura 6.10: Immagine test 4 affetta da rumore, con tasso del 50% e del 100%. (a) Split & Merge con metrica L2 ; (b) Split & Merge con metrica L∞ ; (c) Split & Merge con metrica LM S; (d) DpDecomp con metrica L2 , L∞ ed LM S; (e) Split & Merge con metrica L2 ; (f ) DpDecomp con metrica L2 . Nella seguente figura 6.11 riportiamo le decomposizioni ottenute sulla replica distorta con tasso di rumore del 40% dell’immagine test 5. 101 CAPITOLO 6. Valutazione degli algoritmi e conclusioni (a) (b) (c) (d) (e) (f ) Figura 6.11: Immagine test 5 affetta da rumore, con tasso del 40%. (a) Split & Merge con metrica L2 ; (b) Split & Merge con metrica L∞ ; (c) Split & Merge con metrica LM S; (d) DpDecomp con metrica L2 ; (e) DpDecomp con metrica L∞ ; (f ) DpDecomp con metrica LM S. Le decomposizioni ottenute su tale immagine danno chiara evidenza della robustezza dei due algoritmi utilizzati. Le decomposizioni effettuate utilizzando le metriche L2 ed LM S originano una minore segmentazione della curva in accordo con il fatto che tali criteri di approssimazione hanno un comportamento migliore quando sono applicati nella descrizione di curve irregolari e frastagliate. Sia gli algoritmi che le metriche L2 ed LM S mostrano una maggiore insensibilità a fonti di rumore sovrapposto all’immagine originale. 102 6.3 Caratterizzazione dell’algoritmo DpDecomp 6.3 Caratterizzazione dell’algoritmo DpDecomp In questa sezione è effettuata la caratterizzazione dell’algoritmo di decomposizione basato su programmazione dinamica (“DpDecomp”). A tale scopo è stato definito un ulteriore insieme di figure attraverso la combinazione di archi di cerchio e di ellisse, ottenuti utilizzando gli algoritmi di Bresenham (1965). La descrizione di tali algoritmi è riportata nell’appendice A, insieme con la metodologia utilizzata per ottenere la composizione delle curve. Consideriamo il Test Set 2 (vedi figura 6.12 seguente) in assenza di rumore, valutando le prestazioni di tale algoritmo. (a) test 7 (b) test 8 (c) test 9 (d) test 10 (e) test 11 (f ) test 12 Figura 6.12: Test Set 2 - Secondo Set di curve utilizzate nella fase di caratterizzazione dell’algoritmo “DpDecomp”. (a) test 7 topolino; (b) test 8 topolino; (c) test 9 5 Cerchi; (d) test 10 Cerchio&Ellissi; (e) test 11 Cerchio&Ellissi; (f) test 12 3 Cerchi. 103 CAPITOLO 6. Valutazione degli algoritmi e conclusioni Di seguito effettueremo la decomposizione di tali curve in funzione del criterio di approssimazione L2 , verificando la robustezza dell’algoritmo DpDecomp. Le prime due curve considerate sono l’immagine test 7 e l’immagine test 8. Le decomposizioni sono riportate nella seguente figura 6.13. (a) (b) Figura 6.13: Decomposizione con algoritmo DpDecomp e metrica L2 . immagine test 7 (b) immagine test 8. (a) Come si osserva facilmente, l’algoritmo DpDecomp è in grado di discriminare perfettamente i due cerchi a raggio più piccolo rispetto a quello di raggio maggiore; esso produce, inoltre una decomposizione accurata delle due curve. Per quanto riguarda la curva test 8, essa è stata ottenuta dalla precedente variando il raggio ed il centro dei due cerchi più piccoli; la decomposizione è ancora composta da quattro primitive strutturali. Se quindi consideriamo la seconda curva come una variazione della prima a causa di fondi di rumore, possiamo affermare che l’algoritmo di decomposizione è estremamente robusto rispetto ad esso riuscendo a discriminare fino al raggio minimo dei cerchi minori. (a) (b) Figura 6.14: Decomposizione con algoritmo DpDecomp e metrica L2 . immagine test 9 ; (b) immagine test 12. 104 (a) 6.4 Conclusioni (a) (b) Figura 6.15: Decomposizione con algoritmo DpDecomp e metrica L2 . immagine test 10 ; (b) immagine test 11. (a) Le curve riportate nelle precedenti figure 6.14 e 6.15 alternano punti di cuspide molto pronunciati a tratti moto regolari. Le decomposizioni ottenute con l’algoritmo DpDecomp riescono a seguire perfettamente tali andamenti. In particolare si può osservare come l’algoritmo riesca ad identificare bene sia i tratti regolari, approssimandoli con un unico arco di cerchio, sia i punti di cuspide, in corrispondenza dei quali interrompe l’accorpamento dei tratti di poligonale. 6.4 Conclusioni Come detto in precedenza, non è stato semplice trarre delle conclusioni di carattere generale, in quanto si è dovuto tenere conto, oltre che degli algoritmi di decomposizione, anche dei criteri di approssimazione e della scelta della soglia più opportuna. Nel valutare la robustezza degli algoritmi, si è dimostrato che Split & Merge e DpDecomp sono i più robusti ed efficienti. L’algoritmo di Merge, fornisce ugualmente buone prestazioni per curve regolari, ma genera decomposizioni con un eccessivo numero di archi approssimanti per curve più complesse, a causa della sequenzialità della tecnica di accorpamento sulla quale si basa. L’algoritmo di Split invece, presenta dei problemi in corrispondenza di cambi di concavità della curva; in corrispondenza del cambio di concavità il tratto di poligonale successivo è segmentato in tutti i segmenti che lo compongono. Alcune considerazioni possono essere fatte anche sulla scelta della soglia utilizzata per gli algoritmi basati su valutazione dell’errore locale. Nella sperimentazione è stata considerata la soglia di un pentagono, di un esagono e di un eptagono. La soglia più indicata è risultata quella del pentagono, che fornisce buone prestazioni 105 CAPITOLO 6. Valutazione degli algoritmi e conclusioni sia per figure irregolari, sia per quelle con variazioni molto lente. Per figure frastagliate, se si passa ad un valore più alto per la stessa si ottiene una segmentazione eccessiva della curva, mentre per figure regolari si ottengono le stesse prestazioni. Effettuiamo ora delle considerazioni sui risultati ottenuti valutando l’algoritmo DpDecomp. Nel presentare tale criterio sono stati evidenziati i limiti degli altri criteri di decomposizione. Il principale problema che essi presentano è la necessità di definire una soglia di comparazione per valutare se un arco di cerchio γi:j si presta bene ad approssimare un tratto di poligonale Pi:j . La necessità di adottare una soglia è legata al fatto che la valutazione della bontà delle approssimazioni effettuate è limitata al singolo tratto di poligonale. L’adozione di una soglia implica una dipendenza dal criterio di approssimazione utilizzato. Le sperimentazioni effettuate sui due insiemi di curve hanno avvalorato tali considerazioni, in quanto nella maggioranza dei casi, le decomposizioni erano fortemente dipendenti dal metodo di approssimazione utilizzato. Le prestazioni sono quindi migliori o peggiori a seconda che si considerano delle curve regolari o frastagliate. L’algoritmo basato su programmazione dinamica non utilizza alcuna soglia e come si è visto dalle decomposizioni effettuate, le sue prestazioni sono pressochè indipendenti dal tipo di metrica impiegato. Il grosso vantaggio di tale metodo risiede infatti nel non essere legato a nessun vincolo ed in particolare alla tipologia della curva su cui esso è applicato. L’anali delle decomposizioni prodotte dallo stesso ha portato alla conclusione che è in grado sia di individuare il numero M ottimo di primitive strutturali (ovvero archi di cerchio e segmenti di retta) da considerare, sia di individuare i break-point in corrispondenza dei quali occorre passare da una primitiva alla successiva. Per quanto riguarda il rumore sovrapposto alle curve, gli algoritmi di Split & Merge e DpDecomp sono robusti rispetto ad esso, e si ottengono delle buone decomposizioni anche all’aumentare di quest’ultimo. Il discorso sul migliore criterio di approssimazione è più complesso, in quanto vanno esaminati diversi aspetti, tra cui la conformazione delle curve da descrivere. Dalle sperimentazioni si è osservato che la metrica L2 è molto robusta e produce decomposizioni efficienti, sia nel caso di curve regolari, con archi quasi perfetti e con variazioni molto lente, sia con curve fortemente irregolari e frastagliate. I criteri L∞ ed LM S, hanno un comportamento molto robusto quando sono applicate per la decomposizione di quest’ultime. Per curve regolari, invece le prestazioni di queste due metriche decadono leggermente, in quanto, aumentando il rumore tendono a considerare un eventuale punto di cambio di concavità come un punto rumoroso, non spezzando l’accorpamento in corrispondenza di quest’ultimo. 106 6.4 Conclusioni Andando poi a considerare il rumore sovrapposto alle curve di prova, si nota una lieve perdita di prestazioni del metodo di approssimazione L2 su curve frastagliate ed irregolari ed un aumento per curve più regolari, pur rimanendo sufficientemente affidabile anche nel primo caso. Per curve irregolari si nota un buon comportamento dei criteri L∞ ed LM S, soprattutto all’aumentare del rumore sovrapposto, purchè si mantenga a livelli accettabili. 107 CAPITOLO 6. Valutazione degli algoritmi e conclusioni 108 Appendice A Costruzione del Set di curve di prova (“Test Set 2 ”) Di seguito illustreremo la metodologia utilizzata per generare il secondo Set di immagini utilizzato nella fase di sperimentazione e di validazione degli algoritmi e delle tecniche di descrizione introdotti. L’obiettivo primario della creazione di questo secondo insieme è quello di poter generare diverse versioni della stessa tipologia di curva, semplicemente variando alcuni parametri caratteristici utilizzati nella generazione delle stesse. Le immagini di prova appertenenti a questo insieme sono state, infatti generate dalla combinazione di cerchi e di ellissi con differente raggio e curvatura, che ci consentono di ottenere una rappresentazione digitale della curva da descrivere. Attraverso la variazione dei parametri utilizzati per ottenere cerchi ed ellissi è possibile ottenere diverse istanze di una stessa curva, proprio come avviene nel font di un testo, in cui uno stesso carattere può avere diverse rappresentazioni in termini di matrici di pixel. Lo scopo della realizzazione di queste tipologie di immagini è quello di verificare il comportamento delle diverse tecniche di decomposizione su istanze differenti di una stessa tipologia di curva, per verificare la ripetibilità, l’attendibilità e l’affidabilità di una descrizione effettuata dagli stessi. Nel paragrafo A.1 sarà descritto l’algoritmo di generazione in digitale di un cerchio, a partire dalle coordinate del centro e dal raggio, mentre nel paragrafo A.2 sarà esplicata la tecnica di generazione di un ellisse, a partire dalle coordinate del centro e dai raggi. Infine nel paragrafo A.3 si descrive in dettaglio il metodo utilizzato per la generazione delle curve, al variare dei parametri caratteristici. 109 CAPITOLO A. Costruzione del Set di curve di prova (“Test Set 2 ”) A.1 Fast Circle Drawing Un cerchio può essere rappresentato usando una matrice discreta di pixel, dove ogni pixel è costituito da coordinate di interi, utilizzando la seguente equazione: x2 + y 2 = r2 ; (A.1) Solitamente, quando si rappresenta un cerchio, si disegnano dei punti di coordinate P (xi , yi ), i quali non soddisfano esattamente il cerchio definito dall’equazione A.1. Assumendo che xi sia accurato, la coordinata y di P che rappresenta il punto p del cerchio, secondo l’equazione A.1 è: r2 − x2i , ma la risoluzione della seguente espressione: q √ r2 + yi2 − r2 ci dice che il punto P si trova al di fuori del cerchio (Bresenham, 1977). Occorre, quindi determinare dei termini di correzione, basandosi sulla misura di errore fornita dalla seguente equazione: ¯ 2 ¯ ¯xi + yi2 − r2 ¯ . (A.2) È, quindi possibile definire una funzione che rappresenti la misura di errore per ognuno dei punti che costituisce il cerchio, mediante la seguente equazione: ¯ ¯ RadiusError(xi , yi ) = ¯x2i + yi2 − r2 ¯ . (A.3) La rappresentazione del cerchio è realizzata seguendo lo stesso ordine che presentano le seguenti equazioni parametriche: x = cos(t); y sin(t). = Si necessita, dunque della definizione di altre due quantità, necessarie per incrementare e decrementare le coordinate xi e yi . In particolare definiamo: XChange = (1 − 2xi ); Y Change = (2yi + 1). 110 A.1 Fast Circle Drawing Di seguito (Algoritmo 7) riportiamo la descrizione dell’algoritmo utilizzato per disegnare i cerchi nel piano digitale, utilizzati nella fase di sperimentazione. Cx , Cy ed R indicano rispettivamente le coordinate del centro ed il raggio del cerchio. Algorithm 7 Plotcircle - Realizzazione di cerchi nel piano digitale Input: (Cx , Cy ) centro del cerchio; R raggio del cerchio; Output: A matrice contenente le coordinate dei punti del cerchio. X = R; Y = 0; XChange = 1 − 2 ∗ R; Y Change = 1; RadiusError = 0; while X ≥ Y do A(Cx + X, Cy + Y ) = 0; A(Cx − X, Cy + Y ) = 0; A(Cx − X, Cy − Y ) = 0; A(Cx + X, Cy − Y ) = 0; A(Cx + Y, Cy + X) = 0; A(Cx − Y, Cy + X) = 0; A(Cx − Y, Cy − X) = 0; A(Cx + Y, Cy − X) = 0; Y = Y + 1; RadiusError = RadiusError + Y Change; Y Change = Y Change + 2; if (2 ∗ RadiusError + XChange) > 0 then X = X − 1; RadiusError = RadiusError + XChange; XChange = XChange + 2; end if end while return A /*Restituisco in uscita la matrice contenente le coordinate dei punti che compongono il cerchio.*/ Il cerchio è disegnato effettuando una suddivisione in ottanti del piano (x, y) e determinando i punti compresi nei 45◦ , per ognuno di essi. In questo modo si riesce a mantenere la simmetria del cerchio. 111 CAPITOLO A. Costruzione del Set di curve di prova (“Test Set 2 ”) A.2 Fast Ellipse Drawing Una ellissi può essere rappresentata usando una griglia discreta di pixel, dove ogni pixel è costituito da coordinate di interi, utilizzando la seguente equazione: x2 y2 + = 1. a2 b2 (A.4) Solitamente, quando si rappresenta una ellissi si disegnano dei punti di coordinate P (xi , yi ), i quali non soddisfano esattamente l’equazione A.4. È, quindi possibile definire una funzione che rappresenti la misura di errore per ognuno dei punti che costituisce l’ellissi, mediante la seguente equazione: ¯ ¯ EllipseError(xi , yi ) = ¯b2 · x2i + a2 · yi2 − b2 · a2 ¯ (A.5) Al contrario del cerchio, la rappresentazione dell’ellisi è ottenuta suddividendo il piano cartesiano (x, y) di riferimento in quadranti, in quanto il criterio adottato per interrompere la sequenza dei punti è determinato dalla pendenza della tangente all’ellisse stessa (van Aken, 1984). Come per il cerchio determiniamo altre due quantità necessarie per incrementare e decrementare le coordinate xi e yi . In particolare definiamo: XChange = b2 · (1 − 2xi ); Y Change = a2 · (2yi + 1). Definiamo, inoltre altri due valori StoppingX e StoppingY, necessari per determinare il valore iniziale e quello finale per la generazione dei due insiemi di punti appartenenti all’ellisse, attraverso la seguente equazione: StoppingX = 2 · b2 · xi ; StoppingY = 2 · a2 · yi . Di seguito (Algoritmo 8) riportiamo la descrizione dell’algoritmo utilizzato per disegnare le ellissi nel piano digitale, utilizzati nella fase di sperimentazione. Cx e Cy indicano le coordinate del centro dell’ellisse, mentre XRadius Y Radius rappresentano rispettivamente il raggio orizzontale e verticale della stessa. 112 A.2 Fast Ellipse Drawing Algorithm 8 PlotEllipse - Realizzazione di ellissi nel piano digitale Input: (Cx , Cy ) centro dell’ellisse; XRadius e YRadius raggi dell’ellisse; Output: A matrice contenente le coordinate dei punti dell’ellisse. T woASquare = 2 ∗ XRadius ∗ XRadius; T woBSquare = 2 ∗ Y Radius ∗ Y Radius; X = XRadius; Y = 0; XChange = Y Radius ∗ Y Radius ∗ (1 − 2 ∗ XRadius); Y Change = XRadius ∗ XRadius; EllipseError = 0; StoppingY = 0; StoppingX = T woBSquare ∗ XRadius; while (StoppingX ≥ StoppingY ) do A(Cx + X, Cy + Y ) = 0; A(Cx − X, Cy + Y ) = 0; A(Cx − X, Cy − Y ) = 0; A(Cx + X, Cy − Y ) = 0; Y = Y + 1; StoppingY = StoppingY + T woAsquare; EllipseError = EllipseError + Y Change; Y Change = Y Change + T woAsquare; if (2 ∗ EllipseError + XChange) > 0 then X = X − 1; StoppingX = StoppingX + T woBsquare; EllipseError = EllipseError + XChange; XChange = XChange + T woBsquare; end if end while X = 0; Y = Y Radius; XChange = Y Radius ∗ Y Radius; Y Change = XRadius ∗ XRadius ∗ (1 − 2 ∗ Y Radius); EllipseError = 0; StoppingX = 0; StoppingY = T woASquare ∗ Y Radius; while (StoppingX ≤ StoppingY ) do A(Cx + X, Cy + Y ) = 0; A(Cx − X, Cy + Y ) = 0; A(Cx − X, Cy − Y ) = 0; A(Cx + X, Cy − Y ) = 0; X = X + 1; StoppingX = StoppingX + T woBsquare; EllipseError = EllipseError + XChange; XChange = XChange + T woBsquare; if (2 ∗ EllipseError + Y Change) > 0 then Y = Y − 1; StoppingY = StoppingY + T woAsquare; EllipseError = EllipseError + Y Change; Y Change = Y Change + T woAsquare; end if end while 113 CAPITOLO A. Costruzione del Set di curve di prova (“Test Set 2 ”) A.3 Generazione del Set di immagini di prova Il secondo Set di immagini utilizzate nella fase di validazione degli algoritmi di decomposizione è ottenuto dalla combinazione di cerchi e di ellissi attraverso l’utilizzo dell’algoritmo 7 e dell’algoritmo 8 definiti da Bresenham (1977). In figura 6.12 è riportato il secondo set di immagini di prova, ottenuto attraverso l’utilizzo degli algoritmi di Bresenham ed utilizzato per la caratterizzazione dell’algoritmo di decomposizione basato su programmazione dinamica (DpDecomp). A.3.1 Immagine Test 7 Ingresso: (Cx , Cy )1 , R1 ; (Cx , Cy )2 , R2 ; (Cx , Cy )3 , R3 ; Uscita: A - Matrice contenente le coordinate dei punti costituenti l’immagine generata; Procedimento: • A = ones(30, 30); /* Matrice 30 × 30 di uno */ • [A] = plotcircle(A, 15, 10, 6); /* Costruzione del cerchio con raggio 6 */ • [A] = plotcircle(A, 21, 15, 2); /* Costruzione del cerchio con raggio 2 */ • [A] = plotcircle(A, 21, 5, 2); /* Costruzione del cerchio con raggio 2 */ Nome della curva di prova: • test 7 topolino. A.3.2 Immagine Test 8 Ingresso: (Cx , Cy )1 , R1 ; (Cx , Cy )2 , R2 ; (Cx , Cy )3 , R3 ; Uscita: A - Matrice contenente le coordinate dei punti costituenti l’immagine generata; Procedimento: • A = ones(30, 30); /* Matrice 30 × 30 di uno */ • [A] = plotcircle(A, 15, 10, 6); /* Costruzione del cerchio con raggio 6 */; • [A] = plotcircle(A, 20, 14, 1); /* Costruzione del cerchio con raggio 1 */; 114 A.3 Generazione del Set di immagini di prova • [A] = plotcircle(A, 20, 6, 1); /* Costruzione del cerchio con raggio 1; */ Nome della curva di prova: • test 8 topolino. A.3.3 Immagine Test 9 Ingresso: (Cx , Cy )1 , R1 ; (Cx , Cy )2 , R2 ; (Cx , Cy )3 , R3 ; (Cx , Cy )4 , R4 ; (Cx , Cy )5 , R5 ; Uscita: A - Matrice contenente le coordinate dei punti costituenti l’immagine generata; Procedimento: • A = ones(20, 20); /* Matrice 20 × 20 di uno */ • [A] = plotcircle(A, 15, 10, 7); /* Costruzione del cerchio con raggio 7 */ • [A] = plotcircle(A, 10, 5, 2); /* Costruzione del cerchio con raggio 2 */ • [A] = plotcircle(A, 20, 5, 2); /* Costruzione del cerchio con raggio 2 */ • [A] = plotcircle(A, 10, 15, 2); /* Costruzione del cerchio con raggio 2 */ • [A] = plotcircle(A, 20, 15, 2); /* Costruzione del cerchio con raggio 2 */ Nome della curva di prova: • test 9 5Cerchi. A.3.4 Immagine Test 10 Ingresso: (Cx , Cy )1 , R1 ; (Cx , Cy )2 , R2x , R2y ; (Cx , Cy )3 , R3x , R3y ; Uscita: A - Matrice contenente le coordinate dei punti costituenti l’immagine generata; Procedimento: • A = ones(30, 30); /* Matrice 30 × 30 di uno */ • [A] = plotcircle(A, 15, 10, 6); /* Costruzione del cerchio con raggio 6 */ • [A] = plotEllipse(A, 20, 6, 4, 1); /*Costruzione dell’ellisse con raggi 4 ed 1*/ 115 CAPITOLO A. Costruzione del Set di curve di prova (“Test Set 2 ”) • [A] = plotEllipse(A, 20, 14, 4, 1); /*Costruzione dell’ellisse con raggi 4 ed 1*/ Nome della curva di prova: • test 10 Cerchio&Ellissi. A.3.5 Immagine Test 11 Ingresso: (Cx , Cy )1 , R1 ; (Cx , Cy )2 , R2x , R2y ; (Cx , Cy )3 , R3x , R3y ; Uscita: A - Matrice contenente le coordinate dei punti costituenti l’immagine generata; Procedimento: • A = ones(30, 30); /* Matrice 30 × 30 di uno */ • [A] = plotcircle(A, 15, 15, 7); /* Costruzione del cerchio con raggio 7 */ • [A] = plotEllipse(A, 16, 8, 4, 2); /*Costruzione dell’ellisse con raggi 4 e 2*/ • [A] = plotEllipse(A, 16, 22, 4, 2); /*Costruzione dell’ellisse con raggi 4 e 2*/ Nome della curva di prova: • test 11 Cerchio&Ellissi. A.3.6 Immagine Test 12 Ingresso: (Cx , Cy )1 , R1 ; (Cx , Cy )2 , R2 ; (Cx , Cy )3 , R3 ; Uscita: A - Matrice contenente le coordinate dei punti costituenti l’immagine generata; Procedimento: • A = ones(18, 18); /* Matrice 18 × 18 di uno */ • [A] = plotcircle(A, 10, 9, 3); /* Costruzione del cerchio con raggio 3 */ • [A] = plotcircle(A, 10, 14, 2); /* Costruzione del cerchio con raggio 2 */ • [A] = plotcircle(A, 10, 4, 2); /* Costruzione del cerchio con raggio 2 */ Nome della curva di prova: • test 12 3Cerchi. 116 Appendice B Rappresentazione in archi di cerchio Partendo da una rappresentazione (RPL), costituita da componenti di primo livello (segmenti - CPL), attraverso il processo di decomposizione si arriva ad una rappresentazione (RSL), fatta in termini di componenti di secondo livello (archi di cerchio CSL). Quindi data una poligonale P1:N , costituita da N segmenti, una volta determinata la sua decomposizione ΓM 1:N (nel piano trasformato (L, α)), devono essere raffigurati gli archi di cerchio γi:j approssimanti ciascuna porzione di poligonale Pi:j costituente la stessa nel piano (x, y). Occorre dunque effettuare una trasformazione inversa che converta le rette approssimanti (ottenute nel piano (L, α)) in archi di cerchio nel piano cartesiano. Lo scopo di questa sezione è di descrivere più dettagliatamente la parte relativa alla costruzione di tali archi di cerchio. In particolare sarà descritta la fase di determinazione dei parametri caratteristici degli stessi. B.1 Visualizzazione degli archi di cerchio Come già ampiamente descritto nei capitoli precedenti lo scopo del nostro lavoro di tesi è di definire e di validare degli algoritmi di decomposizione di curve digitali, cercando di operare un confronto tra le decomposizioni di un’immagine e della sua versione distorta (corrotta dal rumore). Siamo partiti da una rappresentazione poligonale dell’immagine originale, abbiamo determinato una sua trasformazione in un piano (L, α), capace di eliminare ogni relazione geometrica tra i segmenti che la compongono ed attraverso una serie di elaborazioni siamo arrivati alla decomposizione dell’immagine. L’insieme di partenza era quindi costituito da componenti di primo livello (CPL), mentre il risultato della decomposizione è un insieme di componenti di 117 CAPITOLO B. Rappresentazione in archi di cerchio secondo livello (archi di cerchio CSL), che accorpa insieme un certo numero di componenti di primo livello. Nel seguito descriviamo come siamo arrivati alla determinazione dei parametri caratteristici di queste ultime componenti. B.1.1 Calcolo dei parametri per la costruzione degli archi di cerchio Per la visualizzazione nel piano cartesiano (x, y) di una componente di secondo livello (arco di cerchio), che approssima un determinato insieme di segmenti Pi:j dobbiamo determinare alcuni parametri caratteristici, quali il centro dell’insieme di segmenti ed il raggio dello stesso (Pei & Horng, 1996) (Thomas & Chan, 1989), come mostrato nella seguente figura B.1. Figura B.1: Arco di cerchio approssimante un tratto Pi:j di Poligonale costituito da tre segmenti. Nella decomposizione della poligonale da descrivere tutti i calcoli sono stati svolti nel piano trasformato, in cui non vi sono relazioni geometriche tra i segmenti considerati, per determinare invece il centro ed il raggio dell’arco di cerchio dobbiamo considerare la posizione e tutti i vincoli geometrici del segmento nel piano di riferimento iniziale (x, y). L’arco di cerchio che approssima un dato insieme di segmenti deve andare dal primo vertice del segmento iniziale al secondo vertice di quello finale e deve avere centro e raggio dipendenti dalle relazioni geometriche esistenti tra i segmenti considerati. Nel calcolo dei parametri dell’arco di cerchio da visualizzare si possono originare tre diverse situazioni: 1. la componente è un segmento di retta: arco di cerchio a curvatura nulla; 2. la componente è un arco di cerchio vero e proprio; 118 B.1 Visualizzazione degli archi di cerchio 3. la componente è un arco di cerchio approssimato. Per semplicità consideriamo ancora una volta l’arco di cerchio diagrammato in figura B.1. Il primo passo è determinare l’angolo iniziale formato tra il primo segmento dell’insieme da accorpare e l’asse parallelo a quello delle ascisse e passante per il primo vertice di tale segmento, per cui: µ Alf a in = arctg Y2 − Y1 X2 − X1 ¶ + b. (B.1) Definiamo invece: Corda = p [(XN − X1 )2 + (YN − Y1 )2 ] (B.2) la corda che unisce l’intero insieme di segmenti (con N = 4), e con: µ Ang in = Ang f in = ∆ang = ¶ Y2 − Y1 arctg + k · l1 ; X2 − X1 ¶ µ Y2 − Y1 + k · ltot ; arctg X2 − X1 Ang f in − Ang in; (B.3) la differenza tra gli angoli iniziali e finali dell’insieme di segmenti, dove b e k sono rispettivamente il termine noto e il coefficiente angolare della retta approssimante l’insieme dei segmenti nel piano (L, α), dove ltot è la lunghezza totale dei segmenti. A questo punto trattiamo separatamente le tre diverse situazioni descritte precedentemente: • se 4ang è molto piccolo (4ang < 5) l’arco di cerchio è un segmento di retta ed in tal caso il centro giace sull’arco, che ha curvatura nulla; la visualizzazione di tale componente si realizza semplicemente con una Spline; • se 5 < 4ang < 355 la componente è considerata un vero e proprio arco di cerchio. Il raggio è dato da : µ R= Corda 2 · sin(∆ang/2) 119 ¶ , (B.4) CAPITOLO B. Rappresentazione in archi di cerchio ed il centro è dato da: XC1 = X1 − [R · cos(Ang in)]; YC1 = Y1 − [R · sin(Ang in)]; XC2 = X2 − [R · cos(Ang f in)]; YC2 = Y2 − [R · sin(Ang f in)]; µ XC YC ¶ XC1 + XC2 = ; 2 µ ¶ YC1 + YC2 = ; 2 dove gli angoli riportati nelle equazioni sono espressi in radianti; • se 4ang è molto grande (4ang > 355) l’arco che raggruppa i segmenti è considerato un cerchio ed occorre trovarne il centro ed il raggio in modo approssimato. Il raggio è espresso dall’equazione B.4, mentre il centro è dato dalla media dei centri calcolati per ogni segmento dell’insieme da accorpare: n P XC = i=1 n n P YC B.1.2 = XCi i=1 ; YCi n ; Rappresentazione degli archi di cerchio nel piano di riferimento cartesiano Una volta ottenuti i parametri caratteristici degli archi di cerchio (in particolare centro e raggio degli stessi) occorre determinarne la rappresentazione nel piano cartesiano (x, y), sovrapponendoli alla poligonale P1:N da descrivere. Data la conformazione della poligonale originale, può accadere che le ordinate e/o le ascisse dei vertici, iniziali e finali dell’arco da diagrammare coincidano, rendendone difficoltosa la rappresentazione nel sistema di riferimento. Per tali ragioni si utilizza una rappresentazione mediante coordinate polari degli archi di cerchio, andando 120 B.1 Visualizzazione degli archi di cerchio a considerare gli angoli iniziali e finali per ognuno di essi. In questo modo, ogni coordinata iniziale e finale dell’arco di cerchio in esame è rappresentata cone di seguito descritto: ½ ½ Xi = ρ cos ϑi + Xc Yi = ρ sin ϑi + Yc (B.5) Xf = ρ cos ϑf + Xc Yf = ρ sin ϑf + Yc (B.6) µ ϑi = arctg µ ϑf = arctg yi xi yf xf ¶ ; ¶ ; (B.7) La rappresentazione dell’arco di cerchio che approssima un insieme contiguo di segmenti è diagrammato partendo da ϑi e finendo in ϑf . Nella visualizzazione bisogna avere cura di preservare la stessa concavità posseduta dall’insieme di segmenti da approssimare. 121 CAPITOLO B. Rappresentazione in archi di cerchio 122 Bibliografia Arcelli, C. & di Baja, G.S. (1985). A width indipendent fast thinning algoritm. IEEE Transaction, Pattern analysis and machine intelligence, 7, 463–474. Arcelli, C., Cordella, L.P. & Levialdi, S. (1981). From local maxima to connected skeletons. IEEE Transaction, Pattern analysis and machine intelligence, 2, 134–143. Barreto, H. & Maharry, D. (2006). Least median of squares and regression through the origin. Computational statistics and data analysis, 50, 1391–1397. Bellman, R. (1961). On the approximation of curves by line segments using dynamic programming. Communication of the ACM , 4, 48–51. Bellman, R.E. (2003). Dynamic Programming. Courier Dover. Branke, J., Deb, K., Dierolf, H. & Osswald, M. (2004). Finding knees in multi-objective optimization. In the Eighth Conference on Parallel Problem Solving from Nature (PPSN VIII), 722–731. Bresenham, J. (1965). Algorithm for computer control of a digital plotter. IBM System Journal , 4, 25–30. Bresenham, J. (1977). A linear algorithm for incremental display of circular arcs. Communications of the ACM , 20, 100–106. Buchanan, D.J.L. & Turner, P.R. (1992). Numerical methods and analysis. Mc. Graw Hill. Cordella, L.P., Tortorella, F. & Vento, M. (1994). Shape description through line decomposition. in C. Arcelli, L.P. Cordella, G. Sanniti di Baja (eds.), Aspects of Visual Form Processing, World Scientific, Singapore, 129–138. Cordella, L.P., Foggia, P., Sansone, C. & Vento, M. (2002). Learning structural shape description from examples. Pattern Recognition Letters, 23, 1427–1437. 123 BIBLIOGRAFIA Das, I. (1999). On characterizing the “knee” of the pareto curve based on normalboundary intersection. Structural Optimization, 18, 107–115. de Santo, M. (1989). Un metodo per l’estrazione di caratteristiche mediante la decomposizione di curve piane. Ph. D. thesis, Tesi di dottorato presso l’Università Federico II di Napoli. Deb, K. (2003). Multi-objective evolutionary Algorithms: Introducing Bias Among Pareto-Optimal Solution. In A. Ghosh and S. Tsutsui, editors, Advances in Evolutionary Computing: Theory and Application. London Springer-Verlag. Devroye, L., Gyorfi, L. & Lugosi, G. (1996). A probabilistic theory of pattern recognition. New York: Springer-Verlag. Duda, R.O., Hart, P.E. & Stork, D.G. (2001). Pattern Classification. John Wiley & Sons, 2nd edn. Duin, R.P.W., Roli, F. & de Ridder, D. (2002). A note on core research issues for statistical pattern recognition. Pattern Recognition Letters, 23, 493–499. Edelsbrunner, H. & Souvaine, D.L. (1990). Computing least median of squares regression lines and guided topological sweep. Journal of the american statistical association, 85, 115–119. Edgeworth, F.Y. (1881). “Mathematical Psychics”. P. Keagan, London, England. Esposito, M., Mazzariello, C., Oliviero, F., Romano, S.P. & Sansone, C. (2005). Evaluating pattern recognition techniques in intrusion detection systems. In Proceeding of 5th Workshop on Pattern Recognition on Information Systems (PRIS 05), 144–153. Foggia, P. (1999). Classificazione e prototipazione di descrizioni strutturali rappresentate attraverso grafi relazionali con attributi . Ph.D. thesis, Tesi di dottorato presso l’Università Federico II di Napoli. Fu, K.S. (1974). Syntactic Methods in Pattern Recognition. Academic Press. Fu, K.S. (1982). Syntactic pattern recognition and applications. Prentice Hall. Fukunaga, K. (1990). Introduction statistical pattern recognition. Academic Press, Second edition. Hampel, F.R. (1975). Beyond location parameters: Robust concepts and methods. Bull. Int. Internal Statistic Instit., 46, 375–382. 124 BIBLIOGRAFIA Horng, J.H. & Li, J.T. (2001). A dynamic programming approach for fitting digital planar curves with line segments and circular arcs. Pattern recognition letters, 22, 183–197. Ichoku, C., Deffontaines, B. & Chorowicz, J. (1996). Segmentation of digital plane curves: a dynamic focusing approach. Pattern Recognition Letters, 17, 741–750. Jain, A.K., Duin, R.P.W. & Mao, J. (2000). Statistical pattern recognition: A review. IEEE transaction on pattern analysis and machine intelligence, 22. Kanal, L. (1974). Patterns in pattern recognition. IEEE Transaction on information theory, 20, 697–722. Kong, T. & Rosenfield, A. (1989). Digital topology: Introduction and survey. Compututer Vision, Graphics and Image Processing, 48, 357–393. Monegato, G. (1998). Fondamenti di calcolo numerico. CLUT. Mount, D.M., Netanyahu, N.S., Romanik, K., Silverman, R. & Wu, A.Y. (2007). A practical approximation algorithm for the lms line estimator. Computational statistics and data analysis, 51, 2461–2486. Oommen, B.J. & Kashyap, R.L. (1997). A formal theory for optimal and information theoretic syntactic pattern recognition. Ottawa, Canada. Pareto, V. (1896). “Cours d’economie politique”. Rouge, Lausanne, Switzerland. Pavlidis, T. (1980). Structural Pattern Recognition. Springer-Verlag, Berlino. Pavlidis, T. & Horowitz, S.L. (1974). Segmentation of planar curves. IEEE transaction on computers, 23, 860–870. Pavlidis, T., Sakoda, W.J. & Shi, H. (1995). Matching graph embeddings for shape analysis. Third International Conference on Document Analysis and Recognition (ICDAR’95), 2, 729. Pei, S.C. & Horng, J.H. (1996). Optimum approximation of digital planar curves using circular arcs. Pattern Recognition, 29, 383–388. Rachmawati, L. & Srinivasan, D. (2006). A multi-objective genetic algorithm with controllable convergence on knee region. IEEE Congress on Evolutionary Computation. Sheraton Vancouver Wall Centre Hotel, BC, Canada, 1916–1922. Ramer, U. (1972). An interactive procedure for the polygonal approximation of planar curves. Computer graphics and image processing, 1, 244–256. 125 BIBLIOGRAFIA Rosin, P. & West, G.A.W. (1989). Segmentation of edge into lines and arcs. Image Vision Comuting, 7, 109–114. Rousseeuw, P.J. & Leroy, A.M. (1987). Robust regression and outlier detection. John Wiley and Sons. Schalkoff, R.J. (1992). Pattern Recognition: Statistical, structural and neural approaches. Wiley, New York. Shaoo, P.K., Soltani, S. & Wong, A.K.C. (1988). A survey of thresholding techniques. Computer vision, graphics, image processing, 41, 233–260. Sheu, H.T. & Hu, W.C. (1999). Multiprimitive segmentation of planar curve-a two-level breackpoint classification and tuning approach. I.E.E.E. Transaction on Pattern Analysis and Machine Intelligence, 21, 791–797. Slansky, J., Chazin, R.L. & Hansen, B.J. (1972). Minimum-perimeter polygons of digitalized silhouettes. IEEE transaction on computers, 21, 260–268. Taboada, H.A., Baheranwala, F., Coit, D.W. & Wattanapogsakom, N. (2005). Practical solutions of milti-objective system reliability design using genetic algorithms. International Conference on Quality and Reliability (ICQR). Teh, C.H. & Chin, R.T. (1989). On the detection of dominant points on digital curves. I.E.E.E. Transaction Pattern Analysis Machine Intelligence, 11, 859– 872. Thomas, S.M. & Chan, Y.T. (1989). A simple approach for the estimation of circular arc center and its radius. Computer Vision, Graphics and Image Processing, 45, 362–370. Tortorella, F. (1995). Algoritmi per la rappresentazione e l’analisi automatica di mappe e disegni tecnici . Ph.D. thesis, Tesi di dottorato presso l’Università Federico II di Napoli. Ullman, J.R. (1973). Pattern recognition techniques. Butterworths. van Aken, J.R. (1984). An efficient ellipse-drawing algorithm. I.E.E.E. Computer Graphics & Applications, 24–35. Veldhuizen, D.V. & Lamont, G.B. (2000). Multi-objective evolutionary algorithms: Analyzing the state-of-the-art. Evolutionary Computation Journal , 125–148. Watanable, S. (1985). Pattern Recognition: Human and Mechanical . New York: Wiley. 126 BIBLIOGRAFIA Wu, W.Y. & Wang, M.J.J. (1993). Detecting the dominant point by the curvature-based polygonal approximation. CVGIP: Graphical Models and Image Processing, 55, 79–88. Zeleny, M. (1973). Compromise programming. In J. L. Cochrane and M. Zeleny (Eds.) multiple criteria decision making. Columbia: South Carolina: University of South Carolina Press. 127