Riassunti Sistemi Multimediali 2011/12 Mirko Napolano 1 Introduzione e semiotica La multimedialità è l’insieme delle tecnologie che permettono di gestire ed integrare media differenti (testi, audio, video, immagini, ecc..). Un sistema multimediale è un framework che permette d’integrare e far interagire fra loro e con l’utente i vari media. Esso attinge conoscenze e tecnologie da branche dell’informatica differenti (computer graphics, computer vision, computer networks, image processing, human interaction, ecc..). Tecnologie utilizzate in questi sistemi sono: rappresentazione, compressione ed elaborazione dei dati multimediali, trasmissione dei dati, gestione e recupero dei dati all’interno di appositi database. Lo scopo di un sistema multimediale è quindi quello di permettere un processo di comunicazione fra gli utenti. Per inciso, la comunicazione è un processo in cui uno o più persone aumentano la loro conoscenza tramite un messaggio. Un processo di comunicazione coinvolge un mittente, un destinatario, un messaggio, una codifica, una decodifica, un canale di comunicazione e il relativo rumore e una risposta. Essa assume significato solo all’interno di un determinato contesto ed entro un certo intervallo di tempo; inoltre, affinchè la comunicazione abbia successo è necessario che mittente e destinatario condividano lo stesso punto di vista, lo stesso codice interpretativo e la stessa lingua. Un messaggio non è altro che un insieme di segni, costituiti a loro volta da simboli o segnali. Esso serve a trasportare un significato; la scienza che studia i segni e il modo con cui esprimono un significato è la semiotica. Un segno è quindi costituito da due entità, il significante, cioè l’insieme dei simboli, e il significato, cioè il concetto. Col termine ’mezzo’ ci si riferisce ad un mezzo fisico di comunicazione del messaggio (canale fisico) oppure ad un mezzo di rappresentazione (linguaggio). Un ipertesto è un tipo di testo non lineare, in cui la corretta comprensione del messaggio viene realizzata leggendo i simboli in modo non sequenziale. La lettura di un ipertesto viene facilitata dall’utilizzo di link, che rimandano ad altre parti del testo. Un’applicazione che include media differenti con cui si può interagire allo stesso modo degli ipertesti prende il nome di hypermedia; un classico esempio è il World Wide Web. 2 Il Web Il Web ha subito un’evoluzione dal momento in cui è nato, ovvero dal 1991 quando Tim Berners Lee creò il protocollo HTTP e il linguaggio di markup HTML, fino ai giorni nostri. Tale evoluzione è evidenziata da ”versioni” del web; tuttavia, tali acronimi non fanno riferimento a versioni successive effettivamente 1 rilasciate del web, come accade per i software, ma è utilizzato da esperti informatici della comunità per evidenziare la differenza di utilizzo delle informazioni in rete. La prima fase è quella del Web 1.0, e si riferisce ai primi anni 90: in questa fase i siti vengono gestiti da persone esperte del campo, ed in particolare di HTML che rappresenta il linguaggio dominante per la gestione e formattazione dei contenuti web. Gli utenti possono navigare i siti web e ricavare informazioni anche multimediali, ma non possono modificarle; per cui si parla di siti web statici. Esistono inoltre le prime forme di e-commerce, limitate tuttavia alle aziende (business to business). La seconda fase è detta Web 2.0 : non essendo, come detto, una versione successiva e standardizzata del Web, il passaggio dalla prima alla seconda fase è stata graduale. Nel Web 2.0 ciò che cambia notevolmente è l’interazione tra sito e utente: quest’ultimo può infatti modificare direttamente il contenuto delle pagine web, sfruttando servizi come i blog, i forum, le wiki e soprattutto i social network; l’e-commerce inoltre si estende anche fra gli utenti comuni. La condivisione dei contenuti riguarda anche i dati multimediali, favorita dall’avvento di servizi come YouTube, MySpace, Dropbox ed altri. Inoltre, le applicazioni più diffuse mettono a disposizione delle API, che possono essere utilizzate per includere i propri contenuti all’interno di altre pagine web (mashup): ad esempio, è possibile condividere un video di YouTube su Facebook, oppure è possibile includere su un sito di un albergo la mappa del luogo in cui si trova. I siti web diventano cosi dinamici, e possono essere gestiti e creati da persone con conoscenze informatiche limitate. Ciò è stato possibile anche grazie a nuovi linguaggi web come PHP e CSS. Uno dei servizi più utilizzati del web, sin dagli albori, è il motore di ricerca: esso si basa sull’utilizzo di parole-chiave (keywords) indicate dall’utente e, sfruttando sofisticati algoritmi di Text Processing basati sulla ricerca sintattica, restituiscono i risultati basandosi sulle occorrenze della parola-chiave. Tuttavia tale approccio ha dei limiti: le parole-chiave infatti sono ambigue, e hanno significati differenti a seconda del contesto in cui sono collocate. Per cui, la successiva evoluzione del web si basa su un approccio semantico della gestione dei dati. Per fare ciò è necessario che ai dati vengano associate delle informazioni aggiuntive, i ”metadati”, che le descrivano e ne permettano l’indicizzazione da parte di motori di ricerca semantici. Tale fase, tuttora in corso, è quella del Web Semantico. Il Web Semantico si basa su un approccio diverso della gestione dei dati: questi non devono essere più ”isolati”, ma devono poter essere fusi con altri dati correlati in modo da permettere una ricerca più completa. Per fare questo è necessario che tutti quelli che condividano informazioni sul web utilizzino dei linguaggi e degli strumenti standardizzati: in particolare, per identificare delle risorse in rete, anche non sul web, esistono le stringhe URI (Uniform Resource Identifier); per poter riutilizzare le risorse, a cui sono associate dei metadati, vengono utilizzate i documenti RDF (Resource Description Framework); per interrogare le informazioni presenti negli RDF è stato introdotto il linguaggio SPARQL (Simple Protocol And RDF Query Language); per caratterizzare la semantica dei termini e fornire una descrizione di una conoscenza condivisibile vengono utilizzati gli RDF Schema e il linguaggio OWL (Ontology Web Language). 2 Il linguaggio di markup che ha permesso lo sviluppo degli strumenti per il web semantico è XML (eXtensible Markup Language): esso è un linguaggio che permette di definire la sintassi e le regole da utilizzare nella stesura di un documento. Il linguaggio XML permette di introdurre dei tags all’interno del documento; ad esso vanno associate delle regole sulla sintassi e sull’ordine di tali etichette, che vengono racchiuse in documenti DTD (Document Type Definition) o in XML Schema (più potente). Facendo uso di XML, quindi, possono essere catalogati i metadati, ed essere associati poi alle informazioni. Un ulteriore raffinamento è costituito da RDF, che, basato su XML, definisce dei tags, accettati nell’RDF Schema, che scompongono logicamente una frase in soggetto-predicato-oggetto. Infine, per dare un significato alle parole e metterle in relazione tra di loro, è necessario creare un’ontologia, ossia una specifica formale ed esplicita di una conoscenza condivisibile. Il linguaggio che permette di esprimere le relazioni logiche che sussistono tra le parole di uno stesso concetto è OWL, anch’esso basato su XML. 3 Immagini Un’immagine raster, o immagine bitmap, è una matrice di n x m elementi in cui ciascuno di essi è una funzione f (x, y) di due variabili x e y che rappresentano le coordinate spaziali, mentre la f è il valore d’intensità associata ad ogni coppia di punti, detti pixel. Nel caso in cui l’immagine fosse in scala di grigi, il valore della funzione rappresenta il livello di grigio. La funzione f (x, y) è una combinazione delle proprietà elettromagnetiche delle onde, in particolare dell’illuminazione e della riflettanza; l’immagine reale viene acquisita da sensori elettronici sottoforma di impulsi elettromagnetici, dopodichè subisce un processo di conversione A/D, che consiste in un campionamento delle coordinate ed in una quantizzazione dell’intensità. In particolare, se si definiscono L livelli di grigio, esso dovrà essere una potenza di 2, quindi L = 2k con k numero dei bit necessari. Le immagini si classificano in base alla: risoluzione spaziale, che fa riferimento ai pixels presenti nell’unità di misura (ad esempio, dots per inch, dpi ) e quindi più campioni ci sono nell’unità maggiore è la risoluzione; alla risoluzione dell’intensità, che fa riferimento al più piccolo cambio d’intensità percepibile, e quindi maggiori sono i bit su cui vengono codificate le immagini più alta è la risoluzione. Nelle immagini binarie o monocromatiche i pixel sono codificati su un singolo bit (0 o 1, nero o bianco, assenza o presenza di luce). Nelle immagini ad 8 bit ogni pixel ha un valore di livello di grigio che varia tra 0 e 255, quindi ogni pixel è codificato su un byte: i valori più scuri tendono allo 0, quelli più chiari tendono al 255. I formati più diffusi per le immagini a colori sono quelli a 24-bit e a 8-bit. Nelle immagini a 24-bit ogni pixel è rappresentato da 3 byte, solitamente per uno spazio dei colori RGB, ciascuno dei quali indica un livello di grigio dei 3 colori. Quindi, i colori che possono essere ottenuti combinando i 3 livelli sono circa 16 milioni, quindi per un’immagine di risoluzione media si occupa circa 1MB. Nelle immagini ad 8-bit ogni pixel assume uno dei 28 = 256 colori possibili; tali immagini utilizzano il meccanismo della Look-Up Table o LUT: invece di memorizzare informazioni sul colore, viene memorizzato un’indice della LUT (a 8-bit) che fa riferimento ad una particolare mappa di colori, risparmiando un 3 gran numero di operazioni computazionali. Per costruire la LUT possono essere seguiti due approcci: • nel primo gli 8 bit su cui sono codificati il rosso R e il verde G vengono mappati su 3 bit, mentre il blu B viene mappato su 2 bit, ottenendo così 28 = 256 indici per la LUT; la scelta di riservare un bit in meno per il blu dipende dal fatto che l’occhio umano è meno sensibile alle variazioni di questo colore. Una volta fatto ciò, ogni pixel nell’immagine viene sostituito con il corrispondende indice della LUT a 8-bit, che servirà per generare un colore a 24 bit; • nel secondo può essere utilizzato l’algoritmo della mediana (Median Cut Algorithm): per ogni bit di ciascun colore viene individuata la mediana, i valori che sono minori della mediana vengono etichettati con 0, quelli maggiori con 1; questo procedimento viene fatto quindi per i tre colori R,G e B sugli 8 bit, determinando 256 indici della LUT. 3.1 Formati delle immagini Il formato di un file fa riferimento al modo in cui le informazioni vengono organizzate in esso. Uno dei formati immagine più comuni ed il primo ad essere utilizzato nel Web è GIF (Graphics Interchange Format): esso permette di rappresentare le immagini a colori su 8 bit, è un formato senza compressione dei dati e può essere utilizzato per creare piccole animazioni, in quanto supporta l’interlacing, cioè la sovrapposizione ripetuta di più immagini bitmap. In generale, il formato GIF87 porta con sè diverse informazioni nell’header: • GIF signature, che identifica il tipo di file immagine GIF87 • screen descriptor, che porta informazioni sull’ampiezza, altezza, numero di pixel e background dell’intera GIF • global color map • per ogni immagine della GIF: – image descriptor, che dà informazioni sulla posizione dell’immagine, il numero dei pixel e sulla mappa dei colori da utilizzare – local color map, indicizzata per i tre colori R,G e B – raster data, che rappresenta i pixel • GIF terminator, che indica la fine del file. Un formato successivo a GIF, utilizzato sempre prevalentemente nel mondo web, è PNG (Portable Network Graphics): supporta immagini fino a 48 bit e contiene informazioni sulla correzione del gamma per una corretta visualizzazione dell’immagine sui display. Altro formato grafico è TIFF (Tagged Image File Format), in cui le informazioni di supporto sono collegate tramite tags: il vantaggio principale di TIFF è che la stessa immagine può essere visualizzata in modi differenti, per questo è usato spesso dagli scanner e dalle stampanti. Un formato immagine molto diffuso è JPEG, ottenuto con l’omonima compressione (Vedi più avanti). 4 PostScript è un linguaggio di descrizione di pagina interpretato particolarmente adatto alla descrizione di pagine ed immagini, inizialmente usato come linguaggio per il controllo delle stampanti. Lo scopo principale per cui venne ideato era lo sviluppo di uno strumento per descrivere pagine di testo e grafica in modo indipendente dalla risoluzione e dal dispositivo di visualizzazione. Grazie a questo linguaggio quindi è possibile trasferire da un computer ad un altro informazioni senza perdita di qualità. Il formato file più moderno che ha sostituito PostScript è PDF (Portable Document Format): la differenza col predecessore è che PDF non è un linguaggio ma un formato, quindi non ha bisogno di un interprete per essere letto; in più, PDF memorizza tutte le informazioni in un singolo file, a differenza di PostScript. 4 I colori La luce è un’onda elettromagnetica, caratterizzata da una certa lunghezza d’onda. A seconda di questo valore, l’occhio umano può percepire determinati colori: in particolare, la luce si trova nello spettro elettromagnetico compreso tra 400 e 700nm di lunghezza d’onda, che costituisce lo spettro del visibile, prima e dopo del quale l’occhio umano non riesce più a captare informazioni. I valori di lunghezza d’onda più bassi (quindi con una frequenza più elevata) producono tonalità di blu, mentre i valori di lunghezza d’onda più alti (cioè con frequenza più bassa) producono tonalità di rosso. La luce viene percepita dall’occhio umano tramite due tipi di cellule: i coni sono sensibili alle variazioni dei colori, in particolari di R,G e B (soprattutto R e G) mentre i bastoncelli sono sensibili alle variazioni di luminosità. Inoltre, gli oggetti riflettono la luce in modo differente: in particolare, i colori chiari riflettono di più mentre quelli scuri assorbono maggiormente; tale proprietà è detta riflettanza. Quindi, se indichiamo con E(λ) la PSD (Densità spettrale di potenza) di un raggio luminoso, con S(λ) la riflettanza di un oggetto e, ad esempio, con qR (λ) la sensibilità dell’occhio di captare il colore rosso, l’integrale del prodotto delle funzioni determina il valore di rosso percepito: Z R = E(λ)S(λ)qR (λ) dλ (1) Ovviamente, questo vale anche per il verde e per il blu. La percezione del colore, tuttavia, dipende anche da altri fattori, quali gli altri colori presenti sullo sfondo e l’elaborazione del cervello. Lo spazio RGB, ad esempio, non è percettivo, non è il modo con cui il cervello umano rappresenta i colori, che è invece sottrattivo. In generale gli attributi percettivi del colore sono: • la tinta (hue): il colore puro senza l’aggiunta di tonalità di grigio, identifica un colore specifico facente capo ad una lunghezza d’onda predominante; • la saturazione (saturation): indica la purezza del colore, e dipende quindi dalla quantità di bianco mescolata al colore. Minore sono le lunghezze d’onda facenti parte dello spettro del colore, più quest’ultimo è saturo; • la luminosità (lightness o chiarezza): la quantità di luce che il colore sembra emettere rispetto allo sfondo bianco. 5 Altri parametri descrittivi sono la brillanza (brightness), che è una misura assoe.lla quantità di luce emessa da un colore, a differenza della luminosità che è una misura relativa, e la croma (chroma), che rappresenta la quantità relativa del colore rispetto al bianco. Nella visualizzazione dei colori, i display adottano delle specifiche differenti: ciò comporta che una stessa immagine appaia con colori ”sbiaditi” rispetto ad un altro display. Ciò è dovuto alla relazione che sussiste tra la tensione del monitor e l’intensità luminosa, il valore di gamma; per risolvere tale fenomeno viene adottata la correzione gamma, una trasformazione non lineare che aggiusta automaticamente i valori dei colori. 4.1 Spazio dei colori La rappresentazione dei colori si basa su modelli differenti tra loro, a seconda degli usi che se ne deve fare. In generale, esistono due tipi di categorie, lo spazio dei colori ”additivo” e lo spazio dei colori ”sottrattivo”. Il primo, come lo spazio RGB, descrive la situazione in cui il colore è creato combinando luci provenienti da sorgenti differenti; il valore che si ottiene sommando tutti i colori è il bianco (su 8 bit, è il valore 255), eliminando tutti i colori si ottiene il nero (valore 0). Il secondo, come lo spazio CMY, genera i colori a partire da altri ”eliminando” la luce che ciascuno di loro emette; con tale tecnica è possibile infatti creare i colori tramite tempere o inchiostri. Il valore ottenuto combinandoli tutti è il nero (valore 255) mentre se non c’è colore ovviamente si ottiene il bianco (valore 0). Lo spazio dei colori CIE XYZ 1931 fu uno dei primi modelli ad essere proposto. Esso descrive i colori come una combinazione lineare dei 3 colori primari, ma effettuando delle trasformazioni riguardo la percezione di essi; in particolare, poichè l’occhio umano è sensibile al colore tramite tre valori ”tristimolo”, tali valori sono Z X= E(λ)x(λ)dλ (2) E(λ)y(λ)dλ (3) E(λ)z(λ)dλ (4) Z Y = Z Z= con X componenti del rosso a valori positivi, Y luminosità e Z valore del blu. Il diagramma cromatico dello spazio CIE 1931 può essere rappresentato in 2D, rappresentando lungo due assi il rosso e il verde e per sottrazione il blu. Il gamut di un dispositivo è l’insieme dei colori che il dispositivo è in grado di produrre, riprodurre o catturare ed è un sottoinsieme dei colori visibili. Poiché per descrivere i colori esistono diversi modelli, con il gamut di un modello di colore s’intende l’insieme di tutti i colori descrivibili da quel particolare modello di colore. Quando un colore non può essere descritto da un certo modello, si dice che, rispetto a quel modello di colore, è ”fuori gamut”. La maggior parte dei modelli di colore è un sottoinsieme dello spazio dei colori CIE 1931. Lo spazio dei colori RGB è un modello additivo, basato sui 3 colori rosso, verde e blu. Questo modello è molto utilizzato nella visualizzazione delle immagini, in quanto la percezione umana elabora i colori in un modo molto simile 6 a quello dell’RGB. La scelta su questi 3 colori, invece che quelli primari rosso, giallo e blu, dipende dal fatto che tramite R,G e B è possibile coprire in modo maggiore la regione definita dallo spazio dei colori CIE 1931. Un’immagine rappresentata nello spazio RGB è ottenuta come sovrapposizione di 3 immagini, ciascuna con i livelli d’intensità per ciascun colore base. Da un punto di vista concettuale, RGB può essere rappresentato come un cubo, i cui vertici sono R,G,B,C,Y,M, bianco e nero, i cui spigoli rappresentano sfumature di questi colori e la cui diagonale dal vertice nero a quello bianco rappresenta i livelli di grigio. Lo spazio dei colori HSI è uno spazio additivo, basato sui valori di tinta (Hue), saturazione (Saturation) e intensità (Intensity). E’ uno spazio poco intuitivo per la percezione umana ma molto utile per l’elaborazione hardware, in quanto permette di descrivere i colori tramite parametri oggettivi. I tre valori possono essere ricavati a partire dal cubo rappresentativo RGB: sviluppando il cubo come un esagono, i sei vertici rappresentano i sei colori primari e secondari mentre il centro rappresenta il bianco e dall’altro lato il nero; la tinta è l’angolo che si forma partendo dal rosso, la saturazione è la distanza dall’origine al valore, l’intensità si ricava dal cubo 3D come il valore di profondità del cubo stesso. Lo spazio dei colori CIELAB permette di rappresentare i colori in modo preciso: ognuno di essi è individuato da un valore di luminosità L, che indicano in percentuale i livelli di grigio, e da due parametri a e b che rappresentano due gamme di colori. In questo modo include tutti i colori percepibili e copre il gamut degli spazi RGB e CMY, utilizzati da monitor e stampanti; quindi è indipendente da piattaforme e periferiche. Per questo motivo è utilizzato da software di Image Processing, come Photoshop, come spazio intermedio nel passaggio da RGB a CMY e viceversa. Lo spazio dei colori CMY è uno spazio sottrattivo: i colori vengono ottenuti ”sottraendo” la luce emessa da altri colori, il bianco vale 0 e il nero vale 255. Spesso, poichè questo spazio è utilizzato per effettuare delle stampe, per evitare che i colori vengano consumati per produrre il nero viene aggiunto il colore Black, determinando lo spazio CMYK. E’ possibile effettuare il passaggio da uno spazio dei colori ad un altro sfruttando delle matrici di trasformazione T, che associano, ad esempio nel caso RGB->HSI, al vettore [R,G,B] i valori trasformati tramite T di [H,S,I]. Per ottenere una trasformazione da RGB a CMY e viceversa basta sottrarre un vettore colonna unitario ai valori dello spazio di partenza. 5 Image Processing L’Image processing si occupa di effettuare elaborazioni su un’immagine, quali ridimensionamento, rotazione, cambiamento di contrasto e cosi via. In particolare, lo scopo del miglioramento dell’immagine (Image enhancement) è di rendere l’immagine sorgente più adatta per una particolare applicazione; ciò vuol dire che non esiste un miglioramento oggettivo dell’immagine, l’elaborazione dipende dall’uso che se ne deve fare dell’immagine, cioè l’Image enhancement è orientato al problema. Le elaborazioni lavorano in due diversi domini: il dominio spaziale, che manipola direttamente i pixels di un’immagine, e il dominio della frequenza, che modifica le immagini mediante la trasformata di Fourier. Le tecniche che 7 lavorano nel dominio dello spazio sono solitamente trasformazioni lineari T dei valori f (x, y) assunti dai vicini (neighborhoods) di un determinato pixel; tale regione è solitamente un’area quadrata o rettangolare. Nel caso più semplice, la regione riguarda il singolo pixel, e l’elaborazione è una trasformazione del livello di grigio del pixel tramite T . Solitamente, le trasformazioni si basano su note funzioni matematiche, come la retta, il logaritmo, l’esponenziale, la radice e la potenza. In particolare, la funzione che calcola il negativo di un’immagine è una retta con coefficiente angolare negativo, che associa ogni valore di colore al suo opposto (ad esempio, il valore 0 diventa L − 1, con L massimo valore rappresentabile). La trasformazione logaritmica permette di ”espandere” i valori dei pixel scuri di un’immagine e convertirli in pixel più chiari, in modo da mettere in risalto i dettagli. La funzione potenza è utilizzata per effettuare la correzione di gamma, ovvero quel parametro tipico di un display che caratterizza la visualizzazione dei colori di un’immagine: a seconda che γ sia minore o maggiore di 1 si parla di ”compressione” o ”espansione gamma”. L’aumento della brillanza dell’immagine viene realizzata da una retta, non passante per l’origine con coefficiente angolare unitario, che aumenta l’intensità dei pixel di un certo valore; in questo modo i pixel con un’intensità più elevata vengono portati in saturazione e diventano bianchi. In modo esattamente opposto viene realizzata la diminuzione della brillanza. Nel caso di un’immagine a colori, quest’operazione deve essere effettuata per ogni colore dello spazio. L’aumento del contrasto, cioè del rapporto tra oggetto e sfondo, viene effettuato tramite una retta, passante per il centro dei valori su cui è rappresentata l’immagine, e con un coefficiente angolare maggiore di 1, il cui risultato è che i pixel con valori d’intensità intermedi vengono portati a valori più chiari o più scuri, a seconda del valore più vicino; quindi, in questo modo, i pixel molto scuri diventano praticamente neri e quelli molto chiari praticamente bianchi. Se il coefficiente angolare fosse ∞ avremmo un’immagine di soli pixel bianchi e neri. In modo esattamente opposto si può diminuire il contrasto di un’immagine; in questo caso, avendo una retta con coefficiente angolare minore di 1, se questo valesse 0 l’immagine sarebbe completamente grigia. Il contrasto può essere modificato anche utilizzando una funzione potenza, la contrast streching, che rende più precisa l’elaborazione, in quanto non porta subito in saturazione i valori scuri e chiari. Ovviamente, tutte queste elaborazioni non sono reversibili, in quanto un certo numero di valori viene portato in saturazione, e quindi non possono essere riportati allo stato originario. Una rappresentazione molto utile per l’uomo ma soprattutto per le applicazioni di grafica è l’istogramma di un’immagine: data un’immagine rappresentata su k livelli di grigi, esso è una funzione di k elementi, in cui ciascuno di essi riporta l’occorrenza dei pixel per quel dato livello di grigio: h[rk ] = nk (5) Se ogni elemento dell’istogramma viene normalizzato per il numero di pixel n, si ottiene la probabilità che un pixel assuma un determinato livello di grigio: p[rk ] = nk /n (6) Nel caso di un’immagine a colori, per ciascuno dei colori dello spazio viene definito un’istogramma, che avrà tanti elementi quanti sono i livelli d’intensità 8 per quel dato colore (che dipende sempre dal numero di bit su cui vengono codificati). La luminosità di un pixel è data invece dalla media degli istogrammi di ciascun colore. 5.1 Filtraggio nello spazio Tale approccio agisce direttamente sui singoli pixel. Se consideriamo un filtro lineare, che è caratterizzato da una certa maschera di valori, esso viene applicato su una zona d’interesse: il risultato in uscita non è altro che la somma dei prodotti dei valori dei pixel con i corrispondenti coefficienti del filtro. Solitamente quindi la maschera agisce a partire dal centro della zona d’interesse per una regione rettangolare m x n. I filtri smoothing sono utilizzati per lo sfocamento delle immagini e per la riduzione del rumore, operazioni preliminari che vengono effettuate su un’immagine per eliminare piccoli dettagli prima di effettuare l’estrazione di feature. Esistono due tipi di filtri spaziali per lo smoothing: il filtro lineare (Smoothing Linear Filter ) e il filtro mediano (Order-Statistics Filter ). Il filtro lineare effettua semplicemente la media dei pixel contenuti all’interno della regione su cui è applicato il filtro; tale media può essere standard oppure pesata per un certo valore (average weighted ), in modo che vengano sfocati maggiormente gli elementi sui bordi della regione filtrata. Il filtro mediano è un filtro spaziale non lineare, la cui maschera è basata sui valori dei pixel filtrati: per ciascuna regione ordina i valori dei pixel, individua il valore mediano e lo sostituisce al pixel che si trova al centro della regione. In ogni caso, quindi, per effettuare lo sfocamento dell’immagine (blurring) viene calcolata una media, che equivale per valori analogici ad un integrale. Poichè un filtro lavora su regioni solitamente quadrate, i bordi dell’immagine devono essere trattati in modo opportuno; esistono diversi approcci, che prevedono, ad esempio, di tralasciare i pixel al di fuori dell’immagine, di imbottire l’immagine con pixel bianchi o neri (creando un contorno), di replicare i pixel sui bordi o di troncare l’immagine. L’operazione inversa allo smoothing è lo sharpening, cioè la tecnica che accentua, per quanto possibile, i dettagli di un’immagine, la sua nitidezza, e mette in risalto i contorni (Edge Detection). Così come lo smoothing opera in sostanza un’integrazione, così lo sharpening effettua una differenziazione nello spazio; viene quindi realizzata dai filtri derivativi. Tale operazione è importante nei punti di discontinuità dell’immagine, nelle zone a livello di grigi costanti e nelle rampe a livelli di grigio, in quanto caratterizzano zone, punti e linee di rumore nell’immagine. La derivata prima di una funzione ad una variabile f (x) viene approssimata come differenza di due valori consecutivi ∂f = f (x + 1) − f (x) ∂x (7) essa deve valere 0 nelle zone costanti e un valore diverso da 0 all’inizio delle discontinuità e lungo le rampe. La derivata seconda di una funzione ad una variabile f (x) viene approssimata come ∂2f = f (x + 1) + f (x − 1) − 2f (x) (8) ∂x2 9 essa deve valere 0 nelle zone costanti e lungo le rampe e un valore diverso da 0 all’inizio e alla fine delle discontinuità. Quindi, la derivata prima rende i contorni spessi mentre la seconda li rende sottili. Calcolando la derivata seconda lungo le x e lungo le y, si ottiene l’operatore isotropo di derivata seconda di una funzione a due variabili f (x, y), l’operatore Laplaciano ∇2 f = ∂2f ∂2f + 2 2 ∂x ∂y che viene approssimato per l’implementazione digitale come ∇2 f = f (x + 1, y) + f (x − 1, y) + f (x, y + 1) + f (x, y − 1) − 4f (x, y) L’immagine g(x, y) su cui viene applicato il filtro derivativo è una somma algebrica dell’immagine originale e del filtro laplaciano: g(x, y) = f (x, y) ± ∇2 f Se il valore centrale del filtro è negativo ottengo un filtro derivativo, che mette in evidenza i dettagli; se è positivo diventa un filtro lineare medio, che effettua lo smoothing. Un altro modo per aumentare la nitidezza di un’immagine consiste nel sottrarre ad essa una sua versione sfocata (Unsharp masking): fs (x, y) = f (x, y) − fb (x, y) con fs immagine nitida ed fb immagine sfocata. Per quanto riguarda la derivata prima, nell’Image Processing essa è realizzata tramite l’ampiezza del gradiente: q mag(∇f ) = G2x + G2y tale filtraggio, a differenza del laplaciano, non è isotropo perchè agisce solo lungo la direzione verticale e orizzontale. 10 Il metodo di Roberts rappresenta un’approssimazione del filtro derivativo del primo ordine: esso utilizza due filtri del tipo 1 0 0 −1 e 0 −1 1 0 Dopo aver calcolato la convoluzione dell’immagine con i due filtri, per ciascuna coppia di punti (x, y) vengono calcolate ampiezza e fase di un gradiente approssimato. In modo simile al metodo di Roberts, il metodo di Sobel approssima il gradiente mediante due filtri, uno per la direzione orizzontale e uno verticale, in cui rispettivamente la riga e la colonna centrale sono nulle. 1 2 1 0 0 0 −1 −2 −1 e 1 0 −1 2 0 −2 1 0 −1 Anche in questo caso, l’immagine viene convoluta con questi due filtri e vengono calcolati modulo e fase del gradiente approssimato di ciascun punto. 6 Features Per definire una similarità tra oggetti multimediali è necessario che questi vengano descritti da particolari caratteristiche univoche, le feature, e che queste vengano confrontate in modo opportuno. Per fare ciò è necessario definire una metrica, ossia una distanza caratterizzata da un insieme di proprietà. Una qualunque funzione d che descriva una metrica deve soddisfare quattro assiomi: • positività d(x, y) ≥ 0 • identità d(x, y) = 0 ⇐⇒ x = y • simmetria d(x, y) = d(y, x) • disuguaglianza triangolare d(x, y) ≤ d(x, z) + d(z, y) Le metriche più diffuse sono quelle che si applicano negli spazi euclidei : dati due punti A e B • la distanza L1 (o Manhattan Distance) è la somma delle proiezioni dx e dy sugli assi (la somma della differenza delle componenti) d = dx + dy • la distanza L2 (o distanza Euclidea) è la radice quadrata della somma del quadrato delle proiezioni dx e dy sugli assi p d = dx2 + dy 2 11 • in generale, la distanza Lp (o distanza di Minkowski) è la radice pesima della somma della potenza p-esima delle proiezioni dx e dy sugli assi p d = p dxp + dy p • all’infinito, la distanza L∞ è il massimo tra dx e dy d = max(dx, dy) Mediante la metrica, quindi, è possibile effettuare delle comparazioni di oggetti multimediali, in quanto permettono di indicizzare informazioni su di essi come vettori di proprietà, le feature appunto. Esistono numerose possibili features per le immagini: l’istogramma dei colori, la trama (texture), i contorni, le forme ecc.. Poichè l’operazione di estrazione delle features e il loro confronto può essere computazionalmente molto elevato, lo scopo è quello di minimizzare il numero di operazioni da calcolare. I singoli pixel, ad esempio, non possono essere utilizzati come features in quanto si associerebbe per ogni immagine un vettore di dimensioni n x m. Il primo passo per ricavare informazioni dalle immagini, quindi, è quello di scegliere le features appropriate; la scelta dipende da più fattori come l’ambito applicativo, la percezione umana e la potenza descrittiva degli oggetti. Una buona feature è quella che permette all’uomo di differenziare oggetti diversi all’interno di una scena ed è significante, cioè porta un numero d’informazioni più elevato di altre; deve quindi rispecchiare la percezione umana quanto più è possibile, e devono essere tralasciate feature associate ad informazioni che occorrono più spesso di altre. E’ necessario dunque utilizzare tecniche che permettano di scegliere tra le feature quelle che separano meglio gli oggetti multimediali considerati. Una delle tecniche prese in prestito dalla statistica che permette di semplificare i dati è la Principal Component Analysis, PCA, nota anche come trasformata di Karhunen-Loeve. Lo scopo primario di questa tecnica è la riduzione di un numero più o meno elevato di variabili (rappresentanti altrettante caratteristiche del fenomeno analizzato) in alcune variabili latenti (feature reduction) caratterizzate da una distanza metrica quanto più elevata è possibile. Ciò avviene tramite una trasformazione lineare delle variabili che proietta quelle originarie in un nuovo sistema cartesiano nel quale la nuova variabile con la varianza più grande viene proiettata sul primo asse, quella con la seconda varianza più grande sul secondo asse e così via. Un metodo più semplice per calcolare queste variabili si basa sulla matrice di covarianza: innanzitutto viene creata una matrice X con una riga per ogni dato, viene sottratta la media di ogni dato dalla corrispondente riga, si calcola la matrice di covarianza di X, si trovano gli autovalori e gli autovettori di questa matrice; le PC sono gli autovettori corrispondenti ai più grandi autovalori. Collegata alla PCA vi è la Single Value Decomposition, SVD, una tecnica algebrica che permette di ridurre il rango della matrice di covarianza, utilizzando i suoi autovalori e autovettori. La Principal Component PC, quindi, al di là della sua natura algebrica definisce la distanza migliore tra gli oggetti, ed è quindi una combinazione lineare delle feature stesse. Se consideriamo, dunque, un database multimediale, la sua compattezza è la somma delle similarità tra gli oggetti; più gli oggetti sono simili maggiore è la compattezza del database. Se esso è troppo compatto non è utile, in quanto non permette di distinguere in modo adeguato gli oggetti; per cui una 12 feature è buona se, nel momento in cui viene rimossa, aumenta la compattezza del database (lo scopo è sempre quello di distanziare gli oggetti). 7 Visual Information Retrieval Lo scopo dei sistemi di Visual Information Retrieval (o Content-Based Information Retrieval CBIR) è di recuperare da un database multimediale immagini o sequenze d’immagini rilevanti per una query. E’ un’estensione delle attività di recupero effettuate sui database relazionali, la cui differenza principale è che il risultato della query non è univoco ma si basa su similarità tra le feature che descrivono gli oggetti multimediali. Elementi come il colore, la tessitura, le forme, le relazioni spaziali sono usate come indizi per recupare immagini con un contenuto simile. In un database di questo tipo è necessario gestire, insieme ai dati, metadati indipendenti dal contenuto (autore, titolo, formato, ecc..), dati dipendenti dal contenuto (colore, forma, tessitura) e metadati descrittivi, che fanno riferimento alla semantica dell’immagine. La prima generazione della Visual Information Retrieval prevedeva l’utilizzo di attributi testuali associati a video e immagini: i dati dipendenti dal contenuto erano individuati da ”keywords”, i metadati descrittivi da ”scripts” scritti da esperti, e quindi le query erano basate sui classici motori di ricerca testuali, che effettuano una ricerca sintattica. I problemi con questro approccio sono molteplici: innanzitutto, è necessario descrivere manualmente e a parole ogni elemento del database, la lingua utilizzata non è univoca, la descrizione delle immagini non è oggettiva ma dipende dal punto di vista di chi la compone e infine potrebbero perdersi dei dettagli nella descrizione. La fase successiva, con i CBIR, ha permesso di descrivere in modo oggettivo le immagini (eliminando la percezione della persona che deve descrivere a parole l’oggetto) in modo automatizzato e molto più velocemente. Per ciascuna immagine vengono calcolate un insieme di features descrittive: le query si basano su esempi visivi (Query by Example), cioè il sistema valuta la similarità tra l’immagine inserita dall’utente e quelle presenti nel database, restituendo come risultato le immagini ordinate per valori di similarità percentuali decrescenti. Inoltre, in questo modo i risultati della query vengono mostrati all’utente che può effettuare un raffinamento della query successiva, in quanto può giudicare il risultato tramite un voto (relevance feedback). Le Query by Content, invece, danno informazioni in modo testuale sul contenuto di un’immagine; queste parole, affinchè il match abbia successo, devono essere presenti nei metadati. Altri tipi di query by Example sono: le Iconic queries, basate sul linguaggio iconico in modo da dare un significato grafico e spaziale agli oggetti; le query by painting, basate su un particolare colore, le query by sketch, che recuperano immagini in base alle forme, le query by image, che fornisce in input un prototipo d’immagine con un certo colore e tessitura. 7.1 Feature Detection Le possibili features globali di un’immagine sono il colore, la tessitura (texture), la forma, la struttura, le relazioni spaziali e (nel caso dei video) il movimento. Esse sono dette ”features di basso livello”, perchè riguardano caratteristiche dirette dell’immagine a differenza delle ”features di alto livello”, che rappresentano 13 il contenuto semantico di un’immagine. Le features di basso livello dovrebbero essere invarianti per scala, traslazione, rotazione, cambi d’illuminazione e punti di vista. Per rilevare i contorni di un’immagine (Edge Detection) possono essere utilizzati i filtri derivativi, che approssimano operatori come il gradiente e il laplaciano, oppure l’algoritmo molto diffuso per questo scopo del Canny Edge Detector. Per effettuare invece la blob detection, che serve a trovare punti d’importanza di un’immagine che non si trovino lungo i bordi, vengono utilizzati due operatori, il Laplacian of Gaussian (LoG) e la Difference of Gaussian (DoG), che rappresenta un’ottima approssimazione del primo operatore e più semplice da realizzare: esso consiste nel convolvere l’immagine originaria in scala di grigi con due gaussiane, di valori di σ per lo sfocamento differenti, e di effettuarne la differenza pixel per pixel; poichè la DoG realizza un filtro passa-basso, l’effetto è quello di mettere in evidenza i dettagli dell’immagine. Per applicare la DoG, o altre tecniche di blob detection, spesso è utile creare per un’immagine una piramide gaussiana: essa viene costruita a partire dall’immagine originaria con valori di dimensione e sfocatura via via decrescenti; in questo modo si ottiene che le immagini in cima alla piramide contengono i dettagli predominanti dell’immagine, e quindi su di esse può essere applicata la DoG. Un’altra tecnica per l’edge detection è la wavelet ortonormale e la sua trasformata. Essa, letteralmente ”ondina”, rappresenta un segnale mediante l’uso di una forma d’onda oscillante a decadimento rapido, la wavelet madre. I tipi di wavelet più famosi sono quella di Haar, di Daubechi e il Mexican Hat. Nell’ambito dell’Image processing viene utilizzata la trasformata wavelet discreta (DWT), che rappresenta il segnale d’ingresso in una forma scalata e traslata. A differenza della trasformata di Fourier, che rappresenta un segnale solo nel dominio della frequenza, la trasformata wavelet rappresenta il segnale sia nel tempo che nella frequenza, ed è inoltre computazionalmente meno complessa. Per applicarla ad un’immagine e rilevare i contorni, è necessario utilizzare una wavelet discreta a due dimensioni, che agisca sulle righe e sulle colonne: ciò che viene effettuato è una combinazione di due filtraggi passa-basso e passaalto e di sottocampionamenti prima lungo le righe e poi lungo le colonne, che permettono di recuperare informazioni alle alte frequenze. La wavelet inoltre è utilizzata nella compressione dei dati per il formato immagine JPEG 2000. Un algoritmo molto efficace per estrarre e descrivere dalle immagini feature locali invarianti per scala, rotazione e traslazione è SIFT (Vedi documentazione). Una delle feature globali più comuni associate alle immagini è il colore. Il recupero di immagini basate sulla somiglianza del colore si ottiene calcolando l’istogramma del colore per ciascuna immagine in modo da poter identificare l’occorenza dei pixel per ogni livello d’intensità di ogni colore. Per effettuare il confronto si possono scegliere spazi di colore differenti, come RGB o HSI, a seconda degli usi. Questo metodo cerca di segmentare la porzione di colore nella regione e la relazione spaziale tra le diverse regioni di colore. Questa è una delle tecniche più usate dal momento che non dipende dalle dimensioni dell’immagine nè dal suo orientamento. Per calcolare la similarità tra le immagini in base al colore, il metodo più semplice è di utilizzare una metrica euclidea sugli istogrammi delle immagini (distanza di Manhattan o distanza euclidea); un altro metodo è la metrica di Swain e Ballard, che si basa sulla ricerca del valore degli istogrammi nelle posizioni omologhe. Una funzione applicata ad immagini reali per generare una metrica da utilizzare nel confronto si basa sull’autocorrelogramma 14 dei colori : per ciascun pixel dell’immagine a distanza k viene calcolata la probabilità che essi abbiano lo stesso colore; in questo modo la metrica restituisce informazioni sul colore e sulla distanza spaziale, e dato che le immagini reali sono caratterizzate da colori abbastanza contigui, tale probabilità è spesso elevata. Dopodichè si costruisce un correlogramma tra due immagini, basate sui rispettivi autocorrelogrammi dei colori. Un’altra feature comune è la tessitura (texture), che cerca di descrivere caratteristiche visive ripetitive nelle immagini, difficili da rappresentare testualmente. La tessitura si rappresenta mediante ”texels” (texture elements) che si collocano in serie a seconda di quante texture sono state reperite nell’immagine. Le caratteristiche della tessitura più comuni sono quelle di Tamura: sono la granularità, la direzionalità, il contrasto e la ripetitività. Due immagini con tessitura differente hanno delle componenti spettrali in alta frequenza diverse. 8 8.1 Video e Audio Video La trasmissione video analogica può avvenire in due modi differenti: nel Component Video (video a componenti ) le informazioni che fanno riferimento ai 3 colori vengono trasportate su tre cavi separati, mentre nel Composite Video (video composito) le informazioni vengono fuse in un unico flusso trasportato da un singolo cavo. Il primo tipo era utilizzato largamente in passato, ma è ancora usato oggi nelle applicazioni video che devono salvaguardare la qualità. Il secondo tipo è quello utilizzato nella maggior parte dei dispositivi domestici; esso trasporta due informazioni, ”crominanza” (colore) e ”luminanza” (intensità) in un unico segnale, con una rappresentazione dei colori YUV o YIQ e con modalità di codifiche che dipendono dai vari Stati (PAL, NTSC, SECAM). Un compromesso tra le due trasmissioni è l’S-Video: esso utilizza due cavi, uno per la luminanza e uno per la crominanza, separando i flussi d’informazione ma evitando che ci siano interferenze tra i colori e i livelli di grigio. La trasmissione video digitale è quella attualmente più utilizzata perchè comporta molti vantaggi: innanzitutto i video possono essere memorizzati facilmente su dispositivi di memoria ed elaborati per successive modifiche, si può accedere direttamente ad un punto del video (evitando lo scorrimento del ”nastro”), registrazioni successive non degradano la qualità originaria, c’è maggiore tolleranza al rumore (criterio MAP di trasmissione numerica). Il video può essere creato direttamente in digitale oppure può essere ottenuto da quello analogico tramite una conversione A/D. Gli standard più comuni per il video digitale vengono prodotti dal CCIR, una commissione internazionale che gestisce le risorse e gli standard delle telecomunicazioni mondiali. Uno di essi è l’HDTV: il suo punto di forza non è tanto l’aumento di risoluzione delle immagine quanto l’aumento del campo visivo, specialmente in ampiezza, con il passaggio dall’aspect ratio 4:3 a quello 16:9; è caratterizzato inoltre da una risoluzione di 720p o superiore (con p numero di linee verticali). 15 8.2 Audio Il suono è un’onda generata dalla pressione delle molecole nell’aria. Essendo per natura un segnale analogico, per digitalizzarlo è necessario effettuare una conversione A/D di un segnale monodimensionale, ovvero campionamento del tempo e quantizzazione dell’ampiezza; tipico range di valori di frequenza di campionamento per l’audio sono da 8kHz a 48kHz. Prima di effettuare la conversione A/D, il segnale audio viene filtrato con dei filtri passa-banda per rimuovere frequenze non volute; la scelta delle frequenze dipende dalla natura del suono, ad esempio per il parlato il range di frequenze utili va da 50Hz a 10kHz. MIDI (Musical Instrument Digital Interface) è un protocollo per l’interazione degli strumenti musicali elettronici con il computer. Esso è un linguaggio di scripting: descrive il modo e il tempo con cui i suoni dei vari strumenti devono essere riprodotti. Lo standard è supportato dalla maggior parte dei sintetizzatori, in modo che i suoni creati con uno di questi possano essere manipolati e riprodotti anche da altri. Il protocollo utilizza 16 canali, ciascuno associato ad uno strumento, che possono essere riprodotti singolarmente o in parallelo; in ogni caso, la comunicazione dati è di tipo seriale. Solitamente i dispositivi con un’interfaccia MIDI sono o di input (computer) o di output (sintetizzatore, cioè strumenti che creano suoni); esistono quindi 3 tipi di connettori: IN, OUT e THRU (se devono ritrasmettere i dati) e, come detto, un singolo dispositivo non avrà tutti questi connettori. Il messaggio MIDI è costituito da una serie di messaggi per il canale (tipo di connessione, canali attivi, ecc..) e di messaggi di sistema. 8.3 Compressione delle informazioni La compressione è il processo di codifica delle informazioni che permette di ridurre il numero totale dei bit su cui le informazioni vengono rappresentate. Se la compressione e la decompressione non comportano perdita d’informazione, il processo di compressione è detto lossless, altrimenti è detto lossy. Il compression ratio è definito quindi come B0 B1 con B0 numero di bit prima della compressione e B1 numero di bit dopo la compressione (quindi il rapporto sarà maggiore di 1). In teoria dei segnali, l’entropia definisce la quantità d’incertezza presente in un segnale aleatorio; nella compressione dati definisce il limite inferiore della compressione senza perdita: η = H(S) = − n X pi log2 pi i=1 dove S è l’alfabeto con cui sono codificate le informazioni, pi è la probabilità che occorra il simbolo si e −log2 pi indica la quantità d’informazioni contenute in si . 16 Quindi l’entropia rappresenta la quantità media delle informazioni contenute in ogni simbolo, e definisce il limite inferiore per il numero di bit da utilizzare per codificare ogni simbolo di S η≤l con l lunghezza media della parola codice. 8.3.1 Compressione lossless Il primo algoritmo di compressione dati lossless è stato Run-lenght coding, utilizzato nei fax. Esso inserisce una dipendenza tra un codice e quelli successivi recuperando informazioni dalla memoria. Questa codifica è applicabile quando le informazioni sono contigue, come ad esempio immagini con colori a tinta unita, in modo da utilizzare un codice molto ridotto per rappresentare un gruppo d’informazioni; in particolare viene memorizzato il valore dell’elemento che occorre, un carattere speciale e il numero di occorrenze. La codifica Variable-length coding permette di effettuare una compressione dei dati lossless utilizzando simboli a lunghezza variabile. Un algoritmo che adotta un approccio top-down è l’algoritmo di Shannon-Fano: si ordinano i simboli secondo un ordine decrescente per il numero di occorrenze; ricorsivamente si dividono i simboli in due parti, ciascuna approssimativamente con lo stesso numero di occorrenzei, fino a quando ciascuna non contiene solo un simbolo. In questo modo si ha che le parole con un’occorrenza maggiore sono codificate su un numero di bit inferiore. Un algoritmo che adotta, invece, un approccio bottom-up è l’algoritmo di Huffman. Questa tecnica funziona creando un albero binario di simboli: 1. ordina i simboli in una lista in base alle loro occorrenze 2. ripete i seguenti passi finché la lista non contiene un unico simbolo: • prende dalla lista i due simboli con la frequenza di conteggio minore. Crea un albero di Huffman che ha come figli questi due elementi, e crea un nodo di ”genitori” • assegna la somma del conteggio delle frequenze dei figli ai genitori e li pone nella lista in modo da mantenere l’ordine • cancella il figlio dalla lista 3. assegna una parola codice ad ogni elemento basandosi sul percorso da radice a foglia. Il vantaggio principale è che permette di codificare sul minor numero di bit possibile i simboli con le occorrenze maggiori. Inoltre, è un codice a ridondanza minima, in modo da evitare ambiguità in fase di decodifica. La compressione lossless nelle immagini adotta un approccio differenziale: utilizzando un operatore di differenza tra i pixel d(x, y) = I(x, y) − I(x − 1, y) oppure utilizzando l’operatore laplaciano discreto d(x, y) = 4I(x, y) − I(x, y − 1) − I(x, y + 1) − I(x + 1, y) − I(x − 1, y) si ottiene un’istogramma dell’immagine più ristretto, che diminuisce l’entropia totale dell’immagine. 17 8.3.2 Compressione lossy Grazie all’aumento della potenza di calcolo dei computer, è stato possibile utilizzare algoritmi di compressione lossy sui dati, conservando al contempo un gran numero d’informazioni. La compressione lossy di un’informazione è un’approssimazione abbastanza fedele dell’informazione di partenza; a seconda delle applicazioni, la fedeltà dovrà essere più o meno elevata. Questa compressione fornisce un rapporto di compressione molto più elevato del caso lossless. Le due misure di distorsioni più utilizzate per valutare la fedeltà della compressione dati sono l’errore quadratico medio (Mean Square Error MSE) σd2 = N 1 X (xn − yn )2 N n=1 con xn , yn e N la sequenza dati d’ingresso, d’uscita e la lunghezza della sequenza, e il rapporto segnale-rumore (SNR) SN R = 10 log10 σx2 σd2 con σx2 valor quadratico medio della sequenza d’ingresso. La compressione lossy applicata alle immagini tiene conto della frequenza spaziale, cioè del numero di volte che il valore di un pixel cambia in una data area (ad esempio, gli edge sono caratterizzati da un’elevata frequenza spaziale). Per formalizzare questo valore viene utilizzata la DCT (Discrete Cosine Transform): essa misura quante volte cambia il contenuto dell’immagine in relazione al numero di periodi del coseno. Il suo ruolo è quindi di decomporre il segnale originario in componenti ad alta e bassa frequenza; il ruolo della IDCT (Inverse Discrete Cosine Transform) è di ricostruire il segnale originario. Nel caso delle immagini, viene applicato ad un sottoblocco di pixel dell’immagine la 2D-DCT, che agisce lungo le due direzioni dell’immagine; essendo una funzione lineare invertibile, può essere ottenuta come combinazione lineare in due passi consecutivi di due DCT ad una variabile: in questo modo le operazioni aritmetiche effettuate si riducono da nxn a n+n. JPEG è uno dei più diffusi metodi di compressione lossy delle immagini. Esso utilizza la 2D-DCT per ricavare informazioni sulla frequenza spaziale, in modo da individuare le basse frequenze (cioè il grosso dell’immagine) e le alte frequenze (cioè i dettagli). L’utilizzo della DCT ha tre motivazioni: la prima è che il contenuto utile delle immagini reali cambia relativamente poco all’interno di una regione, per cui è difficile trovare una grande differenza d’intensità tra i pixel di una regione analizzata (”spatial redundancy”); la seconda è che l’occhio umano non percepisce molto la perdita d’informazioni alle alte frequenze, per cui la spatial redundancy può essere ridotta riducendo le componenti alle alte frequenze; la terza è che l’occhio umano percepisce maggiormente variazioni di grigi piuttosto che dei colori. La compressione JPEG si articola in 5 fasi: 1. trasformazione da spazio RGB a spazio YIQ o YUV (dove Y è la luminanza e I e Q o U e V rappresentano la crominanza) e sottocampionamento dei colori 2. DCT su un singolo blocco dell’immagine 18 3. quantizzazione 4. ordinamento a zig-zag e codifica Run-length 5. codifica entropica (Entropy coding) Ogni immagine è divisa in blocchi 8x8, il cui insieme forma lo Scan. La 2D DCT è applicata a ciascun blocco producendo in uscita dei valori F (u, v) per ogni blocco; l’effetto è quello di produrre un’immagine ”a quadrettini”. La quantizzazione viene effettuata tramite una funzione di approssimazione round( F (u, v) ) Q(u, v) con Q(u, v) coefficienti di una matrice di quantizzazione, che sono più alti (e quindi introducono maggiore perdita) verso l’angolo in basso a destra, cioè alle alte frequenze. Questa è la fase che determina la perdita delle informazioni in JPEG. Un file JPEG può essere generato in 4 modi: sequential mode, quello di default, con una scansione da sinistra a destra e dall’alto verso il basso; progressive mode; hierarchical mode; lossless mode (meno utilizzato). Un tipico file JPEG JPEG 2000 è un algoritmo di compressione delle immagini successivo a JPEG, che è stato introdotto principalmente per avere un miglior compromesso tra compressione e qualità visiva. Il processo di compressione segue quello di JPEG, con la differenza tecnica sostanziale che al posto della DCT utilizza la trasformata wavelet, per produrre un’analisi multiscala e multirisoluzione: invece di effettuare la codifica sui singoli blocchi 8x8, la wavelet codifica le singole bande e le singole scale. L’algoritmo può essere sia lossless che lossy, a seconda che venga utilizzata una wavelet reversibile o irreversibile. L’insieme delle bande individuate costituiscono delle regioni, che vengono quantizzate e codificate in code blocks tramite l’algoritmo di EBCOT. Il vantaggio, quindi, è quello di avere meno distorsioni, un miglior rapporto di compressione e quindi immagini compresse migliori in qualità. 8.4 Compressione Video Un video è una successione d’immagini (frames) ordinate nel tempo in modo da riprodurre un movimento. Poichè due frame successive sono molto simili 19 fra loro, la ridondanza temporale che s’introdurrebbe codificando ogni frame sarebbe molto elevata. Per cui vengono codificate la differenza tra una frame e una sequenza di altre frame successive, caratterizzate da piccoli livelli d’entropia. L’algoritmo di compressione più utilizzato è il Motion Compensation (MC). L’elaborazione principale di quest’algoritmo è la ”motion vector search”. Innanzitutto ogni immagine viene divisa in macroblocchi NxN, la frame corrente è la ”target frame”; viene effettuato un match tra il macroblocco della target frame e il più simile macroblocco delle frame precedenti o successive (la similarità è giudicata in base alla minima Mean Absolute Difference, MAD). Lo spostamento del macroblocco trovato con quello del target frame è il motion vector (MV); l’MV viene ricercato solitamente nelle immediate vicinanze del macroblocco di partenza, e tale ricerca può essere effettuata anche su una rappresentazione multiscala e multirisoluzione. Uno dei primi standard per la compressione video è H.261. Il prinicipio di base è MC; fu introdotto per trasmettere videoconferenze su linee ISDN e ha rappresentato le basi della codifica MPEG. Esso è caratterizzato da un certo frame rate e da un ritardo, così come altri standard della famiglia H.xxx a cui appartiene. Una tipica frequenza di frame H.261 è costituita da Intraframes I (frame statiche, per il background) e Inter-frames P (frame dinamiche). Le I-frames vengono trattate come immagini indipendenti, quindi si applicano tecniche di conversioni simili a JPEG; le P-frames dipendono invece da I-frames e dalle precedenti P-frames, su di esse viene effettuata una codifica predittiva rispetto ad una P-frames precedente per eliminare la ridondanza temporale. MPEG è un comitato che si è occupato di standardizzare formati di rappresentazione audio e video. Il primo formato video è stato MPEG-1: è basato sul formato televisivo digitale SIF, supporta solo video non interlacciato (l’interlacciamento è una tecnica che permette di aumentare la qualità video senza aumentare la banda) e basse risoluzioni spaziali (352x240). L’algoritmo utilizzato è MC, basato su H.261 con macroblocchi, con la differenza che la ricerca è effettuata anche sulle frame successive (B-frame). I dati sono organizzati in modo gerarchico a livelli all’interno del file: precisamente abbiamo un Group of Pictures (GOP), fatto di pictures, a loro volta divise in slice, divise in macroblocchi, divisi in blocchi su cui si applica alla fine la codifica differenziale. 20 Con MPEG-2 è stata aumentata la quantità dei dati, e quindi la qualità visiva, e inoltre è stato introdotto il supporto al video interlacciato; con MPEG-4 è stato introdotto il concetto non trascurabile d’interattività: la codifica delle immagini è basata infatti sugli oggetti (object-based coding) e permette la sincronizzazione e multiplazione di scene differenti. MPEG-7 non è un formato file. Esso è uno standard che definisce il modo con cui i dati multimediali devono essere memorizzati, per un più veloce reperimento dei dati; serve per le applicazioni che devono effettuare retrieval di oggetti multimediali, come le librerie digitali. E’ diventato uno standard internazionale col nome di Multimedia Content Description Interface. Esso fornisce strumenti, basati su XML, per definire le features in modo universale: descrittori D delle features, schemi di descrizioni DS per le relazioni tra descrittori e schemi stessi, e linguaggio di definizione di descrizione DDL che specifica regole sintattiche per combinare descrittori e schemi. I descrittori di basso livello sono divisi in gruppi: quelli per il colore, per la texture, per la forma, per il movimento, per la localizzazione e la face recognition. MPEG-21 è un’evoluzione dello standard MPEG-7, allo scopo di definire un framework multimediale universale in cui risorse multimediali utilizzate da comunità differenti possano essere condivise. Come il suo predecessore, prevede un’ampia identificazione e descrizione degli oggetti multimediali, oltre all’introduzione di protezioni per il diritto d’autore. 9 Database multimediali Un database multimediale (MMDBMS) è una base di dati che raccoglie oggetti di tipo testo, immagine, oggetti 3D, audio, video e una combinazione di questi e fornisce strumenti per la loro memorizzazione, accesso, ricerca e controllo. 21 Attualmente il DBMS Oracle Multimedia fornisce funzioni tipiche delle basi di dati multimediali. Così come per i DB relazionali, anch’esso è modellizzabile su 3 livelli: esterno (viste), logico-concettuale e fisico. Poichè anche per i dati multimediali è necessario individuare un modello logico ed un modello fisico, per creare i database multimediali sono state estese le caratteristiche dei DB relazionali. In particolare, quindi, un DBMS multimediale deve garantire le proprietà ACID (Atomicità, Coerenza, Isolamento, Durabilità) e deve prevedere degli indici ad hoc nel livello fisico per ogni tipo di dato, in modo da permettere su di essi l’esecuzione di query specifiche per il recupero dei dati (query by example, query by content, ecc..). Il modello logico dei dati diventa objectrelational, cioè relazionale con l’integrazione di classi, e deve permettere la descrizione degli oggetti multimediali secondo specifiche features. Un primo modello di DBMS si basa sul principio di autonomia: i dati multimediali sono divisi per tipologia e per ogni tipo di dato esiste un opportuno indice fisico utilizzato dal motore di ricerca per effettuare il retrieval. Un secondo modello si basa invece sul principio di uniformità: esiste un unico indice generico, utilizzato dal motore di ricerca, che a seconda del tipo di dato attiva un indice particolare per il dato specifico; la complessità si sposta quindi sul motore di ricerca. Un terzo modello è un ibrido dei primi due: per alcuni dati il motore di ricerca utilizza indici specifici, per altri utilizza indici generici. Per permettere l’integrazione degli oggetti multimediali nei DB relazionali vengono utilizzati i LOB (Large OBject), divisi in BLOB (Binary Large OBject) e CLOB (Character Large OBject): essi sono dei tipi di dato utilizzati per la memorizzazione e l’accesso di dati di grandi dimensioni non direttamente interpretabili dal DB; in particolare i CLOB sono utilizzati per i testi, i BLOB per gli altri tipi (immagini, audio, video, applicativi, ecc..). Da un punto di vista fisico, sono memorizzati esternamente alle tabelle del DB, perchè hanno una dimensione elevata e rallenterebbero le query. Il motore di un DBMS multimediale è simile a quello relazionale, ovviamente con dei moduli specifici per la gestione dei dati multimediali: lo storage manager si occupa della memorizzazione dei dati sottoforma di BLOB nel database, il transaction manager gestisce la concorrenza degli accessi, il directory manager gestisce la memorizzazione fisica sui dispositivi di memoria, l’object manager gestisce le operazioni dei dati (inserimento, cancellazione, modifica), il query manager si occupa di effettuare retrieval dei dati, basandosi su specifici algoritmi di matching. 9.1 Oracle Intermedia Oracle Intermedia è un’integrazione del DB relazionale Oracle che fornisce strumenti per la gestione dei dati multimediali. Esso fornisce un servizio di memorizzazione dei dati multimediali più comuni internamente tramite BLOB o esternamente tramite URL. Ogni oggetto multimediale in Oracle può essere memorizzato, manipolato e interrogato utilizzando un particolare tipo di dato astratto specifico dell’oggetto, e sono tutti definiti nel package ORDSYS (ogni informazione è ORD, Object-Relational Data). Per le immagini sono utilizzati due tipi di dato, ORDImage e ORDImageSignature: ORDImage è un tipo di dato costituito da attributi, proprietà riferite all’immagine e metodi mentre ORDImageSignature rappresenta l’insieme delle feature associate all’immagine e sono memorizzate in un unico campo BLOB. Gli operatori principali utiliz22 zate sulla signature sono IMGsimilar per stabilire la similarità tra signature e IMGscore per restituire un valore di similarità. 10 Indici multimediali Un indice è una lista organizzata di elementi, che facilita il recupero di dati specifici in un database tramite un accesso diretto. Gli indici sono organizzati in alberi, caratterizzati da un nodo radice (root), nodi figli su più livelli e nodi foglia (figli senza padre). Gli alberi utili per gli indici sono gli alberi bilanciati (Balanced Tree, BT): in essi ogni foglia si trova allo stesso livello. In questo modo si garantisce una complessità computazionale tale che il tempo di ricerca diventi indipendente dalla posizione del dato da cercare; la complessità è O(logk N ), con N numero di livelli e O(logk N ) profondità dell’albero. Nel caso degli indici, una foglia indicizza la posizione fisica di un dato. Gli indici multimediali permettono di indicizzare oggetti multimediali: essendo questi multidimensionali, saranno caratterizzati da k features, e quindi gli indici vanno considerati in uno spazio a k-dimensioni. L’approccio generale per la costruzione dello spazio è: dividere lo spazio in regioni, inserire l’oggetto nella regione corretta, se la regione è piena dividerla in più parti. La complessità dello spazio a k-dimensioni può essere ridotta convertendo lo spazio in uno spazio a 1-D, comportando però la perdita di qualche informazione; in ogni caso, la conversione può essere effettuata se la distanza viene conservata nel passaggio da spazio k-D a spazio 1-D. Nè una rapprentazione matriciale nè un ordinamento diagonale di Cantor permettono di conservare quest’informazione; una funzione che invece è utile per questo scopo è la Z-order curve. Le strutture dati che permettono di calcolare la distanza tra le features di un database sono K-d tree, point quadtree, MX quadtree e R-tree. Le possibili query effettuate su questi dati sono: • Exact match: verifica se un dato è presente o meno nel database (query classica) • Nearest neighbor : trova il valore più vicino a un dato valore • Range search: data una regione, trova tutti i punti che ricadono nella regione 10.1 10.1.1 Strutture dati K-d tree e 2-d tree Un K-d tree è un albero a K dimensioni, che permette di memorizzare e gestire informazioni a k dimensioni. Un 2-d tree, ad esempio, è un albero i cui nodi sono record di tipo nodetype, caratterizzati dai campi INFO (tipo di dato), XVAL e YVAL (valori reali), LLINK e RLINK (puntatori a figlio sx e dx); utilizza quindi una definizione ricorsiva, basandosi sul nodetype stesso. Le condizioni per l’organizzazione degli elementi sono che: • dato un livello dispari ogni nodo divide la regione in due parti lungo una linea verticale (se M è il figlio e N è il padre, nel sottoalbero sinistro M.XVAL<N.XVAL, in quello destro M.XVAL≥ N.XVAL); 23 • dato un livello pari ogni nodo divide la regione lungo una linea orizzontale (se M è il figlio e N è il padre, nel sottoalbero sinistro M.YVAL<N.YVAL, in quello destro M.YVAL≥ N.YVAL) L’inserimento di un nodo nel 2-d tree è semplice: se il nodo è il primo diventa la radice dell’albero, se non lo è l’inserimento verifica prima la coordinata XVAL e, se il sottoalbero è pieno, poi la coordinata YVAL, rispettando le condizioni precedenti. La cancellazione è invece un’operazione più critica: se il nodo da cancellare è foglia, basta settare il puntatore successivo a NULL, ma se è un nodo interno l’operazione è complessa. In questo caso si cerca un candidato R, che rispetti le condizioni, in grado di sostituire il nodo da cancellare N: si trova R nel sottoalbero sinistro o destro, si sostituiscono le info di N con quelle di R, si cancella ricorsivamente R dal sottoalbero. R deve essere tale che: • per ogni nodo M nel sottoalbero sinistro – se il livello è dispari M.XVAL<R.XVAL – se il livello è pari M.YVAL<R.YVAL • per ogni nodo M nel sottoalbero destro – se il livello è dispari M.XVAL≥R.XVAL – se il livello è pari M.YVAL≥R.YVAL 10.1.2 Point quadtree I Point quadtree rappresentano una regione rettangolare; ogni regione è divisa in 4 quadranti (con il punto al centro) ciascuna delle quali è individuata da uno dei 4 figli del quadtree. Quindi, rispetto al nodo del 2-d tree, possiede 4 puntatori di tipo quadtreenode che puntano ai 4 quadranti (NW,NE,SW,SE). La potenza espressiva dei quadtree è tale che sono le strutture dati più utilizzate nei GIS (Geographic Information System); i 4 quadranti infatti nel caso delle mappe geografiche rappresentano le 4 direzioni dello spazio. In questo senso l’inserimento di un nodo nel quadtree è estremamente semplice, basandosi sui valori di coordinate XVAL e YVAL; in questo modo il quadtree diventa una generalizzazione multidimensionale dell’albero di ricerca binario. Per quanto riguarda la cancellazione di un nodo interno, invece, come nel caso del 2-d tree è molto più complessa; per effettuare quest’operazione può essere utilizzato l’algoritmo Samet80, un algoritmo ricorsivo che prende il nome dal suo autore: supponendo che il nodo abbia un figlio in una delle 4 direzioni, trova il nodo N’ nel sottoalbero riferito alla direzione x in modo tale che tutti gli altri nodi si trovino alla direzione x di N’, poi cancella ricorsivamente N’ dal sottoalbero. I problemi principali dei point quadtree sono che: la cancellazione di un nodo interno è un’operazione molto lenta, l’albero può essere molto sbilanciato e quindi avere un tempo di ricerca non basso, le regioni sono molto diverse in dimensione e i tempi per effettuare le query sono impredicibili. 10.1.3 Rettangolo generalizzato e R-tree Dato uno spazio a k dimensioni, un rettangolo generalizzato è definito come un insieme di k valori valori xi tali che Li ≤ xi ≤ Ui 24 Gli R-tree vengono utilizzati per memorizzare informazioni rappresentate su rettangoli bidimensionali; essi permettono di generalizzare gli alberi bilanciati. Ogni nodo nell’R-tree può contenere tra gli N/2 e gli N rettangoli: come i B-tree ogni foglia è allo stesso livello e la radice ha almeno due figli, se non è una foglia. 10.2 Query L’algoritmo K-Nearest Neighbor Search è una delle operazioni più importanti effettuata sugli indici multimediali. Dato un elemento Q, esso trova i k punti più vicini a Q all’interno del point quadtree. Se consideriamo di cercare un solo punto (k=1), questa query effettua una ricerca del vicino di Q più vicino. Ogni nodo N rappresenta una regione; si utilizzano due variabili, bestDist (inizialmente posta a ∞) e bestSol (inizialmente posta a NULL), l’algoritmo visita i nodi partendo dalla radice: ogni volta che visito un nodo N calcola la distanza di Q dal punto rappresentato da N, se d(Q,N.point)<bestdist aggiorna bestDist e bestSol, altrimenti continua. L’algoritmo visita solo i nodi che verificano la condizione precedente, in quanto per come è bilanciato l’albero i nodi non visitati fanno riferimento a delle regioni sicuramente con una distanza maggiore; in questo modo vengono eliminate intere regioni, con un’operazione di pruning, velocizzando molto la ricerca. In generale quindi, bestSol è un array di k elementi che contiene gli elementi più vicini al punto Q, in ordine di vicinanza da Q. Un altro algoritmo utilizzato per le query è Range Search. Dato un punto Q e una distanza R, trova tutti i punti nell’albero che si trovano nell’intorno di Q di raggio R. Partendo dal nodo radice, calcolo la distanza ed effettuo il pruning dei nodi che sono all’esterno della regione. 11 3D Game Engine Un motore grafico 3D (o 3D Game Engine) è un sistema software progettato per la creazione e lo sviluppo di videogame in 3D; esso permette la rappresentazione di un ambiente virtuale 3D su uno schermo in 2D. Il game engine fornisce agli sviluppatori di videogiochi un framework completo di tools grafici per realizzare in modo semplice il proprio videogame. Le funzionalità di base fornite tipicamente da un motore grafico includono un motore di rendering (renderer) per grafica 2D e 3D, un motore fisico (rilevatore di collisioni), suono, scripting, animazioni, intelligenza artificiale, networking e gestione della memoria. In questo modo il processo di sviluppo di un gioco viene ridotto notevolmente grazie al riutilizzo di un motore grafico. I vantaggi di utilizzare un 3D game engine, quindi, sono: minor tempo per lo sviluppo, minor tempo per il test, più funzionalità disponibili e funzionanti, più tempo da dedicare per il progetto. Gli svantaggi sono: non aver controllo sull’implementazione delle funzionalità, la pesantezza nel caso venissero aggiunte nuove funzionalità, non poter utilizzare altre librerie esterne al game engine. Gli obiettivi del game engine sono: ricalcolo continuo dello stato corrente del mondo virtuale, interazione dell’utente con il mondo, visualizzazione dello stato all’utente tramite grafica e suono. Questi obiettivi vengono realizzati in un ciclo (game loop) e devono ovviamente essere comparati con le caratteristiche hardware esistenti. Il game loop può prevedere solo aggiornamento e render 25 dello stato del mondo in un singolo ciclo (coupled approach) oppure può essere realizzato tramite due thread paralleli (multi-threaded approach). Con il coupled approach le due fasi hanno la stessa importanza logica e sono fortemente sincronizzate, ma se una delle due aumenta di difficoltà influenza anche l’altra. Con il multi-threaded approach ciascuna fase non deve attendere l’elaborazione dell’altra, ma nascono problemi dovuti alla sincronizzazione e al supporto hardware. 11.1 Architettura del 3D game engine Il motore di rendering caratterizza le forme geometriche e i solidi, gestice effetti grafici particolari e visualizzazioni multiple; il motore sonoro gestisce i suoni ambientali, le voci e la loro sovrapposizione; il motore AI gestisce l’interazione dei personaggi, i loro comportamenti, le strategie di gioco, le decisioni e altri aspetti ad alto livello; il motore fisico si occupa della simulazione del mondo reale, facendo rispettare le leggi fisiche (collisioni, onde, terreni, esplosioni); il motore degli scripting permette di controllare le funzionalità del game engine tramite linguaggi di scripting. 11.2 Unity 3D Unity 3D è uno dei più diffusi game engine. Un gioco creato con Unity 3D è un insieme di Asset, ciascuno dei quali rappresenta una caratteristica del gioco (telecamere, scene, texture, file audio, ecc..); l’Inspector Window permette di settare le proprietà degli oggetti; la Game Window permette di vedere un’anteprima del gioco; la Hierarchy Window contiene ogni oggetto della scena corrente. 26 12 XML XML (eXtensible Markup Language) è un linguaggio di marcatura che permette di definire una famiglia di linguaggi, con l’obiettivo di descrivere in modo separato la struttura e il suo contenuto. E’ un linguaggio derivato, così come HTML, dal linguaggio di markup SGML (Standard Generalized Markup Language) ma, a differenza di HTML, permette di personalizzare i tags (le etichette) da utilizzare. La struttura del documento XML è gerarchica, a differenza dei database relazionali, in cui gli elementi sono collegati da un grafo relazionale; ogni elemento del documento deve avere un tag di inizio e uno di fine e può includere altri elementi. Definisce, quindi, un modello dei dati semistrutturato. Questo documento, però, è un semplice file di caratteri che deve rispettare solo regole sintattiche molto restrittive, ma non dà informazioni sul significato dei tags. Un primo metodo per assegnare una semantica ai tags è l’utilizzo di namespaces, che possono essere però ambigui e dispersivi; un secondo metodo è l’utilizzo di documenti specifici, in cui sono racchiuse le descrizioni formali delle classi XML (i tags) a cui un documento può aderire: i DTD (Data Type Definition) e la sua evoluzione, gli XML Schema. Altri strumenti utilizzati con XML sono XPath, un linguaggio per accedere a parti del documento XML, XLink, usato per definire dei riferimenti nel testo, e XQuery, un linguaggio che permette di effettuare query sui documenti. La struttura gerarchica di XML facilita il parsing dei dati da parte del ”parser”, il modulo software che si occupa di analizzare la sintassi di un documento; inoltre, per essere uno standard, supporta la codifica internazionale UNICODE e l’indipendenza dalle piattaforme. Per questo motivo è molto utilizzato sul web, in quanto permette uno scambio d’informazioni tra applicazioni differenti. Il documento XML, come detto, è quindi un insieme di tags e testo, non include altri tipi di dato. I tags sono racchiusi tra parentesi angolari e quello di chiusura è preceduto da /; devono essere necessariamente innestati fra loro e ciascuno di essi dovrebbe avere un insieme di attributi, costituiti da un nome e un valore, tra virgolette. Data la sua struttura gerarchica, un documento XML è rappresentabile da una struttura dati ad albero, le cui foglie o sono vuote o contengono i dati. Un documento XML, quindi, è ben formato sintatticamente, indipendentemente da DTD e XML Schema, se i tag sono corretti sintatticamente, ogni tag è associato a un tag di fine, sono correttamente innestati e c’è un tag radice. Il documento che dà un significato ai tag e in generale al documento XML è DTD. La sua struttura sintattica è anch’essa basata su SGML: esso infatti consiste in una serie di dichiarazioni per parti che specificano il significato dei tag. Deve quindi essere sempre reso disponibile insieme al documento XML per una sua corretta intrerpretazione. 13 SMIL SMIL (Synchronized Multimedia Integration Language) è un linguaggio di markup raccomandato dal W3C che permette la creazione di presentazioni sincronizzate da riprodurre sul web. E’ basato su XML, ma i tags non sono personalizzabili; permette di miscelare diversi media e di sincronizzarli sia nel 27 tempo (lungo una timeline) che nello spazio. I tags permettono, quindi, di definire il layout spaziale per i media (le regioni), il loro inserimento nelle regioni e l’ordine temporale d’esecuzione, che può essere sequenziale o parallelo; inoltre, possono essere associati ai dati delle informazioni semantiche, tramite l’uso di metadati. La regione di base della presentazione è la <root>: essa definisce la finestra principale su cui è renderizzata la presentazione, quindi permette di settare lo sfondo e le dimensioni. Gli attributi, invece, permettono di agire sul modo con cui gli oggetti multimediali devono essere riprodotti: tipici attributi sono repeat, par, seq, begin e end. 14 Trattamento automatico del testo Il Natural Language Processing (NLP) è il processo che effettua il trattamento automatico del testo naturale scritto o parlato tramite un calcolatore elettronico. Esso è finalizzato all’estrazione di una conoscenza implicita, che non sia già stata già acquisita, nei documenti di testo che sono per natura documenti non strutturati (Text Mining). Per fare ciò, è necessario fornire al calcolatore le conoscenze linguistiche necessarie a comprendere la struttura e il contenuto del testo. Ambienti che fanno uso dell’NLP sono il web semantico, i sistemi domanda e risposta e i Recommender System (sistemi di raccomandazione che forniscono agli utenti dei suggerimenti in base alle ricerche effettuate in precedenza). Questo processo è reso particolarmente difficile e complesso a causa delle caratteristiche intrinseche di ambiguità del linguaggio umano. La classica ricerca per parola-chiave ha forti limiti in questo senso: problemi riguardano la comparsa di documenti erroneamente segnalati come rilevanti oppure l’omissione di documenti rilevanti perchè non contenenti la parola-chiave. Per questo motivo, la ricerca si è spostata sulla semantica delle parole, in modo da ridurre le ambiguità e permette di effettuare delle query in linguaggio naturale per concetto. Le funzionalità di gestione semantica sono basate sulla modellazione ontologica, e utilizzano quindi strumenti per la creazione e gestione delle ontologie come OWL. Le fasi principali per un trattamento semantico dei testi sono: pretrattamento, analisi morfo-sintattica, analisi lessico-metrica, estrazione dei termini peculiari. Il primo passo è quello del parsing (tokenizzazione), cioè individuare le singole parole (i token), ovvero successioni di caratteri dell’alfabeto compresi tra separatori (virgole, punti, ecc..). Per effettuare ciò spesso vengono usati dei software per il trattamento lessico-metrico dei testi, come ad esempio TALTAC. In seguito viene effettuato un processo di normalizzazione, che uniforma le differenti variazioni ortografiche di un token (database e data-base, date, acronimi, ecc..); questa procedura fa uso di grandi database e di regole ben precise. Dopodichè, viene effettuata una correzione di eventuali errori di codifica (caratteri non supportati). Il secondo passo è il tagging grammaticale, che consiste nell’assiociare a ciascun token la corretta categoria grammaticale (parte del discorso, Part of Speech POS ); questa procedura permette di ridurre notevolmente l’ambiguità tra le parole del testo. La suddivisione avviene tra parole lessicali o ”piene’ (nomi, verbi, aggettivi, avverbi) e parole grammaticali o ”vuote” (articoli, pre- 28 posizioni, congiunzioni): le prime esprimono concetti ed evoluzioni di essi, le seconde sono ripetitive e non danno informazioni significative. Anche in questa fase vengono usati strumenti software come TALTAC e TreeTagger: TALTAC assegna una possibile categoria grammaticale, ma non lavora sulla lettura del testo bensì su una lista di parole di un database, per cui non elimina completamente l’ambiguità; TreeTagger invece si basa su ”decision tree probabilistici”, ovvero verifica le relazioni di una parola con quelle che seguono e precedono nel testo. In ogni caso questo processo non è completamente automatico e necessita di essere supervisionato. Dopo segue la lemmatizzazione, che prevede di associare i token trovati al lemma corrispondente della categoria grammaticale a cui appartengono (i verbi sono associati all’infinito della coniugazione, i nomi al singolare maschile, ecc..). Anche in questo caso si fanno uso di strumenti automatici, come TALTAC, che reperiscono le relazioni tramite appositi dizionari. L’analisi lessico-metrica consente di determinare il tasso di copertura del lessico estratto dal testo. In particolare, la frequenza cumulata è la sommatoria delle frequenze di occorrenza delle parole selezionate. Dopo segue l’individuazione dei segmenti che permette di determinare tramite calcoli statistici quali token vanno considerati come un unico concetto (es. codice fiscale). Sul vocabolario ottenuto si effettua un filtraggio in base alla categoria grammaticale e al valore degli indici lessico-metrici. L’ultima fase è quella dell’individuazione delle relazioni, che inserisce relazioni semantiche tra gli elementi estratti. Le relazioni sono basate su termini correlati e su sinonimi; per quest’operazione è possibile usare risorse esterne come WordNet, che costituiscono delle ontologie esterne da interrogare per trovare relazioni semantiche tra i lemmi trovati. 14.1 Information Retrieval sui testi Effettuare una ricerca sui testi in linguaggio naturale è complicato perchè essi rappresentano dati non strutturati. Per effettuare una ricerca è necessaria un’indicizzazione delle parole del testo, effettuata tramite le tecniche del Text processing. Una query possibile si basa sull’utilizzo degli operatori booleani AND, OR, NOT applicata alle parole-chiave. I risultati si basano su due parametri, precision e recall; ’precision’ è la frazione dei documenti recuperati che sono rilevanti per l’utente, ’recall’ è la frazione dei documenti rilevanti che vengono recuperati. Le parole-chiave individuate vengono gestite tramite liste di posting, in cui vengono memorizzate dei riferimenti ai documenti in cui sono presenti (docID). Un altro tipo di ricerca è quella basata sulla ’prossimità’, molto usata in ambito giuridico (NEAR). Un’ottimizzazione può essere, inoltre, quella di ordinare le AND per lunghezza della lista. 15 Sistemi di videosorveglianza I sistemi di videosorveglianza hanno come obiettivo il riconoscimento automatico in tempo reale di eventi sospetti e potenzialmente pericolosi. Un sistema di questo tipo deve avere un insieme di sensori (telecamere, sensori ambientali, ecc..), un sistema di image processing che opera sulle singole frame del video, 29 un sistema di rilevamento di un set di eventi preconfigurati e un sistema di visualizzazione delle informazioni. Le immagini prelevate dalla telecamera vengono memorizzate in un database video (VideoRepository) ed elaborate, per permettere l’estrazione di features di basso livello; dopodichè queste vengono memorizzate nel database. Il sistema di rilevamento degli eventi (Event Detection Layer) possiede una serie di moduli per l’elaborazione delle features: esse vengono elaborate, utilizzando dei predicati che descrivono gli eventi, dall’ABP (Agent Based Processor) che determina se è occorso un evento, un cambiamento significativo e ”sospetto”. Nelle scene vengono individuati gli oggetti fondamentali tramite una object segmentation; gli algoritmi che effettuano ciò sono basati sulla frame difference o sul confronto con il background. Nel primo caso vengono considerati solo gli oggetti che hanno subito delle differenze tra frame successive: tali differenze vengono rilevate come differenza di intensità apprezzabili tra i pixel; nel secondo caso l’immagine corrente viene confrontata con un background di riferimento; è uno dei più usati. Gli oggetti, poi, devono essere ”seguiti” fin quando non escono dalla scena (tracking): algoritmi non basati su un modello non hanno informazioni su oggetti generici e quindi vengono estratte features di quelli che appaiono; algoritmi basati su un modello utilizzano degli schemi predefiniti, con lo svantaggio di avere un modello geometrico per ogni oggetto della scena individuato, aumentando la complessità computazionale. Infine, gli oggetti devono essere relazionati fra loro tramite algoritmi di reasoning (approcci: Dynamic Bayesian Network, Hidden Markov Models, Finding Unexplained activities). 16 Computer Graphics e X3D La Computer Graphics è il processo di creazione delle immagini a partire da dati elaborati dal calcolatore; riguarda sia il disegno 2D sia i modelli 3D. Essa permette di generare un’approssimazione del mondo tramite funzioni, che permettono di descrivere forme, posizioni, fisicità e movimenti; le funzioni poi vengono renderizzate per riprodurre i modelli 3D come pixel di un’immagine su un display. I modelli creati con la Computer Graphics possono essere visitati da punti di vista differenti, e ci si può interagire. Le due entità fondamentali sono gli oggetti, cioè rappresentazioni digitali di oggetti reali 3D posizionati nello spazio 3D virtuale, e l’osservatore, cioè il punto di vista da cui si osserva la scena; quest’ultima può essere ottenuta come immagine tramite un processo di rendering. Sugli oggetti vengono effettuate trasformazioni geometriche come traslazioni, rotazioni, scalature, elaborate tramite trasformazioni lineari matriciali. Inoltre, per rendere più realistico il modello, viene gestita l’illuminazione e l’ombreggiatura tramite un apposito modello, che a seconda del punto di vista dell’osservatore caratterizza le luci e le ombre. X3D è un linguaggio di descrizione per contenuti tridimensionali interattivi basato su XML. Le entità che possono essere descritte sono: l’ambiente, gli oggetti, le luci, i suoni, l’osservatore, le animazioni, l’interattività e gli scripting. In modo simile a SMIL per le presentazioni, quindi, X3D permette di descrivere tutti gli aspetti di un modello 3D utilizzando i potenti strumenti di XML: esso infatti descrive una struttura gerarchica ad albero, i cui nodi sono le scene del modello. 30