Mosaici fotografici con i vicini più prossimi Machine Learning per l’arte digitale

Mosaici fotografici con l'uso di Machine Learning per l'arte digitale con i vicini più prossimi

Ecco un esempio!

Animazione di zoom, consigliata la visione a schermo intero. (Video dell’autore)

L’innovazione tecnologica sta aumentando a ritmo frenetico e ha reso lo storage digitale estremamente economico e accessibile. Inoltre, la maggior parte delle persone ora ha telefoni con fotocamere in grado di catturare immagini di alta qualità. La maggior parte delle immagini scattate viene visualizzata alcune volte e poi inviata per rimanere su un hard disk o su un servizio di archiviazione cloud. Ciò comporta che le persone accumulino grandi librerie di immagini. Io non sono diverso e, dato che avevo del tempo extra durante i lockdown dovuti al COVID-19, ho creato un software per dare una seconda vita alle foto presenti nelle librerie delle persone. Questo software crea fotomosaic.

Un fotomosaico è un’immagine o foto creata unendo molte immagini più piccole. Nel gif e nel video sopra, è facile vedere quante piccole immagini quadrate vengono utilizzate per creare un’immagine più grande. Ci sono vari metodi per creare questi mosaici; ad esempio, le immagini o i quadrati più piccoli possono essere scelti e posizionati nell’immagine più grande in base al colore o alla struttura dell’immagine. In questo articolo, ci concentriamo su una strategia di corrispondenza del colore ed è particolarmente interessante per un pubblico di data science o di machine learning perché utilizza un approccio di modellazione dei vicini più prossimi (K-nearest neighbors o KNN).

Definire il problema

Come sempre, è una buona pratica decostruire il problema e creare funzioni attorno ai vari componenti necessari per raggiungere l’obiettivo. Prima di tutto dobbiamo dividere l’immagine più grande o di copertina in sottosezioni più piccole (vedi Figura 1. qui sotto). Una volta ottenute le sottosezioni più piccole, possiamo trovare l’immagine più adatta per ogni sottosezione. Stiamo utilizzando un metodo di corrispondenza del colore per creare il mosaico, quindi possiamo formalizzare il problema nel seguente modo: per ogni sottosezione dell’immagine di copertina, trovare un’immagine più adatta che si avvicini il più possibile al colore.

Figura 1: Qui dividiamo la nostra immagine di copertina in sottosezioni quadrate indicate dalla linea bianca. (Immagine dell’autore)

Struttura delle immagini a colori

Le immagini a colori digitali sono composte da diversi canali di colore dei pixel che, una volta combinati, creano un’immagine a colori. Un formato comune è quello dei formati immagine rosso verde blu o RGB, in cui un’immagine a colori è composta da canali rosso, verde e blu. Le immagini sono comunemente memorizzate su 8 bit, il che significa che i valori dei pixel per ciascuno dei canali di colore variano tra 0 e 255 (2⁸-1).

Figura 2: Qui catturiamo i valori medi RGB sia per la sottosezione (in alto) che per la tessera (in basso). Non c’è una corrispondenza esatta per questa sottosezione nella libreria, ma è vicina. (Immagine dell’autore)

Se prendiamo il valore medio dei pixel rossi, verdi e blu per ogni immagine, possiamo utilizzare tre numeri per descrivere il colore generale di ciascuna immagine. Pertanto, per trovare la tessera adatta a ciascuna sottosezione, dobbiamo trovare la tessera con gli stessi valori medi dei pixel RGB. Possiamo iniziare creando una lista di valori medi dei pixel RGB per ogni sottosezione dell’immagine di copertina. Possiamo quindi creare una lista di valori medi dei pixel RGB dalla nostra libreria di foto con tessere. Una volta create le due liste, possiamo iterare sulla lista delle sottosezioni e cercare nella libreria delle tessere per trovare valori medi dei pixel RGB corrispondenti.

Grazie alla programmazione dinamica intelligente e alle strutture dati efficienti, questa ricerca può essere effettuata relativamente velocemente. Tuttavia, c’è un grande difetto in questo approccio che va affrontato. Potrebbe accadere che la tua libreria di immagini con tessere è incompleta e non sono rappresentati tutti i valori medi dei pixel RGB. Di conseguenza, una ricerca della tessera con il valore medio RGB esatto non darà risultati, vedi Figura 2. La soluzione sarebbe quella di trovare la tessera successiva con il valore medio RGB corrispondente più vicino. Sono state effettuate ricerche approfondite per determinare la “vicinanza” dei colori. Ad esempio, è ben noto che i colori nero e bianco non sono affatto vicini. Tuttavia, la nostra soluzione è semplice e utilizza il machine learning.

Colore più vicino con K-Nearest Neighbors

Ogni sotto-sezione e ogni piastrella sono rappresentate da tre numeri per i valori medi dei colori rosso, verde e blu. Possiamo considerare i tre valori di colore come una dimensione separata e, quindi, possiamo creare un grafico 3D in cui ogni colore è una dimensione o un asse. Se rappresentiamo i valori della sotto-sezione, per i quali stiamo cercando una piastrella corrispondente, con le possibili piastrelle nella nostra libreria, possiamo vedere quali piastrelle hanno i valori di colore più vicini.

Figura 3: Il valore RGB medio per la sotto-sezione è rappresentato in rosso. Le piastrelle con valori RGB simili sono rappresentate in arancione. Utilizzando il KNN possiamo trovare l’abbinamento più vicino indicato con la “X” gialla. (Immagine dell’autore)

L’algoritmo KNN può valutare tutte le piastrelle nella libreria e modellare il valore medio del pixel. Quindi, quando si cercano piastrelle corrispondenti per ogni sotto-sezione, il modello restituirà il vicino più prossimo o la piastrella con i valori di colore più simili. Questa ricerca è illustrata nella Figura 3. Utilizzare il KNN è più robusto rispetto a una ricerca forzata del valore esatto, poiché ci sono casi in cui il valore esatto potrebbe non esistere. Sotto il cofano, i modelli KNN possono essere costruiti utilizzando una struttura simile a un albero che rende la ricerca o il suo attraversamento relativamente efficiente. Pertanto, le prestazioni sono anche paragonabili ad altre soluzioni che abbiamo menzionato. Una volta trovate tutte le piastrelle per ciascun colore della sotto-sezione, è possibile utilizzare un semplice indicizzazione array/matrice per unire tutte le immagini delle piastrelle per creare il mosaico finale della copertina.

Conclusioni

Se desideri avere il tuo mosaico fotografico o hai bisogno di aiuto per costruirne uno, non esitare a contattarci. Possiamo riutilizzare le tue vecchie immagini che stanno raccogliendo polvere da qualche parte su un disco rigido e dar loro una seconda possibilità di diventare qualcosa di bello. Ehi, forse possono persino diventare NFT!

Diamo un’occhiata a un altro esempio di mosaico fotografico con un’animazione diversa. Tutte le animazioni vengono create in modo programmato e saranno descritte nei post successivi.

Animazione disperdere, consigliato vedere a schermo intero. (Video dell’autore)

Articolo originariamente pubblicato qui. Ripubblicato con il permesso dell’autore.