RLE algoritmus: popis, funkce, pravidla a příklady

Algoritmus RLE je algoritmus komprese dat podporovaný většinou formátů rastrových obrazových souborů: TIFF, BMP a PCX. Funkce RLE je vhodná pro kompresi libovolného typu dat bez ohledu na její obsah, ale obsah dat ovlivňuje kompresní poměr. Navzdory skutečnosti, že většina algoritmů RLE nemůže poskytovat vysokou míru komprese pro složitější metody, je tento nástroj snadno implementován a proveden rychle, což z něj dělá dobrou alternativu.

Co je založen na algoritmu komprese RLE?

Funkce RLE funguje zmenšením fyzické velikosti opakující se řetězce znaků. Tato řádek, nazvaný běh, je obvykle kódován ve dvou bajtech. První bajt představuje počet znaků v běhu a nazývá se počítadlo běhu. V praxi může kódovací běh obsahovat 1 až 128 a 256 znaků. Počítadlo obvykle obsahuje počet znaků minus jeden (hodnoty v rozsahu hodnot od 0 do 127 a 255). Druhý byte je hodnota symbolu v běhu, která je obsažena v rozsahu hodnot od 0 do 255 a nazývá se počáteční hodnotou.



Bez komprese vyžaduje 15-ti bitová bitová bit obvykle 15 bajtů pro uložení: AAAAAAAAAAAAAAA. Ve stejném řádku po kódování RLE potřebujete pouze dva bajty: 15A. Kódování 15A generované pro označení řetězce znaků se nazývá paket RLE. V tomto kódu je první bajt, 15 počítadlo běhu a obsahuje požadovaný počet opakování. Druhý byte, A, je hodnota běhu a obsahuje aktuální opakovanou hodnotu v běhu.
Nový balíček je generována při každém spuštění změny charakteru, nebo pokaždé, když charakter chodu překročí maximální počet. Předpokládejme, že se 15-znakový řetězec za podmínek, obsahující 4 různé symboly:


AAAAAAbbbXXXXXt pomocí kódování délky trati, to mohou být komprimovány do čtyř dvoubajtové paketu 6A3b5X1t Po délce kódující řádku 15 bajtů řetězec vyžaduje pouze osm bajtů dat reprezentovat linii, na rozdíl od prvních 15 bajtů. V tomto případě, kódující běhu zapnutý kompresní poměr téměř 2 ku 1.

Funkce

dlouhé tratě jsou vzácné u některých typů dat. Například otevřený text ASCII zřídka obsahuje dlouhé spouštění. V předchozím příkladu byl poslední kilometr (obsahující symbol t) dlouhý pouze jeden znak. Jeden znakový běh stále funguje. Oba úvodní a spouštěcí hodnoty musí být zaznamenány pro každý běh dvou znaků. Kódování RLE vyžaduje informace, které se skládají z alespoň dvou znaků. V souvislosti s tím spuštění jednotlivých znaků skutečně zabírá více prostoru. Ze stejných důvodů se data sestávající zcela z Dvoumístný běží po zakódování RLE beze změny.
kompresní algoritmus Schéma RLE jsou jednoduché a vysoký výkon rychlost, ale jejich účinnost závisí na typu kódovaných obrazových dat. Černobílý obraz, který je většinou bílý, jako jsou stránky knihy, bude velmi dobře kódován kvůli velkému počtusousední data mají stejnou barvu. Obrazy s mnoha barvami, například fotografie, nebudou také zakódovány. To je způsobeno tím, že složitost obrazu je vyjádřena ve formě velkého množství různých barev. A vzhledem k této složitosti bude relativně málo běhů stejné barvy.

Možnosti kódování délky

Během provádění je několik možností kódování. Tyto obrazy jsou obvykle kódovány v sekvenčním procesu, který zpracovává vizuální obsah jako 1D proud, nikoli jako 2D datová karta. Při sekvenčním zpracování je kódovaný rastrový obraz, začínající od levého horního rohu, a jde zleva doprava na každou řádku snímání v pravém dolním rohu rastrového obrázku. Ale alternativní RLE mohou být také napsány pro kódování bitmapových dat podél sloupců pro kompresi v 2D-dlaždicích nebo dokonce pro kódování pixelů diagonálně cikcakovitým způsobem. Zvláštní varianty RLE mohou být použity ve vysoce specializovaných aplikacích, ale obvykle se vyskytují poměrně zřídka.

Kódovací algoritmus s chybou v kilometru

Další vzácnou možností je algoritmus kódování RLE s chybou běhu. Tyto nástroje obvykle provádějí bezztrátovou kompresi, ale odmítnutí dat během procesu kódování, obvykle resetováním jednoho nebo dvou mladších významných bitů v každém pixelu, může zvýšit poměr komprese bez negativního ovlivnění kvality složitých obrazů. Tento program algoritmu RLE je dobrýpracuje pouze s obrazem v reálném světě, který obsahuje mnoho jemných variací hodnot pixelů.

Cross-kódující

Cross-Coding - sdružení řádků, ke kterému dochází, když je kompresní ztratí rozdíl mezi výstupními řádky. Pokud se data jednotlivých linek v kombinaci opakování kódovacího algoritmu RLE, bod, kde se zastaví skenování linie, a druhá - ztracené, je zranitelný a obtížné definovat.

Někdy Cross kódování ztěžuje dekódovat, přidáním hodnoty času. Pro formáty rastrových obrazových souborů se tato metoda zaměřuje na uspořádání rastrových obrázků po řádcích skenování. Ačkoli mnoho specifikace formátu souboru jasně ukazuje, že tyto linky by měly být individuálně kódován, mnoho aplikací kódují tyto obrazy jako nepřetržitý proud, ignorování čar ohraničujících.

Jak kódovat obrázek pomocí algoritmu RLE?

Jednotlivé kódování řádků skenování má výhody v případech, kdy by aplikace měla používat pouze část obrazu. Předpokládáme, že obraz obsahuje 512 rozkladové řádky a měl by zobrazit pouze řádky 100 až 110. Pokud nevíme, kde začala rozkladová řádka a skončil kódovaná obrazová data, naše aplikace bude dekódovat řádků 1 až 100, než najde deset řádků, které jsou potřebné. Pokud byly zaznamenány přechody mezi řádků obrazu v některých snadno rozeznatelné marker rozdílu, aplikace by potom číst zakódovaná data, počítání markeryaž do dosažení požadované čáry. Ale tento přístup by bylo dost neefektivní.

Alternativní

Další možností pro stanovení počátečního bodu jakéhokoliv zejména řádku obrazu kódovaného datového bloku je vytvořit tabulku rozkladové řádky. Tato struktura tabulky typicky zahrnuje jeden člen každý řádek snímání obrazu, a každý prvek obsahuje odstupů odpovídajících čtecí linku. Najít první RLE-10 balíček čtecí linky vše, co potřebujete, aby se dekodér - je nalezena hodnota polohy posunu, který je uložen v desátém řádku položky vyhledávací tabulka scan. prohledávání Tabulka linie může také obsahovat počet bytů použitých pro kódování každého řádku. Při použití této metody najít první RLE řádku balíček prohledá váš dekodér 10 bude kombinovat hodnotu prvních 9-line prvky prohledání tabulky. První balíček pro skenování řádek 10 začne tento posun bajtů od začátku obrazových dat zakódované RLE.

jednotky

Části kódovacích algoritmů, které se liší délkou - rozhodnutí provedeno na základě typu dat, která se dekóduje (např délky běhu data). Schémata RLE, který se používá ke kompresi bitmapové grafiky jsou obvykle rozděleny do tříd podle typu atomových (tj nejzákladnějších prvků, které kódují tři třídy jsou používány většinou formátů souborů. - je bitů, bytů a pixel RLE

Quality Compression.

režimu Bit RLE úrovni kódovat běhůněkolik bitů v řádku skenování a ignoruje ohraničení bajtů a slov. Jediné černobílé (černé a bílé), 1 bitové obrázky obsahují dostatečné množství bitů, aby tato třída RLE byla účinná. Typický rastrový RLE kóduje jeden až 128 bitů v jednom bajtu. Sedm mladších významných bitů obsahuje počítadlo běhu minus jeden a starší bit obsahuje bitovou hodnotu rovnající se 0 nebo 1. Běh více než 128 pixelů je rozdělen na několik RLE kódovaných paketů.

Vyloučení

Obvody na úrovni bytu RLE zakódují běhy stejných hodnot bajtů, ignorují některé bity a hranice slov v řádku pro skenování. Nejběžnější schéma RLE na úrovni bajtů kóduje běh bajtů ve dvoubajtových paktech. První byte obsahuje čítač od 0 do 255 a druhý obsahuje hodnotu začátku bajtu. Také distribuované schémata kódování aplikace dbcs se schopností ukládat doslovné, nezaznamenané byty běží v proudu kódovaných dat. V tomto schématu obsahuje sedm mladších významných bitů prvního bajtu čítač běhu minus jeden a nejstarší bit prvního bajtu je indikátorem typu spuštění, který následuje po bajtu běhu. Pokud je starší bit nastaven na 1, označuje kódovaný běh. Kódované běhy jsou dekódovány čtením hodnoty běhu a opakováním jeho počtu, který je indikován počtem cyklů. Pokud je nejstarší bit nastaven na hodnotu 0, zobrazí se doslovné spuštění, což znamená, že bajty dalšího spuštění jsou počítány doslovně z dat kódovaného obrazu. Pak byte pultuspouštění obsahuje hodnoty v rozmezí od 0 do 127 (run counter plus one). RLE na úrovni bajtů jsou dobré pro obrazová data uložená jako jeden bajt na pixel. Schémata RLE pixelů se používají, když se pro ukládání hodnot jednoho pixelu používají dva nebo více po sobě jdoucích datových bajtů. Na úrovni pixelů jsou bity ignorovány a bajty jsou počítány pouze k identifikaci každé hodnoty pixelu. Velikost kódovaných paketů závisí na velikosti kódovaných hodnot pixelů. Počet bitů nebo bajtů na pixel je uložen v záhlaví obrazového souboru. Spouštění obrazových dat uložených v hodnotě 3 bajtů pixelů kódovaných 4 bajtovým paketem s jedním bytem počítáním počtu operací následovaných třemi bajty bajtů. Metoda kódování zůstává stejná jako u RLE bytu.

Související publikace