4.20. Sammanfattning¶
Du har gått igenom de delar av kamerans bildstack som dyker upp varje gång ett skript fångar en bildruta:
Optiken framför sensorn – en nålhål som det enklaste bildformande elementet, sedan linser, som samlar in långt mer ljus samtidigt som de fokuserar, med brännvidd, bländare, skärpedjup och synfält som de rattar som tillämpningen väljer från. Verkliga linser kommer med distorsion, vinjettering och huvudstråle-vinkeleffekter som sensorn och ISP:n senare kompenserar för.
Sensorrastret – en tvådimensionell matris av fotodioder som omvandlar fotoner till laddning, med exponeringstid och analog förstärkning som väger ljusstyrka mot rörelseoskärpa och brus. Rullande och globala slutare avgör hur matrisens rader läses ut, och en liten uppsättning kalibreringar på chipet – kolumn-FPN, svartnivå, defekta pixlar, linsskuggning – rensar datan innan den lämnar chipet. Två bussar förbinder chipet med MCU:n: en långsam I2C-styrbuss för register och en snabb parallell- eller MIPI-buss för pixlar.
Färg och ISP:n – en Bayer-färgfiltermatris ger varje pixel en av rött, grönt eller blått; debayering interpolerar de saknade två kanalerna. Bildsignalprocessorn syr ihop resten av pipelinen – statistikutvinning, automatisk vitbalans, debayering, färgmatriskorrigering, gamma, skalning, beskärning och en slutlig packning till det begärda pixelformatet.
Pixelformat – rå Bayer, RGB888, RGB565, YUV422, gråskala, BINARY och de komprimerade JPEG-/PNG-utdata väger minnesstorlek mot färgtrohet och kompatibilitet med efterföljande algoritmer. RGB565 är standarden för färdig färg eftersom det stämmer överens med MCU:ns ordbredd och halverar minneskostnaden jämfört med RGB888.
CSI-API:t – fem rader uppsättning plus en stillbildsloop är formen som varje skript utgår ifrån. Bildbuffertpooler (enkel, dubbel, trippel, video-FIFO eller utlöst) avgör hur tillämpningen och kameran delar bildrutor; en separat förhandsgranskningskanal matar vilket felsökningsprogram som än är anslutet utan att konkurrera om tillämpningens buffertar; sensorrattar täcker orientering, exponering, förstärkning, vitbalans, tak för bildhastighet och ett testmönster med färgstaplar.
Flera sensorer och minnespooler – kort med två sensorer instansierar en
CSIper chip och kör var och en i sin egen takt. Under huven lever bildbuffertpoolen, förhandsgranskningsregionen, MicroPython-heapen och de mindre snabbminnesallokeringarna i skilda regioner av RAM, placerade så att de delar som behöver snabbhet får det och de delar som bara behöver storlek får det i stället.
Det räcker för att ta en bildruta ur sensorn med rätt format, bildstorlek och exponering för scenen; välja ett bildbuffertläge som matchar tillämpningens bearbetningstid; exponera en liveförhandsgranskning till vad som än är anslutet; och läsa tillbaka Image till Python redo att bearbetas.
4.20.1. Att använda denna referens senare¶
Behandla bildkapitlen som referensmaterial, inte en genomläsning i en enda omgång. Att komma tillbaka för att fräscha upp minnet om bildbuffertlägen, pixelformat eller betydelsen av en viss sensorratt är den avsedda användningen. Referenssidan csi.CSI listar varje metod på ett och samma ställe när frågan bara är ”vad var det exakta namnet på det här anropet igen”.
4.20.2. Vart man går härifrån¶
Bildbehandling är det naturliga nästa ämnet. Med bufferten i handen och csi-API:t förstått är det som återstår vad man ska göra med pixlarna: tröskelvärden, kantdetektering, blobsökning, linje- och formdetektering, QR-koder, AprilTags, maskininlärningsinferens. Verktygslådan skiftar till image-modulen och dess katalog av metoder på Image-objektet. Allt från detta avsnitt bärs vidare; loopformen, bildbuffertläget, pixelformatet – allt är det som bildbehandlingsmetoderna verkar på.