4.13. Pixelformat¶
Det sista steget i ISP-pipelinen packar varje pixel i en viss bytelayout i minnet. Det valda formatet avväger bildkvalitet, minnesstorlek och hur efterföljande kod läser tillbaka byten. En handfull format dominerar.
4.13.1. RAW (Bayer)¶
Standardutdata är rå Bayer – samma enkanalsmosaik per pixel som sensorn producerar. En byte per pixel, upplagd i Bayer-mönstret: rött och grönt omväxlande på jämna rader, grönt och blått omväxlande på udda rader. Ingen debayering har tillämpats, så varje cell innehåller fortfarande bara det värde som dess färgfilter släppte igenom.
Rå Bayer är en tredjedel av minnet för en färdig trekanalig RGB-bild – en byte per pixel mot tre – och inga ISP-cykler har lagts på att debayera eller konvertera den. Kostnaden är att användarkoden själv måste göra debayeringen innan någon färgmedveten bearbetning kan köras.
4.13.2. RGB888¶
RGB888 är det naturliga färdiga formatet för en färgbild: tre byte per pixel, en var för de röda, gröna och blå kanalerna vid 8 bitar per kanal. Tjugofyra bitar per pixel och knappt sjutton miljoner distinkta färger.
RGB888 är den begreppsmässiga referensen för färdiga färgbilder och de flesta externa programvaror talar det. På inbyggd hårdvara är dess största nackdel pixelstorleken på 24 bitar – inte en multipel av processorns ordstorlek, otymplig för minnesjustering och 50 % större än nästa format nedåt.
4.13.3. RGB565¶
RGB565 packar varje pixel i två byte: fem bitar rött, sex bitar grönt, fem bitar blått. Den extra gröna biten speglar ögats högre känslighet för grönt, och den matchar den gröna kanalens dubbla vikt i Bayer-mönstret.
RGB565 är standardfärgformatet på OpenMV Cam. Två byte per pixel är 16-bitsjusterat, vilket passar MCU:ns naturliga databredder – pixelinläsningar, lagringar och aritmetik körs alla i full hastighet, och många operationer kan bearbeta ett par pixlar åt gången. RGB888:s 24-bitarspixlar ställer inte upp på det sättet och betalar en kostnad vid varje åtkomst. Minnesbesparingen på 33 procent jämfört med RGB888 räknas också ihop: QVGA (320 x 240) är 150 KB i RGB565 mot 225 KB i RGB888, och gapet växer med upplösningen.
Avvägningen är 65 tusen distinkta färger istället för sjutton miljoner. För de flesta uppgifter inom maskinseende är skillnaden osynlig, eftersom algoritmerna reducerar bildrutan till tröskelvärdesbaserade eller kantdetekterade representationer som ändå förkastar det mesta av färgdetaljerna. För mänskligt betraktande visar sig de saknade bitarna som svag bandning i mjuka färgövergångar men inte som något som ögat omedelbart noterar.
4.13.4. YUV422¶
YUV422 delar upp varje pixels färg i ett luminansvärde (Y) och två krominansvärden (U och V), och underskannar sedan krominansen eftersom mänsklig syn är mycket mindre känslig för färgvariation än för ljusstyrkevariation. Varje pixel bär sitt eget Y, men intilliggande pixelpar delar ett U och ett V. Bytelayouten för varje par är fyra byte – Y0, U, Y1, V – vilket i genomsnitt blir två byte per pixel, identiskt med RGB565.
De två byten betyder dock olika saker än RGB565:s. Y-kanalen ensam är en färdig 8-bitars gråskalebild, vilket är vad de flesta klassiska algoritmer för maskinseende (kantdetektering, mallmatchning, blobanalys) faktiskt förbrukar; U- och V-kanalerna bär färginformationen för det lilla antal algoritmer som behöver den.
YUV422 är rätt val när pipelinen behöver båda – en algoritm i ett tidigt skede som bara läser Y följt av ett senare skede som använder kroman för finare färgbeslut – eftersom Y-värdena sitter redo att användas direkt utan en färgrymdskonvertering.
4.13.5. Gråskala¶
Gråskala är en byte per pixel: endast luminansvärdet, ingen färg alls. Det är det minsta färdiga formatet – hälften av storleken på RGB565 och YUV422, en tredjedel av storleken på RGB888.
De flesta klassiska algoritmer för maskinseende arbetar ändå på gråskala, så att släppa färgkanalen direkt ut ur sensorn är ofta det enklaste och mest minneseffektiva valet. Kantdetektering, linjesökning, blobanalys, QR-kodsavkodning, mallmatchning och AprilTag-detektering körs alla på gråskala och drar nytta av den mindre bufferten.
4.13.6. Andra format¶
Några format som OpenMV Cam kan producera kommer inte ut ur ISP-pipelinen som en del av det normala flödet.
BINARY är en bit per pixel – den minsta möjliga representationen. Används för tröskelvärdesbaserade bilder, maskbuffertar och utdata från varje operation som bara skiljer mellan matchning och icke-matchning vid varje pixel.
JPEG är ett komprimerat färgformat. Vissa sensorer har en JPEG-kodare på chippet och kan leverera JPEG-komprimerade bildrutor direkt; för sensorer utan en sådan kör MCU:n en JPEG-kodare över en färdig RGB- eller gråskalebildruta efter ISP:n. Hur som helst är utdata en JPEG-bitström, användbar för att spara bildrutor till lagring eller skicka dem över en bandbreddsbegränsad länk.
PNG är ett förlustfritt komprimerat format. Sensorer producerar inte PNG direkt; MCU:n komprimerar en färdig RGB- eller gråskalebildruta på begäran. Användbart när bandbredd eller lagring är viktig men den förlustkomprimering som JPEG tillämpar skulle förkasta information som tillämpningen senare behöver.