Politecnico di Bari: appunti di artificial vision
Introduzione all'immagine digitale
Un’immagine digitale è un’immagine sulla quale sono stati approntati due livelli di approssimazione.
- Il primo livello è legato alla quantizzazione
- Il secondo livello è legato alla discretizzazione
Discretizzazione e quantizzazione
Per quanto riguarda la discretizzazione, quando pensiamo a un’immagine "analogica", l’immagine è fatta da un certo numero di punti ovvero da un numero di infiniti al quadrato punti. Questo perché l’immagine è ciò che si può rappresentare in un rettangolo che a sua volta è formato da infiniti segmenti; in segmenti ci sono infiniti punti e quindi per questo un’immagine reale è composta da infinito al quadrato punti.
Se volessimo rappresentare in una memoria l’informazione legata a questa immagine, avremmo bisogno di una memoria infinita al quadrato, un tempo di trasmissione infinito al quadrato. Ovviamente, tutto questo è improponibile da un punto di vista pratico. Inevitabilmente deve essere approssimata a un’immagine detta discretizzata. Discretizzare significa che i punti che compongono l’immagine non hanno più una dimensione infinitesima ma hanno una dimensione finita. Di conseguenza, il numero di punti che compone l’immagine non è più infinito al quadrato ma è: area dell’immagine fratto dimensione del singolo punto.
Quindi, cosa viene associato al singolo punto? L’informazione di ogni singolo punto è la media di tutti gli infiniti al quadrato punti che compongono l’area finita del punto di cui stiamo parlando. Dividendo l’immagine in una griglia di punti discreti detti pixel, ciascuno di questi pixel conterrà al suo interno l’informazione media di tutti gli infiniti al quadrato punti geometrici legati a quella superficie.
Immagine in bianco e nero e a colori
Un’altra problematica è legata al contenuto informativo di quell’elemento di immagine ovvero di quel pixel. Dobbiamo distinguere tra due casi: il caso a colori e il caso in bianco e nero.
Per immagini in bianco e nero intendiamo un’immagine in cui il singolo elemento ha una gradazione di grigio. L’informazione cromatica dell’elemento dell’immagine bianco e nero è legata alla luminosità. In base alla luminosità di un pixel otteniamo una tonalità diversa di grigio, che ci consente, nell’insieme della griglia dei pixel, di definire un’immagine. Da un punto di vista fisico, i modi di passare dalla massima alla minima luminosità sono finiti. Questo perché dipende dal numero di fotoni che quell’elemento riflette.
A questo punto, è necessario compiere un’ulteriore approssimazione che ci consente di approssimare l’elevato range di dinamica di luminosità legata a un possibile valore che può avere un singolo pixel, in un numero finito e accettabile di livelli. Questi livelli possono essere quantizzati in un numero di bit. In funzione del tipo di applicazione, avremo delle quantizzazioni che possono variare. Nelle immagini di uso comune abbiamo una quantizzazione di 8 bit.
Immagini a colori
Se facciamo ora riferimento all’immagine a colori, questi possono essere immaginati come la miscela dei tre colori fondamentali Red Green Blue (RGB). L’idea è quindi quella di scomporre l’immagine nelle tre componenti rosso, verde e blu, andando a capire come possono essere rappresentati i valori di componente blu, i valori della componente del verde e i valori della componente del rosso (immagine multicanale).
Questi valori numerici per ciascuna componente andranno da 0 a 255, dove 0 indica la minima luminosità di quella componente e 255 indica la massima luminosità di quella componente.
Avrò quindi un’immagine associata a questi tre colori fondamentali. Dalla miscelazione opportuna di questi colori fondamentali potrò ottenere qualsiasi colore. Esistono diversi modi di rappresentare le immagini a colori semplicemente cambiando dominio, cioè posso pensare ad altri domini diversi dall’RGB come ad esempio terne dove uno dei canali è legato alla luminosità. RGB è importante perché è direttamente collegata alla fisicità di certi componenti periferici come il display.
Display a colori
Un display a colori è fatto con una matrice di pixel dove ciascuna di queste righe colonne all’interno della matrice contiene un pixel. Ognuno di questi pixel è fatto da tre pixel vicini che emettono luce nello spettro del rosso, del verde e del blu. Nell’elettronica di un dispositivo periferico come un monitor a LED a colori, ogni singolo pixel avrà la sua terna di numeri ciascuno legato a 1 byte che descrive il livello di rosso, verde e blu. Dove il livello 0 vuol dire che non c’è nessuna emissione della tonalità di una determinata componente mentre il numero 255 vuol dire che c’è la massima emissione di tonalità di quella determinata componente.
I 3 byte legati alla terna RGB di quel pixel vengono trasformati dal punto di vista numerico da un valore digitale ad un valore analogico di tensione che andrà ad alimentare il LED del rosso, il LED del verde e il LED del blu. Quel LED, tanta più tensione riceve, tanta più luce emetterà.
Acquisizione di immagini a colori
Lo stesso ragionamento adottato finora può essere utilizzato per acquisire un’immagine a colori. Quindi bisognerà acquisire l’energia luminosa e tradurla in un contenuto numerico. Per fare ciò abbiamo bisogno di elementi fisici (sensori) che traducono l’energia luminosa in un altro tipo di energia più facilmente traducibile numericamente.
Una qualità di questi sensori di cui tener conto è senz’altro la sensibilità dei sensori stessi, ovvero la capacità del sensore di accorgersi che esiste o meno una quantità di energia luminosa presente, che poi il sensore stesso deve in qualche modo trasformare in valore numerico. In generale, una componente che ci aiuta a capire la sensibilità del sensore può essere la dimensione del sensore stesso. Maggiore sarà la superficie del sensore, maggiore sarà il numero di fotoni che, a parità di condizioni, impattano sul sensore stesso, maggiore sarà l’energia luminosa che il sensore riceverà.
Aumentare però la superficie di un sensore presenta dei costi, in quanto il sensore fondamentalmente è un chip, quindi più grande è il chip, più sarà il costo di produzione del chip stesso. Un approccio software per aumentare la sensibilità di un sensore è quello di avere un sensore ad esempio di 1000 × 1000 ovvero 1000 righe e 1000 colonne e quindi in sostanza 1 milione di pixel, facendo un accorpamento dei pixel stessi.
Cioè, invece di avere in uscita da questo sensore 1 milione di numeri ciascuno legato alla traduzione del valore di tensione letto, avremo in uscita un numero inferiore di pixel, secondo un criterio di compressione adottato sull’immagine originale tradotta. Quindi gruppi di pixel, ad esempio a gruppi di 4 o 16 a seconda della policy adottata, verranno compressi in un unico pixel. In questo modo però si va a ridurre la risoluzione dell’immagine stessa.
Immagini in scala di grigi e a colori
Quanto visto finora è ciò che si fa per quanto riguarda le immagini in scala di grigi. Per le immagini a colori bisogna estrarre dall’energia catturata al sensore il contenuto cromatico dell’energia. Sappiamo che la luce è emessa in uno spettro cromatico e a seconda della lunghezza d’onda di quel fotone abbiamo la luce di un certo colore.
Un’immagine a colori può essere acquisita nel seguente modo: possiamo fare in modo che un determinato pixel del sensore, invece di recepire qualsiasi fotone, ne recepisca soltanto alcuni di essi, mediante l’utilizzo di filtri. Se tra il sensore e il fotone apponessimo un filtro che faccia passare solamente i fotoni che ad esempio portano solamente la lunghezza d’onda del verde, cosa succederebbe? Solo i fotoni della lunghezza d’onda del verde passeranno questo filtro, solo loro porteranno con sé l’energia che andrà ad impattare sul sensore e quindi il valore di tensione che quel sensore trasdurrà, sarà in qualche modo legato al colore verde riflesso dalla scena. Questo perché qualsiasi altra componente diversa dal verde verrà bloccata dal filtro verde.
Quindi se utilizzo questo tipo di filtri e li vado a frapporre fra la scena e i pixel del sensore, quei pixel caratterizzati da quei filtri saranno tali da trasdurre non più il valore di luminosità, ma le lunghezze d’onda che saranno passate da quel particolare filtro. Sul sensore però non potrò mai andare a sovrapporre più di un filtro perché altrimenti il sensore sarebbe cieco. In quanto se avessi due filtri verde e rosso, la lunghezza d’onda dal verde sarebbe bloccata dal filtro del rosso e la lunghezza d’onda del rosso sarebbe bloccata dal filtro del verde. Quindi, un determinato pixel del sensore potrà avere solo un tipo di filtro.
Se ho quindi un fotone di una determinata lunghezza d’onda, diversa dal classico RGB, quindi, ad esempio il rosa che ha le sue tre componenti di rosso, verde e blu, questo fotone di questa lunghezza d’onda riuscirà a passare soltanto in funzione della quota di energia del filtro applicato sul determinato pixel del sensore. Questo significa che se volessi ricostruire un colore nella sua terna originale non potrei.
Sensore a colori e pattern Bayer
Quindi nella realtà, un sensore a colori è fatto in questo modo: i singoli pixel sono ciascuno associati a un unico colore, quindi su ciascuno di essi ci sarà un apposito filtro. Avrò quindi una cosiddetta matrice creata su un certo pattern in cui un pixel riceve energia luminosa emessa dalla scena in quella posizione, energia luminosa viene filtrata dal filtro posto sul pixel del sensore e passerà solamente la componente di colore associata al filtro applicato e quel pixel e registrerà con un valore di tensione la componente letta.
Non saprò mai quindi qual è il vero colore di quel punto della scena, saprò solo la componente di colore che sarà passata attraverso il filtro applicato su quel punto. Però cosa succede? Vicino a quel pixel avrò messo un pixel di un altro colore e un ulteriore pixel di un altro colore.
Quindi se sul pixel del sensore fosse stato applicato un filtro verde, verrebbe presa la componente reale del verde e affiancato un pixel rosso e un altro pixel blu. Ciascuno di questi pixel tira fuori un’informazione che è legata alla componente rossa, verde o blu reale del pixel stesso, nulla potendo dire della componente reale degli altri colori. Siccome questi pixel tra loro sono molto vicini, andando a considerare il pixel con filtro verde, saprò con precisione la componente verde e immaginerò la componente rossa e la componente blu di quel pixel come l’interpolazione proveniente dalle componenti rosso e blu dei pixel vicini.
Quindi un singolo pixel avrà solo un colore reale, le altre due componenti verranno estrapolate effettuando una stima delle componenti rossa e blu, se considero un pixel con filtro verde, ricorrendo a delle interpolazioni che vanno dai valori reali dei pixel rossi vicini e dei pixel blu vicini.
Se volessi sapere il colore di questo pixel, ho il suo colore rosso che è proprio quello del pixel, mentre per il colore verde e il colore blu andrò a prendere un verde che dipende dalle componenti verdi immediatamente vicine e un blu che dipende anche esso dalle componenti blu immediatamente vicine al pixel in esame. Quindi per quanto riguarda le componenti verdi e blu, andrò a fare un’interpolazione basandomi sulle componenti verdi e blu vicine al pixel in esame, associando pesi maggiori o inferiori in base alla vicinanza delle componenti verdi e blu al pixel in esame. Ad esempio, il pixel verde a destra del pixel in esame avrà un peso maggiore del pixel verde a sinistra del pixel in esame e il pixel blu a sinistra del pixel in esame avrà un peso maggiore del pixel blu a destra del pixel rosso in esame.
Pattern Bayer
Quella vista finora è un tipo di matrice, ma quella più diffusa è la cosiddetta matrice che prende il nome di Bayer pattern. Anche in questo caso, per andare ad estrarre le due componenti, si andrà a fare un’interpolazione delle componenti vicine al pixel in esame avendo un’accuratezza maggiore quando andremo a fare l’interpolazione sui pixel verdi.
Fondamentalmente, i filtri applicati sui vari pixel di sensori sono delle sostanze chimiche che vengono applicate sulla superficie del sensore con un processo che prende il nome di coating, che consente di depositare sulla superficie del sensore del particolare materiale, questo materiale che si va a depositare sostanzialmente si comporta da filtro.
Lenti e illuminotecnica
Per ottica intendiamo la lente o l’obiettivo che in qualche modo ha la funzione di ottimizzare il convogliamento dell’energia luminosa sul sensore. Rappresenta tutto ciò che riguarda la tecnica con cui illuminare quello che noi tentiamo di prendere.
Esistono diverse applicazioni dove l’illuminotecnica viene trascurata e sono applicazioni che lavorano nelle ore diurne outdoor. Quindi in questo caso l’illuminotecnica viene demandata all’energia solare. L’illuminotecnica è però fondamentale in tutta una serie di applicazioni industriali, ovviamente indoor, e in queste applicazioni è necessario avere una situazione di luminosità il più stabile possibile. Ciò comporta l’introduzione di illuminatori aggiuntivi.
Telecamere e caratteristiche
Parleremo del tipo di telecamera e di tutte le caratteristiche legate ad essa. Possiamo immaginare sia una telecamera convenzionale che acquisisce una serie di frame, sia telecamere cosiddette lineari che servono per applicazioni in cui la dimensione dell’immagine non è nota a priori.
Possiamo suddividere le telecamere anche in base al tipo di sensore, di parametri, la stabilizzazione, la velocità di acquisizione, la sensibilità ecc.
Hardware e software
Un ultimo aspetto decisivo è quello dell’hardware e del software. Quando parliamo di hardware, dobbiamo anche comprendere l’interfaccia tra la telecamera e l’unità di calcolo. Per hardware non intendiamo soltanto la CPU o la scheda video, ma anche quelle componenti hardware come la scheda di interfaccia tra la telecamera e il pc (che può semplicemente servire per garantire il corretto flusso di dati tra la telecamera e il pc o può servire come interfaccia USB o interfaccia di rete).
Questi aspetti sono spesso definiti dalle specifiche del sistema e, se non sono definiti in maniera esplicita dalla richiesta del cliente, il progettista deve in qualche modo ricavare queste informazioni.
Campo visivo e distanza di lavoro
Il campo visivo rappresenta l’area inquadrata dalla telecamera. Se ho una telecamera che riprende una porzione dell’oggetto, il campo visivo è quella porzione dell’oggetto. Se invece la telecamera riprende una scena più ampia in cui è presente l’oggetto, il campo visivo è tutta quella scena. Il campo visivo è determinato dalla posizione della telecamera, dall’ottica della telecamera (la lente) e dalla geometria del sensore.
Immaginiamo un nastro trasportatore: i pezzi viaggiano da una stazione produttiva all’altra (da sinistra verso destra). Immaginiamo che il pezzo in questo tragitto sia in un punto qualsiasi del nastro, quindi può stare sia sul bordo superiore sia sul bordo inferiore o in qualsiasi altra posizione del nastro. È chiaro quindi che il mio campo visivo deve avere lungo la direzione X una dimensione almeno pari al nastro trasportatore.
Per quanto riguarda la direzione Y, se voglio acquisire certamente la dimensione dell’oggetto evidenziato, quanto grande deve essere il campo visivo? Bisognerà tener conto della velocità del nastro trasportatore e della frequenza con il quale vengono acquisite le informazioni (frame rate). In base a queste informazioni possiamo decidere quanto allargare o rimpicciolire il campo visivo sulla coordinata Y.
La distanza di lavoro rappresenta la distanza fra la lente della telecamera e l’oggetto da analizzare. Tipicamente, maggiore è questa distanza di lavoro, migliore sarà dal punto di vista ideale l’acquisizione dell’immagine, ciò mi consentirà inoltre di avere una profondità di campo maggiore. Maggiore sarà la distanza di lavoro, maggiore sarà l’ingombro di tutto il sistema.
Considerazioni sulla distanza di lavoro
Supponiamo che vogliamo esaminare la superficie del pezzo presente sul nastro trasportatore. La distanza di lavoro sarà la distanza che va dalla telecamera alla superficie superiore del pezzo presente sul nastro trasportatore. Se voglio una distanza di lavoro più grande, dovrò allontanare la telecamera, ma non sempre è possibile farlo.
Possiamo fare lo stesso discorso con una telecamera che riprende la superficie laterale del pezzo: se mi voglio allontanare dal pezzo, potrei creare problemi allo stabilimento, in quanto tra la lente della telecamera e il pezzo non ci deve essere nulla, nessuno potrà passare. Ad esempio, se la distanza tra la telecamera e il pezzo è di 5 metri, ci saranno 5 metri nello stabilimento in cui nessuno potrà passare davanti alla lente.
Ciò dimostra quindi come maggiore sarà la distanza di lavoro, maggiore sarà l’ingombro del sistema. Tutti questi elementi come la distanza di lavoro, il campo visivo eccetera, sono tutti aspetti geometrici.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
-
Appunti completi del corso di Computer Vision
-
Appunti completi Explainable artificial intelligence
-
Appunti completi corso Intelligenza Artificiale
-
Controllo strategico - Appunti