Színes cella tömörítés - Color Cell Compression

A Color Cell Compression egy veszteséges képtömörítési algoritmus, amelyet Campbell és munkatársai fejlesztettek ki 1986-ban, és amely a modern textúratömörítési algoritmusok, például az S3 textúra tömörítés és az adaptív méretezhető textúra tömörítés korai elődjének tekinthető . Ez szorosan kapcsolódik blokk csonkolás Coding másik veszteséges kép tömörítési algoritmus, amely megelőzi Color Cell Compression, hogy az általa használt domináns fényerősség egy blokk pixel partíció mondta pixel két képviselője színben. Az elsődleges különbség a blokkcsonkolás kódolása és a színes cellatömörítés között az, hogy az előbbit szürkeárnyalatos képek, az utóbbit pedig színes képek tömörítésére tervezték. A blokkcsonkolás kódolása megköveteli továbbá, hogy a kép tömörítéséhez kiszámítsák a blokkban lévő pixelek színének szórását , míg a Színes cellatömörítés nem használja a szórást. Mindkét algoritmus képes tömöríteni a képet, hogy pixelenként 2 bit legyen.

Közeli kép a mandrill, különféle színekkel ábrázolva
Eredeti tömörítetlen 24 bites képpont kép színes kép
A fenti Mandrill standard tesztkép tömörített képe
CCC tömörített kép, de csak 24-bites és 15-bites színkvantálást használ, kombinálva egy fényerő-bittérképpel, 2,875 bit / pixel (paletta / keresőtábla nélkül)
Lásd a feliratot
256 belépési paletta / keresőtábla megvalósítása a CCC algoritmusnak 2 bit / pixel sebességgel, a paletta K-jelentésű fürtözéssel felépítve
Lásd a feliratot
A CCC algoritmussal tömörített Mandrill standard tesztkép kimenetének eredménye 2 bit / képpont pixelenként, naiv, 15 bites színes hisztogram algoritmussal előállított 256 belépési palettával / keresőtáblával

Algoritmus

Tömörítés

A Color Cell Compression algoritmus egy képet nyolc lépésben dolgoz fel, bár az egyik lépés (6. lépés) opcionális. Itt feltételezzük, hogy a bemenet 24 bites / képpont méretű kép, amint azt az eredeti folyóirat-cikk feltételezi, bár más bitmélységeket is lehetne használni.

  1. A bemeneti kép minden 24 bites színértékében található minden 8 bites RGB-oktett hármas esetében az NTSC fényerő a következő képlet segítségével kerül kiszámításra:
  2. A kép 4 pixelre 4 pixeles blokkokra van felosztva, és a blokkban lévő egyes pixelek fényességének számtani átlagát használjuk a reprezentatív fényerő értékének kiválasztására.
  3. Ezután a pixelek minden blokkja két csoportra oszlik. Az egyik csoport az aktuális blokk pixeleiből áll, ahol minden egyes pixel fényereje nagyobb vagy egyenlő az aktuális blokk reprezentatív fényerejével. A második pixelcsoport az aktuális blokk pixeljeiből áll, ahol minden egyes pixel fényereje kisebb, mint az aktuális blokk reprezentatív fényereje. Azt, hogy az aktuális blokk pixelje egy adott csoporthoz tartozik-e, egy másik, különálló, 16 bejegyzésű bitkép bináris "0" vagy "1" értéke határozza meg .
  4. Két reprezentatív, 24 bites színt választunk mostantól az egyes pixelblokkokhoz két számtani átlag kiszámításával. Az első számtani átlag az első pixelcsoportba tartozó összes képpont számtani közepe, ahol az egyes pixelek fényereje "1" a fényességi bittérképben. A második 24 bites reprezentatív színt hasonlóan választjuk meg, a második csoport összes 24 bites színes pixelének számtani átlagának a felvételével, ahol minden pixel "0" -nak felel meg a fényerő bitképben.
  5. A fényerősség bitképet ideiglenesen tároljuk, majd az aktuális blokk két 24 bites reprezentatív színét hozzáadjuk a bitképhez. Ebben a szakaszban a kép 16 bejegyzéses bitképpé lett tömörítve, két 24 bites bináris érték mellékelve. A tömörített blokk teljes mérete most 16 bit a fénysűrűség bittérképnél, és két 24 bites bináris mennyiség minden egyes reprezentatív színhez, így 64 bit teljes méretet kapunk, ami ha elosztjuk 16-tal (a blokkban lévő pixelek száma) ) 4 pixelenként 4 bitet eredményez.
  6. Mindegyik tömörített blokk pixel módosítjuk csonkolásával a két 24-bites képviselője színek 15 bit. Ez a lépés választható, és az algoritmus ezen a ponton befejezhetõ, ha kívánatos, mivel az ebben a szakaszban a tömörített blokkok teljes bitmérettel rendelkeznek, amelyet 16-mal elosztva 2,875 bit / pixel. Ha ezt a lépést végrehajtják, akkor a 15 bites csonka színértékek felhasználhatók a következő lépésben egy kisebb hisztogram létrehozásához. Továbbá, mivel minden 15 bites bináris színvektor feltehetően 16 bites szóban van tárolva, akkor a 16. bit felhasználható a képminőség javítására azáltal, hogy meghatározza a két keresőtábla egyikét.
  7. Létrejön az eredeti 24 bites színes kép összes 24 bites színének hisztogramja vagy a csonka 15 bites színvektorok. Naiv megvalósítás során a hisztogramot választják ki a leggyakrabban használt színek közül 256 közül, amelyeket ezután egy 256 bejegyzésű tömbbe helyeznek, ahol minden bejegyzés három oktettből áll, 24 bites / képpont színérték. Az eredeti 24 bites képpontonkénti színes kép kiválasztásához a legmegfelelőbb színek hisztogramos módszerét ehelyett egy vektor-kvantálási osztály algoritmussal lehet helyettesíteni, például a medián vágás algoritmussal vagy a K-jelentésű klaszterezéssel, amely általában jobb eredményeket hoz.
  8. Az utolsó lépés abból áll, hogy megkapja az aktuális pixelblokkot, és meghatározza, hogy a 256 bejegyzésű keresőtáblában melyik pixelenként 24 bites szín felel meg a legjobban az egyes blokkok két reprezentatív színéhez. A keresési táblázatban a két színre mutató 8 bites index mostantól a 16 bites fényerősségű bitképhez lett csatolva. Ez egy teljes tömörített bitméretet eredményez, amelyet 16-mal elosztva 2 bit jut pixelenként.

Dekompresszió

A dekompresszió nagyon egyszerű és egyértelmű. Az egyes tömörített 4 pixelek 4 pixeles blokkokkal történő rekonstruálásához a 16 bites fényerősségű bitképeket kell megnézni az egyes blokkokhoz. Attól függően, hogy a bitkép egyik eleme 1 vagy 0, a keresőtábla két 8 bites indexének egyikét kiválasztja, majd kivonja, és lekéri a megfelelő 24 bites pixel színértéket.


Teljesítmény és képminőség

A nagyon egyszerű mechanizmus ellenére az algoritmus meglepően jó eredményeket hoz a fényképészeti képeken, és megvan az az előnye, hogy korlátozott hardver mellett nagyon gyorsan dekódolható. Noha a tömörítési arányban a későbbi blokktranszformációs kódolási módszerek, például a JPEG , messze felülmúlják, nagyon egyszerű dekompresszióval és gyors, véletlenszerű hozzáféréssel rendelkezik a tömörített képhez.

Lásd még

Hivatkozások