Úloha 014: Transformační komprese obrázku

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).

Entropický kodek

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:

Úkol

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.

Metody k implementaci: EncodeImage() a DecodeImage().

Náměty

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í.

Srovnání: komprese standardu JPEG, té se samozřejmě asi nepřiblížíte.

Aplikace

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).

Termín

Odevzdat do: 18. 1. 2015

Body

Základ: 30 bodů
příp. prémie za vlastní entropický kodek nebo umístění v soutěži

Projekt

Visual Studio 2010 projekt: 014compressiontr

Zdrojový soubor

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.

Testovací data

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)