RLE algoritem: opis, značilnosti, pravila in primeri

RLE algoritem je algoritem za stiskanje podatkov, ki ga podpira večina formatov rastrskih slikovnih datotek: TIFF, BMP in PCX. RLE je primeren za stiskanje vseh vrst podatkov, ne glede na njihovo vsebino, vendar vsebina podatkov vpliva na razmerje stiskanja. Kljub dejstvu, da večina RLE algoritmov ne more zagotoviti visoke stopnje kompresije za bolj zapletene metode, je to orodje enostavno implementirati in izvajati hitro, zaradi česar je dobra alternativa.

Na kakšen način temelji algoritem stiskanja RLE?

RLE deluje tako, da zmanjša fizično velikost ponavljajočega se niza znakov. Ta vrstica, imenovana run, je običajno kodirana v dveh bajtih. Prvi bajt predstavlja število znakov v teku in se imenuje števec poteka. V praksi lahko kodiranje poteka od 1 do 128 in 256 znakov. Števec običajno vsebuje število znakov minus ena (vrednosti v območju vrednosti od 0 do 127 in 255). Drugi bajt je vrednost simbola v teku, ki je vsebovana v območju vrednosti od 0 do 255 in se imenuje začetna vrednost.



Brez stiskanja je 15-znakovni bitni zagon običajno potreben 15 bajtov za shranjevanje: AAAAAAAAAAAAAAA. V isti vrstici po RLE-kodiranju potrebujete le dva bajta: 15A. Generirano kodiranje 15A, ki označuje niz znakov, se imenuje paket RLE. V tej kodi je prvi bajt 15 tekaški števec in vsebuje zahtevano število ponovitev. Drugi bajt, A, je vrednost delovanja in vsebuje dejansko ponavljajočo se vrednost v teku.
Novi paket se ustvari vsakič, ko se simbol začetka spremeni ali vsakič, ko število znakov v teku preseže največje število. Predpostavimo, da niz 15 znakov v skladu s pogoji vsebuje 4 različne znake:


AAAAAAbbbXXXXXt Uporaba kodiranih nizov dolžine se lahko stisne v štiri binarne svežnje: potrebujete le osem bajtov podatkov za predstavitev niza, v nasprotju z izhodom 15 bajtov. V tem primeru je kodiranje med vožnjo dalo razmerje stiskanja skoraj 2 proti 1.

Funkcije

Dolge proge so redke pri nekaterih vrstah podatkov. Odprto besedilo ASCII na primer redko vsebuje dolge proge. V prejšnjem primeru je bila zadnja kilometrina (ki vsebuje simbol t) dolga samo en znak. Delovanje z enim znakom še vedno deluje. Tako zagonski račun kot zagonske vrednosti je treba zabeležiti za vsak cikel dveh znakov. Kodiranje RLE zahteva informacije, ki so sestavljene iz vsaj dveh znakov. V povezavi s tem, zagon posameznih znakov dejansko zavzema več prostora. Iz istih razlogov podatki, ki so v celoti sestavljeni iz 2 znakov, ostanejo nespremenjeni po kodiranju RLE.
RLE algoritmi stiskanja so enostavni in visoko zmogljivi, vendar je njihova zmogljivost odvisna od vrste podatkov, kodiranih s sliko. Črno-bela slika, ki je večinoma bela, kot so strani knjige, bo zaradi velikega številasosednjih podatkov iste barve. Vendar pa slike s številnimi barvami, kot je fotografija, tudi ne bodo kodirane. To je posledica dejstva, da je zapletenost slike izražena v obliki velikega števila različnih barv. In zaradi te zapletenosti bo razmeroma malo tekov iste barve.

Možnosti kodiranja dolžine

Med izvajanjem obstaja več možnosti za kodiranje. Te slike so običajno kodirane v zaporednem procesu, ki obravnava vizualno vsebino kot 1D tok, ne kot 2D podatkovno kartico. Pri zaporedni obdelavi se rastrska slika kodira, začenši od zgornjega levega vogala, in se premakne od leve proti desni na vsaki vrstici optičnega branja v spodnjem desnem kotu rastrske slike. Toda alternativne RLE-je lahko zapišemo tudi za kodiranje bitnih podatkov vzdolž stolpcev za stiskanje v 2D-ploščah ali celo za kodiranje slikovnih pik diagonalno na način, ki je podoben cik-cak. Odd variant RLEs se lahko uporabljajo v visoko specializiranih aplikacijah, vendar se ponavadi pojavljajo zelo redko.

Kodirni algoritem z napako pri prevoženih kilometrih

Druga redka možnost je algoritem za kodiranje RLE z napako med izvajanjem. Ta orodja običajno izvajajo kompresijo brez izgube, vendar zavračanje podatkov med procesom kodiranja, ponavadi s ponastavitvijo enega ali dveh manjših pomembnih bitov v vsaki slikovni pik, lahko poveča razmerje stiskanja brez negativnega vpliva na kakovost kompleksnih slik. Ta program algoritma RLE je doberdeluje samo s sliko resničnega sveta, ki vsebuje veliko finih variacij vrednosti pikslov.

Navzkrižno kodiranje

Navzkrižno kodiranje je kombinacija vrstic za skeniranje, ki se zgodi, ko postopek stiskanja izgubi razliko med izhodnimi linijami. Če se podatki posameznih vrstic kombinirajo z algoritmom za ponavljanje kodiranja RLE, je točka, kjer se ena linija skeniranja ustavi, druga pa izgubljena, ranljiva in težko določljiva.

Včasih obstaja navzkrižno kodiranje, ki otežuje postopek dekodiranja z dodajanjem stroškov na čas. Za formate rastrskih slikovnih datotek je ta metoda namenjena organiziranju rastrskih slik vzdolž vrstic skeniranja. Čeprav številne specifikacije oblike datoteke jasno kažejo, da morajo biti podatkovne vrstice posamično kodirane, številne aplikacije kodirajo te slike kot zvezne tokove, ne da bi upoštevali meje vrstic.

Kako kodirati sliko z uporabo algoritma RLE?

Individualno kodiranje linij skeniranja ima prednosti v primerih, ko mora aplikacija uporabljati le del slike. Predpostavimo, da fotografija vsebuje 512 razponskih črt in da je treba prikazati samo vrstice od 100 do 110. Če ne bi vedeli, kje so se začele in končale skenirane linije s podatki iz kodirane slike, bi morala naša aplikacija dekodirati črte 1 do 100, preden najde deset vrstic ki so potrebni. Če so bili prehodi med skeniranimi črtami označeni z nekaterim lahko prepoznavnim markerjem za razmejitev, bi lahko aplikacija preprosto prebrala kodirane podatke, pri čemer je upoštevala oznake,dokler ne doseže črte, ki jih potrebuje. Vendar bi bil ta pristop precej neučinkovit.

Alternativa

Drug način za določitev začetne točke katere koli posamezne vrstice za skeniranje v bloku kodiranih podatkov je zgraditi mizo za vrtenje. Ta tabelarna struktura običajno vsebuje en element vsake vrstice optičnega branja na sliki in vsak element vsebuje vrednost odmika ustrezne vrstice optičnega branja. Da bi našli prvi RLE-paket skenirne linije 10, vse, kar morate storiti z dekoderjem, je, da najdete vrednost položaja premika, shranjenega v deseti točki tabele iskanja v vrstici za optično branje. V razpredelnici lahko najdete tudi število bajtov, ki se uporabljajo za kodiranje vsake vrstice. S to metodo poiščete prvi RLE-paket skenirne linije 10, bo vaš dekodirnik združil vrednosti prvih 9 elementov preglednice. Prvi paket za skenirno linijo 10 se bo začel s tem odmaknjenim bajtom od začetka slikovnih podatkov z RLE kodiranjem.

Enote merjenja

Deli algoritmov za kodiranje dolžin, ki so različni, so odločitve, ki temeljijo na vrsti podatkov, ki so dekodirani (na primer dolžina podatkovnega poteka). Diagrami RLE, ki se uporabljajo za stiskanje rastrske grafike, so običajno razdeljeni v razrede po atomskem tipu (tj. Najbolj temeljni elementi, ki jih kodirajo. Trije razredi, ki jih uporablja večina grafičnih formatov datotek, so bitovi, bajti in piksel RLE.
Bitne hitrosti RLE-shem kodirajo tečeveč bitov v vrstici za optično branje in prezre mejo bajtov in besed. Samo enobarvno (črno-belo), 1-bitne slike vsebujejo dovolj bitov, da je ta razred RLE-kodiranje učinkovit. Tipična bitna slika RLE kodira en do 128 bitov v enobajtnem paketu. Sedem mlajših bistvenih bitov vsebuje števec teka minus ena, starejši bit pa vsebuje vrednost zagona bitov, ki je enaka 0 ali 1. Delovanje več kot 128 pik je razdeljeno na več RLE-kodiranih paketov.

Izključitev

Tokokrogi RLE na bajtni ravni kodirajo tečaje istih bajtnih vrednosti, pri čemer ne upoštevajo nekaterih bitov in meja besed v vrstici za optično branje. Najpogostejša shema RLE na ravni bajtov kodira potek bajtov v 2-bajtnih paketih. Prvi bajt vsebuje števec od 0 do 255, drugi pa vsebuje vrednost začetka bajta. Tudi porazdeljene sheme kodiranja aplikacij dbcs z zmožnostjo shranjevanja dobesednih, nezapisanih bajtov potekajo v toku kodiranih podatkov. V tej shemi sedem mlajših pomembnih bitov prvega bajta vsebuje števec teka minus ena, in najstarejši bit prvega bajta je indikator tipa zagona, ki sledi bajtu za čas izvajanja. Če je starejši bit nastavljen na 1, označuje kodiran potek. Kodirana teka se dešifrirajo tako, da se odćita vrednost poteka in ponovi śtevilo ćasov, kar każe śtevilo ciklov. Če je najstarejši bit nastavljen na 0, se prikaže dobesedni potek, kar pomeni, da se bajti naslednjega teka štejejo dobesedno iz podatkov kodirane slike. Potem bajt števcaIzvedba vsebuje vrednosti od 0 do 127 (teči števec minus ena). RLE na ravni bajtov so dobri za slikovne podatke, shranjene kot en bajt na slikovno piko. Sheme Pixel RLE se uporabljajo, kadar se za shranjevanje vrednosti ene slikovne pike uporabijo dva ali več zaporednih bajtov podatkov. Na ravni pikslov se biti ignorirajo, bajti pa se štejejo samo za identifikacijo vsake vrednosti pikslov. Velikost kodiranih paketov je odvisna od velikosti kodiranih vrednosti pikslov. Število bitov ali bajtov na slikovno piko je shranjeno v glavi slikovne datoteke. Zagon slikovnih podatkov, shranjenih kot 3-bajtne vrednosti pikslov, kodiranih s 4-bajtnim paketom, z enim bajtom, ki šteje število operacij, ki mu sledijo trije bajti. Metoda kodiranja ostaja enaka kot pri bajtu RLE.

Sorodne publikacije