4.13. Képpontformátumok¶
Az ISP folyamat utolsó fokozata minden képpontot egy adott bájtelrendezésbe csomagol a memóriában. A választott formátum kompromisszumot köt a képminőség, a memóriaméret és aközött, ahogyan a lefelé irányuló kód visszaolvassa a bájtokat. Néhány formátum dominál.
4.13.1. RAW (Bayer)¶
Az alapértelmezett kimenet a nyers Bayer – ugyanaz a képpontonként egy csatornás mozaik, amelyet az érzékelő előállít. Egy bájt képpontonként, a Bayer-mintában elrendezve: vörös és zöld váltakozik a páros sorokban, zöld és kék váltakozik a páratlan sorokban. Nem történt debayerezés, így minden cella még mindig csak azt az értéket tartja, amelyet a színszűrője átengedett.
A nyers Bayer egyharmada egy kész háromcsatornás RGB kép memóriájának – egy bájt képpontonként három helyett – és nem fordítottak ISP-ciklusokat a debayerezésére vagy átalakítására. Ennek ára, hogy a felhasználói kódnak magának kell elvégeznie a debayerezést, mielőtt bármilyen színérzékeny feldolgozás futhatna.
4.13.2. RGB888¶
Az RGB888 a természetes kész formátum egy színes képhez: három bájt képpontonként, egy-egy a vörös, zöld és kék csatornának, csatornánként 8 bittel. Huszonnégy bit képpontonként, és épphogy tizenhétmillió alatti különböző szín.
Az RGB888 a kész színes képek fogalmi referenciája, és a legtöbb külső szoftver ezt beszéli. Beágyazott hardveren a fő hátránya a 24 bites képpontméret – nem többszöröse a processzor szóhosszának, kényelmetlen a memóriaigazítás szempontjából, és 50%-kal nagyobb a következő, kisebb formátumnál.
4.13.3. RGB565¶
Az RGB565 minden képpontot két bájtba csomagol: öt bit vörös, hat bit zöld, öt bit kék. A többletzöld bit a szem zöldre való nagyobb érzékenységét tükrözi, és illeszkedik a zöld csatorna dupla súlyához a Bayer-mintában.
Az RGB565 az alapértelmezett színformátum az OpenMV Camen. A két bájt képpontonként 16 bitre igazított, ami illeszkedik az MCU természetes adatszélességeihez – a képpontbetöltések, -tárolások és aritmetikai műveletek mind teljes sebességgel futnak, és sok művelet egyszerre egy képpontpárt is fel tud dolgozni. Az RGB888 24 bites képpontjai nem igazodnak így, és minden hozzáférésnél megfizetik az árát. Az RGB888-hoz képesti 33 százalékos memóriamegtakarítás is összeadódik: a QVGA (320 x 240) 150 KB RGB565-ben, szemben a 225 KB-tal RGB888-ban, és a különbség a felbontással nő.
A kompromisszum 65 ezer különböző szín a tizenhétmillió helyett. A legtöbb gépi látási feladatnál a különbség láthatatlan, mert az algoritmusok a képkockát küszöbölt vagy éldetektált reprezentációkra redukálják, amelyek úgyis elejtik a színrészletek nagy részét. Emberi nézet számára a hiányzó bitek halvány sávozásként jelennek meg a sima színátmenetekben, de nem olyasmiként, amit a szem azonnal észlel.
4.13.4. YUV422¶
Az YUV422 minden képpont színét egy luminancia értékre (Y) és két krominancia értékre (U és V) bontja, majd alulmintavételezi a krominanciát, mert az emberi látás sokkal kevésbé érzékeny a színváltozásra, mint a fényességváltozásra. Minden képpont a saját Y értékét hordozza, de a szomszédos képpontpárok osztoznak egy U-n és egy V-n. Az egyes párokra a bájtelrendezés négy bájt – Y0, U, Y1, V – ami átlagosan két bájt képpontonként, az RGB565-tel megegyezően.
A két bájt azonban mást jelent, mint az RGB565-é. Az Y csatorna önmagában egy használatra kész 8 bites szürkeárnyalatos kép, ami az, amit a legtöbb klasszikus gépi látási algoritmus (éldetektálás, sablonillesztés, foltelemzés) ténylegesen felhasznál; az U és V csatornák a színinformációt hordozzák azon kevés algoritmus számára, amelynek szüksége van rá.
Az YUV422 a helyes választás, amikor a folyamatnak mindkettőre szüksége van – egy korai fokozatú algoritmusra, amely csak az Y-t olvassa, majd egy későbbi fokozatra, amely a krominanciát használja finomabb szín-döntésekhez – mert az Y értékek éppen ott vannak, használatra készen, színtér-átalakítás nélkül.
4.13.5. Szürkeárnyalatos¶
A szürkeárnyalatos egy bájt képpontonként: csak a luminancia érték, szín egyáltalán nincs. Ez a legkisebb kész formátum – fele az RGB565 és az YUV422 méretének, egyharmada az RGB888-énak.
A legtöbb klasszikus gépi látási algoritmus úgyis szürkeárnyalatoson dolgozik, így a színcsatorna közvetlen elejtése az érzékelőből gyakran a legegyszerűbb és legmemóriahatékonyabb választás. Az éldetektálás, a vonalkeresés, a foltelemzés, a QR-kód-dekódolás, a sablonillesztés és az AprilTag-észlelés mind szürkeárnyalatoson fut, és profitál a kisebb pufferből.
4.13.6. Egyéb formátumok¶
Néhány formátum, amelyet az OpenMV Cam elő tud állítani, nem a normál folyamat részeként jön ki az ISP folyamatból.
A BINARY egy bit képpontonként – a lehető legkisebb reprezentáció. Küszöbölt képekhez, maszk-pufferekhez és bármely olyan művelet kimenetéhez használatos, amely minden képpontnál csak egyezés és nem-egyezés között tesz különbséget.
A JPEG egy tömörített színformátum. Egyes érzékelők tartalmaznak chipre épített JPEG-kódolót, és közvetlenül tudnak JPEG-tömörített képkockákat szállítani; az ilyennel nem rendelkező érzékelőkhöz az MCU futtat egy JPEG-kódolót egy kész RGB vagy szürkeárnyalatos képkockán az ISP után. Bármelyik esetben a kimenet egy JPEG bitfolyam, ami hasznos a képkockák tárolóra mentéséhez vagy egy sávszélesség-korlátozott kapcsolaton való elküldéséhez.
A PNG egy veszteségmentes tömörített formátum. Az érzékelők nem állítanak elő közvetlenül PNG-t; az MCU igény szerint tömörít egy kész RGB vagy szürkeárnyalatos képkockát. Akkor hasznos, amikor a sávszélesség vagy a tárolás számít, de a JPEG által alkalmazott veszteséges tömörítés olyan információt dobna el, amelyre az alkalmazásnak később szüksége lesz.