4.20. Riepilogo

Hai esaminato le parti dello stack di imaging della camera che entrano in gioco ogni volta che uno script cattura un frame:

  • L’ottica davanti al sensore – un foro stenopeico come elemento di formazione dell’immagine piu semplice, poi gli obiettivi, che raccolgono molta piu luce mantenendo comunque la messa a fuoco, con lunghezza focale, apertura, profondita di campo e campo visivo come i parametri tra cui l’applicazione sceglie. Gli obiettivi reali presentano distorsione, vignettatura ed effetti dell’angolo del raggio principale (chief-ray-angle) che il sensore e l’ISP compensano successivamente.

  • La griglia del sensore – un array bidimensionale di fotodiodi che trasforma i fotoni in carica, con il tempo di esposizione e il guadagno analogico che bilanciano la luminosita contro il motion blur e il rumore. Gli otturatori rolling e global determinano come vengono lette le righe dell’array, e un piccolo insieme di calibrazioni on-chip – FPN di colonna, livello del nero, pixel difettosi, lens shading – ripulisce i dati prima che lascino il chip. Due bus collegano il chip all’MCU: un bus di controllo I2C lento per i registri e un bus parallelo o MIPI veloce per i pixel.

  • Il colore e l’ISP – un array di filtri colore di Bayer assegna a ciascun pixel uno tra rosso, verde o blu; il debayering interpola i due canali mancanti. L’image signal processor mette insieme il resto della pipeline – estrazione delle statistiche, bilanciamento automatico del bianco, debayering, correzione tramite matrice di colore, gamma, scalatura, ritaglio e un impacchettamento finale nel formato pixel richiesto.

  • I formati pixel – raw Bayer, RGB888, RGB565, YUV422, scala di grigi, BINARY e le uscite compresse JPEG / PNG bilanciano la dimensione in memoria contro la fedelta del colore e la compatibilita con gli algoritmi a valle. RGB565 e il predefinito per il colore finito perche si allinea con l’ampiezza di parola dell’MCU e dimezza il costo in memoria rispetto a RGB888.

  • L’API CSI – cinque righe di configurazione piu un loop di snapshot e la forma da cui parte ogni script. I pool di framebuffer (singolo, doppio, triplo, video FIFO o triggered) decidono come l’applicazione e la camera condividono i frame; un canale di anteprima separato alimenta qualunque programma di debug collegato senza competere per i buffer dell’applicazione; i parametri del sensore coprono orientamento, esposizione, guadagno, bilanciamento del bianco, limite di frame rate e un pattern di test a barre colorate.

  • Sensori multipli e pool di memoria – le schede con due sensori istanziano una CSI per chip ed eseguono ciascuna alla propria frequenza. Al di sotto, il pool di framebuffer, la regione di anteprima, l’heap di MicroPython e le allocazioni piu piccole di memoria veloce risiedono in regioni distinte della RAM, collocate in modo che le parti che necessitano di velocita la ottengano e le parti che necessitano solo di spazio ottengano quello.

Questo e sufficiente per estrarre un frame dal sensore con il formato, il framesize e l’esposizione giusti per la scena; scegliere una modalita di framebuffer che corrisponda al tempo di elaborazione dell’applicazione; esporre un’anteprima dal vivo verso qualunque cosa sia collegata; e leggere l’oggetto Image in Python pronto per essere elaborato.

4.20.1. Usare questo riferimento in seguito

Considera i capitoli sull’imaging come materiale di riferimento, non una lettura da fare una volta sola. Tornarci per rinfrescare le modalita di framebuffer, i formati pixel o il significato di un dato parametro del sensore e l’uso previsto. La pagina di riferimento csi.CSI elenca ogni metodo in un unico posto quando la domanda e semplicemente «qual e di nuovo il nome esatto di questa chiamata».

4.20.2. Dove andare da qui

L’elaborazione delle immagini e il prossimo argomento naturale. Con il buffer in mano e l’API csi compresa, cio che resta e cosa fare con i pixel: soglie, rilevamento dei bordi, ricerca di blob, rilevamento di linee e forme, codici QR, AprilTag, inferenza di machine learning. Il toolkit si sposta sul modulo image e sul suo catalogo di metodi sull’oggetto Image. Tutto quanto visto in questa sezione viene portato avanti; la forma del loop, la modalita di framebuffer, il formato pixel – tutto cio e cio su cui operano i metodi di elaborazione delle immagini.