Cílem je navrhnout co nejlepší bezeztrátovou kompresi monochromatického (šedotónového) rastrového obrazu (typicky 8 bitů na pixel). Vstupem je rastrový obraz (8bpp), výstupem binární soubor na disku.
Je k dispozici standardní algoritmus pro kanálovou (entropickou) kompresi: DeflateStream (Zlib) používaný pomocí našeho API IEntropyCodec. Třída, která Deflate algoritmus používá, se jmenuje DeflateCodec a je použita v pilotní implementaci PreCodec.cs. Případné lepší kanálové komprese si můžete implementovat (a dostat za to bonusové body, viz úloha 043entropycodec) např. podle modulů z JaGrLib:
Musíte navrhnout vlastní kompresní algoritmus a vyzkoušet
jeho bezeztrátovost - tj. implementovat kódování i dekódování. Celý kodek (kodér i dekodér)
je implementován ve třídě PreCodec - v jediném zdrojovém souboru
PreCodec.cs.
Ignorujte případné barvy vstupního obrázku, pixely převádějte na jasové hodnoty např.
pomocí funkce Raster.Draw.RgbToGray().
Rozměry bitmapy spolu s magickým číslem MAGIC ukládejte do hlavičky vašeho formátu.
Měli byste použít prediktivní kompresi (1D nebo 2D), chybu prediktoru (reziduum) pak budete kódovat nějakým entropickým kodérem, přičemž využijete velmi nerovnoměrné PDF těchto dat.
Pilotní program je připraven tak, že dokáže načíst libovolný vstupní rastrový obrázek, spustit kompresi, změřit velikost zakódovaného souboru a potom zpátky kód přečíst (dekódovat), a porovnat s originálem.
Odevzdat do: 4. 1. 2015
Základ: 25 bodů
příp. prémie za vlastní entropický kodek nebo umístění v soutěži
Visual Studio 2010 projekt: 042compressionpre
Modifikujte a odevzdejte soubor: PreCodec.cs
Do komentáře na první řádce napište své jméno!
Nezapomeňte alespoň stručně popsat metodu, kterou jste vymysleli.
V repository jsou dva vhodné obrázky - masa512g.png a santa.png (ten druhý neodpovídá přesně specifikaci, je jenom černobílý), další obrázky pro testování: janssen-19111g.png (533x400), kodim07sg.png (465x375)
Copyright (C) 2010-2014 J.Pelikán, last change: 2019-05-09 17:52:59 +0200 (Thu, 09 May 2019)