Valutazione della qualità di visualizzazione di un sistema a LED sparsi
by Tullio Facchinetti
L’obiettivo del progetto è di simulare un sistema reale composto da strisce di LED, dette strip, che vengono usate per visualizzare immagini accendendo i LED del colore desiderato. Dal momento che i LED non sono necessariamente disposti collocati in posizioni “regolari” come invece avviene per i pixel in uno schermo, la simulazione permette di avere un’indicazione visuale della qualità della proiezione al variare dei parametri.
La simulazione permette di valutare i seguenti aspetti:
- Il posizionamento strip con diversi pattern (generazione mappa di pixel).
- L’acquisizione dell’immagine delle strip tramite fotocamera.
- L’utilizzo di codice esistente per la mappatura tra pixel e colori.
- La rappresentazione di un’immagine tramite i LED.
Durante lo sviluppo del progetto è stato anche effettuato il refactoring del codice esistente che implementa il sistema reale di configurazione dei LED.
Workflow
Il workflow proposto per la simulazione prevede che ìl simulatore venga configurato inserendo i parametri desiderati nel file params.json
.
In base a tali parametri, lo script json_creator
genera un file in formato JSON contenente la posizione fisica dei LED simulati.
Lo script json_converter
traduce il file in un formato, sempre basato su JSON, compatibile con il sistema già implementato.
Lo script image_creator
genera l’immagine che rappresenta la disposizione dei LED.
Infine, image_to_leds
si occupa di generare l’immagine con i LED opportunamente colorati per la visualizzazione dell’immagine da “proiettare”.
Gli script sono stati realizzati in linguaggio Python, e utilizzano le librerie NumPy, Pillow e OpenCV rispettivamente per l’elaborazione dei dati, per il rendering delle immagini generate, e per l’elaborazione dell’immagine da proiettare.
Parametri di configurazione
Il simulatore permette di configurare i parametri più rilevanti per la generazione del risultato, incluso il numero di strip, la quantità di LED presenti su ciascuna strip, la loro dimensione e raggruppamento (le strip commerciali spesso realizzano ogni “pixel” con più di un LED), e alcune informazioni che determinano il posizionamento casuale delle strip.
Mappatura dei colori
Una volta nota la posizione dei LED, viene individuato il colore di ciascuno di essi mappando il colore dei pixel dell’immagine che si desidera proiettare in base alla posizione.
Il colore di un pixel sulla strip viene individuato facendo la media dei colori presenti nel rettangolo corrispondente alla posizione del LED nell’immagine.
In questa fase è stato svolta una ottimizzazione del codice esistente che svolgeva la mappatura dei colori, il quale per ragioni pratiche non era mai stato testato con un numero elevato di LED. In una simulazione con un’immagine avente risoluzione di 320 x 200 pixel (64000 pixel in totale), si è abbassato il tempo totale di calcolo da circa 32 minuti a poco più di 2 secondi, permettendo lo svolgimento della simulazione anche in caso di immagini di grandi dimensioni.
Risultati
Sono state effettuate varie simulazioni per mostrare l’effetto della modifica dei parametri.
Negli esempi compare una tabella che riporta i valori dei parametri più rilevanti per la simulazione. In particolare:
- Il pattern impostato per la disposizione casuale delle strip.
- Il numero totale di strip.
- Il numero di LED per ciascuna strip.
- Il numero di LED per ciascun pixel.
- Il numero totale di LED, che può essere utile per stimare il costo sel sistema (un LED di questo tipo costa circa 10 centesimi)
- Il numero totale di pixel dell’immagine.
- La risoluzione indicativa dell’immagine ottenuta.
- La superficie coperta dai LED se il sistema fosse realizzato nella realtà.
Le immagini riportate in ciascun esempio sono:
- L’immagine che si desidera proiettare.
- La disposizione dei LED.
- L’immagine proiettata colorando i LED del colore necessario.
Simulazione 1
Parametro | Valore |
---|---|
Pattern | verticale |
N. Strip | 1610 |
N. LED per strip | 2862 |
N. LED per pixel | 5 |
N. LED totali | 4607820 |
N. Pixel | 921564 |
Risoluzione approssimata | 1280 x 720 |
Superficie equivalente | 315.6 m^2 (14.7 x 21.4) m |
Simulazione 2
Parametro | Valore |
---|---|
Pattern | orizzontale |
N. Strip | 2560 |
N. LED per strip | 3456 |
N. LED per pixel | 1 |
N. LED totali | 8847360 |
N. Pixel | 8847360 |
Risoluzione approssimata | 4096 x 2160 |
Superficie equivalente | 1396.8 m^2 (52.5 x 26) m |
Simulazione 3
Parametro | Valore |
---|---|
Pattern | random |
N. Strip | 1000 |
N. LED per strip | 600 |
N. LED per pixel | 5 |
N. LED totali | 600000 |
N. Pixel | 120000 |
Superficie equivalente | 174.24 m^2 (13.2 x 13.2) m |
Effetto della risoluzione
Un ulteriore test è stato effettuato per valutare l’effetto ottenuto con un numero relativamente limitato di pixel rispetto a risoluzione troppo elevate per l’applicazione proposta.