4.13. Pikseliformaatit

ISP-liukuhihnan viimeinen vaihe pakkaa jokaisen pikselin tiettyyn tavuasetteluun muistissa. Valittu formaatti tasapainottaa kuvanlaatua, muistikokoa ja sitä, miten jatkokäsittelykoodi lukee tavut takaisin. Kourallinen formaatteja hallitsee.

4.13.1. RAW (Bayer)

Oletustuloste on raaka Bayer – sama yksi kanava per pikseli -mosaiikki, jonka sensori tuottaa. Yksi tavu per pikseli, aseteltuna Bayer-kuvioon: punainen ja vihreä vuorotellen parillisilla riveillä, vihreä ja sininen vuorotellen parittomilla riveillä. Debayerointia ei ole sovellettu, joten jokainen solu sisältää edelleen vain sen arvon, jonka sen värisuodatin päästi läpi.

Raaka Bayer on kolmasosa valmiin kolmikanavaisen RGB-kuvan muistista – yksi tavu per pikseli kolmen sijaan – eikä ISP-syklejä ole käytetty sen debayerointiin tai muuntamiseen. Hintana on, että käyttäjän koodin on tehtävä debayerointi itse ennen kuin mikään väritietoinen käsittely voi suorittua.

4.13.2. RGB888

RGB888 on luonnollinen valmis formaatti värikuvalle: kolme tavua per pikseli, yksi kullekin punaiselle, vihreälle ja siniselle kanavalle 8 bitin tarkkuudella per kanava. Kaksikymmentäneljä bittiä per pikseli ja hieman alle seitsemäntoista miljoonaa erillistä väriä.

RGB888 on käsitteellinen vertailukohta valmiille värikuville, ja useimmat laitteen ulkopuoliset ohjelmistot puhuvat sitä. Sulautetussa laitteistossa sen pääasiallinen haittapuoli on 24-bittinen pikselikoko – ei suorittimen sanakoon monikerta, hankala muistin kohdistuksen kannalta ja 50 % suurempi kuin seuraava formaatti.

4.13.3. RGB565

RGB565 pakkaa jokaisen pikselin kahteen tavuun: viisi bittiä punaista, kuusi bittiä vihreää, viisi bittiä sinistä. Ylimääräinen vihreä bitti heijastaa silmän korkeampaa herkkyyttä vihreälle, ja se vastaa vihreän kanavan kaksinkertaista painoa Bayer-kuviossa.

RGB565 on oletusväriformaatti OpenMV Cam -laitteessa. Kaksi tavua per pikseli on 16-bittisesti kohdistettu, mikä sopii MCU:n luontaisiin datakokoihin – pikselien lataukset, tallennukset ja aritmetiikka toimivat kaikki täydellä nopeudella, ja monet operaatiot voivat käsitellä parin pikseleitä kerralla. RGB888:n 24-bittiset pikselit eivät kohdistu siten ja maksavat hinnan jokaisella käytöllä. Myös 33 prosentin muistinsäästö RGB888:aan verrattuna kertyy: QVGA (320 x 240) on 150 KB RGB565-muodossa ja 225 KB RGB888-muodossa, ja ero kasvaa resoluution myötä.

Kompromissina on 65 tuhatta erillistä väriä seitsemäntoista miljoonan sijaan. Useimmissa konenäkötehtävissä ero on näkymätön, koska algoritmit pelkistävät kehyksen kynnystetyiksi tai reunatunnistetuiksi esityksiksi, jotka pudottavat suurimman osan väridetaljista joka tapauksessa. Ihmiskatselussa puuttuvat bitit näkyvät heikkona juovituksena pehmeissä väriliukumissa, mutta eivät minään, minkä silmä huomaa heti.

4.13.4. YUV422

YUV422 jakaa jokaisen pikselin värin luminanssi-arvoon (Y) ja kahteen krominanssi-arvoon (U ja V) ja sitten alinäytteistää krominanssin, koska ihmisnäkö on paljon vähemmän herkkä värinvaihtelulle kuin kirkkaudenvaihtelulle. Jokaisella pikselillä on oma Y, mutta vierekkäiset pikseliparit jakavat yhden U:n ja yhden V:n. Tavuasettelu kullekin parille on neljä tavua – Y0, U, Y1, V – mikä tarkoittaa keskimäärin kahta tavua per pikseli, identtinen RGB565:n kanssa.

Kaksi tavua tarkoittavat kuitenkin eri asioita kuin RGB565:ssä. Pelkkä Y-kanava on käyttövalmis 8-bittinen harmaasävykuva, joka on se, mitä useimmat klassiset konenäköalgoritmit (reunantunnistus, mallisovitus, blob-analyysi) todellisuudessa käyttävät; U- ja V-kanavat kantavat väritietoa sille pienelle määrälle algoritmeja, jotka sitä tarvitsevat.

YUV422 on oikea valinta, kun liukuhihna tarvitsee molempia – varhaisen vaiheen algoritmi, joka lukee vain Y:n, ja sitä seuraava myöhempi vaihe, joka käyttää krominanssia hienompiin väripäätöksiin – koska Y-arvot ovat siinä valmiina käytettäviksi ilman väriavaruusmuunnosta.

4.13.5. Harmaasävy

Harmaasävy on yksi tavu per pikseli: vain luminanssiarvo, ei väriä lainkaan. Se on pienin valmis formaatti – puolet RGB565:n ja YUV422:n koosta, kolmasosa RGB888:n koosta.

Useimmat klassiset konenäköalgoritmit toimivat harmaasävyllä joka tapauksessa, joten värikanavan pudottaminen suoraan sensorista on usein yksinkertaisin ja muistitehokkain valinta. Reunantunnistus, viivanetsintä, blob-analyysi, QR-koodin dekoodaus, mallisovitus ja AprilTag-tunnistus toimivat kaikki harmaasävyllä ja hyötyvät pienemmästä puskurista.

4.13.6. Muut formaatit

Muutamat formaatit, joita OpenMV Cam voi tuottaa, eivät tule ulos ISP-liukuhihnasta osana normaalia kulkua.

BINARY on yksi bitti per pikseli – pienin mahdollinen esitys. Käytetään kynnystettyihin kuviin, maskipuskureihin ja minkä tahansa operaation tulosteeseen, joka erottaa jokaisessa pikselissä vain täsmäyksen ja ei-täsmäyksen välillä.

JPEG on pakattu väriformaatti. Jotkin sensorit sisältävät sirulla olevan JPEG-enkooderin ja voivat toimittaa JPEG-pakattuja kehyksiä suoraan; sensoreille, joissa sitä ei ole, MCU ajaa JPEG-enkooderin valmiin RGB- tai harmaasävykehyksen yli ISP:n jälkeen. Kummassakin tapauksessa tuloste on JPEG-bittivirta, hyödyllinen kehysten tallentamiseen tai niiden lähettämiseen kaistanleveydeltään rajoitetun yhteyden yli.

PNG on häviötön pakattu formaatti. Sensorit eivät tuota PNG:tä suoraan; MCU pakkaa valmiin RGB- tai harmaasävykehyksen pyynnöstä. Hyödyllinen, kun kaistanleveydellä tai tallennustilalla on merkitystä mutta JPEG:n soveltama häviöllinen pakkaus hylkäisi tietoa, jota sovellus tarvitsee myöhemmin.