Cílem je navrhnout co nejlepší ztrátovou kompresi monochromatického obrázku založenou na transformačním principu. Vstupem je šedotónový obraz (8bpp), předpokládá se fotografie nebo uměle vyrobený obrázek (rendering).
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 vyladit ho na co největší
účinnost - poměr kompresního poměru a zkreslení výsledku. Musíte
implementovat kódování i dekódování. Celý kodek (kodér i dekodér)
bude implementován ve třídě TRCodec - v jediném zdrojovém souboru
TRCodec.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.
Použijte některou klasickou transformační metodu (DCT, Hartley, Hadamard, Haar), kvantizaci jednotlivých koeficientů (nejlépe s externě řízenou kvalitou - jako v JPEG 1) následovanou nějakým dostatečně efektivním kódováním a kanálovou kompresí.
Pilotní program je připraven tak, že dokáže načíst libovolný vstupní rastrový obrázek, zadat parametr kvality (mezi 0 a 100), 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 (spočítat RMSE).
Odevzdat do: 18. 1. 2015
Základ: 30 bodů
příp. prémie za vlastní entropický kodek nebo umístění v soutěži
Visual Studio 2010 projekt: 014compressiontr
Modifikujte a odevzdejte soubor: TRCodec.cs
Do komentáře na první řádce napište své jméno!
Nezapomeňte alespoň stručně popsat metodu, kterou jste implementovali.
V repository je jeden vhodný obrázek - masa512g.png. Další obrázky pro testování: janssen-19111g.png (533x400), kodim07sg.png (465x375) nebo frozentree.png (1920x1200).
Copyright (C) 2010-2015 J.Pelikán, last change: 2019-05-09 17:52:59 +0200 (Thu, 09 May 2019)