4.20. Afronding¶
Je hebt de onderdelen doorlopen van de beeldvormingsstack van de camera die elke keer aan bod komen wanneer een script een frame vastlegt:
De optiek voor de sensor – een pinhole als het eenvoudigste beeldvormende element, en daarna lenzen, die veel meer licht verzamelen terwijl ze toch scherpstellen, met brandpuntsafstand, diafragma, scherptediepte en gezichtsveld als de knoppen waaruit de toepassing kiest. Echte lenzen brengen vervorming, vignettering en chief-ray-angle-effecten met zich mee die de sensor en de ISP later compenseren.
Het sensorraster – een tweedimensionaal raster van fotodiodes dat fotonen omzet in lading, waarbij belichtingstijd en analoge versterking helderheid afwegen tegen bewegingsonscherpte en ruis. Rolling shutter en global shutter bepalen hoe rijen van het raster worden uitgelezen, en een kleine set on-chip-kalibraties – kolom-FPN, zwartniveau, defecte pixels, lens shading – maakt de data schoon voordat deze de chip verlaat. Twee bussen verbinden de chip met de MCU: een trage I2C-besturingsbus voor registers en een snelle parallelle of MIPI-bus voor pixels.
Kleur en de ISP – een Bayer-kleurfilterarray geeft elke pixel een van rood, groen of blauw; debayering interpoleert de twee ontbrekende kanalen. De image signal processor naait de rest van de pipeline aaneen – statistiekextractie, automatische witbalans, debayering, kleurmatrixcorrectie, gamma, schalen, bijsnijden en een uiteindelijke samenvoeging tot het gevraagde pixelformaat.
Pixelformaten – ruwe Bayer, RGB888, RGB565, YUV422, grijswaarden, BINARY en de gecomprimeerde JPEG- / PNG-uitvoer wegen geheugengrootte af tegen kleurgetrouwheid en compatibiliteit met downstream-algoritmen. RGB565 is de standaard voor afgewerkte kleur omdat het aansluit op de woordbreedte van de MCU en de geheugenkosten halveert ten opzichte van RGB888.
De CSI-API – vijf regels installatie plus een snapshot-lus is de vorm waarmee elk script begint. Framebuffer-pools (single, double, triple, video FIFO of triggered) bepalen hoe de toepassing en de camera frames delen; een apart previewkanaal voedt welk debugprogramma er ook is aangesloten zonder te concurreren om de buffers van de toepassing; sensorknoppen dekken oriëntatie, belichting, versterking, witbalans, framerate-limiet en een kleurbalk-testpatroon.
Meerdere sensoren en geheugenpools – borden met twee sensoren instantiëren één
CSIper chip en draaien elke chip op zijn eigen snelheid. Daaronder bevinden de framebuffer-pool, het previewgebied, de MicroPython-heap en de kleinere snelle-geheugentoewijzingen zich in afzonderlijke regio’s van RAM, zo geplaatst dat de onderdelen die snelheid nodig hebben die krijgen en de onderdelen die alleen omvang nodig hebben dat in plaats daarvan krijgen.
Dat is genoeg om een frame uit de sensor te halen met het juiste formaat, framesize en de juiste belichting voor de scene; een framebuffer-modus te kiezen die past bij de verwerkingstijd van de toepassing; een live preview beschikbaar te stellen aan wat er ook is aangesloten; en de Image terug in Python in te lezen, klaar om bewerkt te worden.
4.20.1. Deze referentie later gebruiken¶
Behandel de beeldvormingshoofdstukken als referentiemateriaal, niet als een eenmalige lezing. Terugkomen om je geheugen op te frissen over framebuffer-modi, pixelformaten of de betekenis van een bepaalde sensorknop is het bedoelde gebruik. De referentiepagina csi.CSI somt elke methode op één plek op wanneer de vraag gewoon is “wat is ook alweer de exacte naam van deze aanroep”.
4.20.2. Hoe nu verder¶
Beeldverwerking is het natuurlijke volgende onderwerp. Met de buffer in handen en de csi-API begrepen, blijft over wat je met de pixels moet doen: drempelwaarden, randdetectie, blob-detectie, lijn- en vormdetectie, QR-codes, AprilTags, machine learning-inferentie. De gereedschapskist verschuift naar de image-module en de catalogus van methoden op het Image-object. Alles uit dit hoofdstuk wordt meegenomen; de vorm van de lus, de framebuffer-modus, het pixelformaat – het is allemaal waarop de beeldverwerkingsmethoden werken.