4.13. Formati piksela

Završna faza ISP cjevovoda pakira svaki piksel u određeni raspored bajtova u memoriji. Odabrani format predstavlja kompromis između kvalitete slike, veličine memorije i načina na koji nizvodni kod ponovno očitava bajtove. Prevladava nekolicina formata.

4.13.1. RAW (Bayer)

Zadani izlaz je sirovi Bayer – isti mozaik s jednim kanalom po pikselu koji senzor proizvodi. Jedan bajt po pikselu, raspoređen u Bayerovom uzorku: crvena i zelena izmjenjuju se u parnim redovima, zelena i plava u neparnim redovima. Nije primijenjen nikakav debayering, pa svaka ćelija i dalje sadrži samo vrijednost koju je njezin filtar boje propustio.

Sirovi Bayer zauzima trećinu memorije gotove trokanalne RGB slike – jedan bajt po pikselu naspram tri – i na njega nije potrošen nijedan ISP ciklus za debayering ili pretvorbu. Cijena je ta da korisnički kod mora sam obaviti debayering prije nego što se može pokrenuti bilo kakva obrada svjesna boja.

4.13.2. RGB888

RGB888 je prirodni gotovi format za sliku u boji: tri bajta po pikselu, po jedan za crveni, zeleni i plavi kanal pri 8 bita po kanalu. Dvadeset i četiri bita po pikselu i nešto manje od sedamnaest milijuna različitih boja.

RGB888 je konceptualna referenca za gotove slike u boji i većina softvera izvan ploče govori njime. Na ugradbenom hardveru njegov je glavni nedostatak veličina piksela od 24 bita – nije višekratnik veličine riječi procesora, nezgodna je za poravnanje memorije i 50% je veća od sljedećeg manjeg formata.

4.13.3. RGB565

RGB565 pakira svaki piksel u dva bajta: pet bita crvene, šest bita zelene, pet bita plave. Dodatni bit zelene odražava veću osjetljivost oka na zelenu i podudara se s dvostrukom težinom zelenog kanala u Bayerovom uzorku.

RGB565 je zadani format boja na OpenMV Cam. Dva bajta po pikselu poravnata su na 16 bita, što odgovara prirodnim širinama podataka MCU-a – učitavanja, pohrane i aritmetika piksela sve rade punom brzinom, a mnoge operacije mogu obraditi par piksela odjednom. RGB888-ovi 24-bitni pikseli ne poravnavaju se na taj način i plaćaju cijenu pri svakom pristupu. Ušteda memorije od 33 posto u odnosu na RGB888 također se nakuplja: QVGA (320 x 240) zauzima 150 KB u RGB565 naspram 225 KB u RGB888, a razlika raste s razlučivošću.

Kompromis je 65 tisuća različitih boja umjesto sedamnaest milijuna. Za većinu zadataka strojnog vida razlika je nevidljiva, jer algoritmi svode sličicu na reprezentacije s pragom ili otkrivenim rubovima koje ionako odbacuju većinu detalja boje. Za ljudsko gledanje nedostajući bitovi pojavljuju se kao slabo trakanje u glatkim gradijentima boja, ali ne kao nešto što oko odmah primijeti.

4.13.4. YUV422

YUV422 dijeli boju svakog piksela na vrijednost luminancije (Y) i dvije vrijednosti krominancije (U i V), a zatim poduzorkuje krominanciju jer je ljudski vid mnogo manje osjetljiv na varijaciju boje nego na varijaciju svjetline. Svaki piksel nosi vlastiti Y, ali susjedni parovi piksela dijele jedan U i jedan V. Raspored bajtova za svaki par je četiri bajta – Y0, U, Y1, V – što u prosjeku iznosi dva bajta po pikselu, identično RGB565.

Ta dva bajta ipak znače nešto drugo nego kod RGB565. Sam Y kanal je slika u sivim tonovima od 8 bita spremna za upotrebu, a to je ono što većina klasičnih algoritama strojnog vida (otkrivanje rubova, podudaranje predložaka, analiza mrlja) zapravo koristi; U i V kanali nose informaciju o boji za mali broj algoritama kojima je potrebna.

YUV422 je ispravan izbor kada cjevovodu trebaju oba – algoritam u ranoj fazi koji čita samo Y, a zatim kasnija faza koja koristi kromu za finije odluke o boji – jer Y vrijednosti tu već stoje spremne za upotrebu bez pretvorbe prostora boja.

4.13.5. Sivi tonovi

Sivi tonovi su jedan bajt po pikselu: samo vrijednost luminancije, bez ikakve boje. To je najmanji gotovi format – upola manji od RGB565 i YUV422, trećina veličine RGB888.

Većina klasičnih algoritama strojnog vida ionako radi na sivim tonovima, pa je izravno odbacivanje kanala boje iz senzora često najjednostavniji i memorijski najučinkovitiji izbor. Otkrivanje rubova, pronalaženje linija, analiza mrlja, dekodiranje QR koda, podudaranje predložaka i detekcija AprilTag-a svi rade na sivim tonovima i imaju korist od manjeg međuspremnika.

4.13.6. Drugi formati

Nekoliko formata koje OpenMV Cam može proizvesti ne izlazi iz ISP cjevovoda kao dio uobičajenog toka.

BINARY je jedan bit po pikselu – najmanja moguća reprezentacija. Koristi se za slike s pragom, međuspremnike maski i izlaz bilo koje operacije koja razlikuje samo podudaranje od nepodudaranja na svakom pikselu.

JPEG je komprimirani format boja. Neki senzori uključuju JPEG koder na čipu i mogu izravno isporučiti sličice komprimirane u JPEG; za senzore bez njega, MCU pokreće JPEG koder nad gotovom RGB slikom ili slikom u sivim tonovima nakon ISP-a. U svakom slučaju izlaz je JPEG bitstream, koristan za spremanje sličica u pohranu ili njihovo slanje preko veze ograničene propusnosti.

PNG je format komprimiran bez gubitaka. Senzori ne proizvode PNG izravno; MCU komprimira gotovu RGB sliku ili sliku u sivim tonovima na zahtjev. Koristan kada su propusnost ili pohrana važni, ali bi kompresija s gubicima koju JPEG primjenjuje odbacila informacije koje su aplikaciji kasnije potrebne.