Úkolem je implementovat výpočet co nejlepší barevné palety přizpůsobené vstupnímu rastrovému obrázku a přemapování obrázku na tuto paletu. Vstupem je "true-color" obrázek uložený v paměti s velkým počtem barev (24bpp), výstupem musí být obrázek s barevnou paletou co nejlépe aproximující vstup. Vstup i výstup musí mít stejné rozměry v pixelech.
Základem poslouží projekt 054colorreduction z repository grcis. Je připravena jednoduchá aplikace, ve které uživatel zadává vstupní obrázek a po stisku tlačítka "Recompute" se spouští metoda ColorReduction.Reduce() přepočítávající vstupní obrázek do výstupu. Tuto metodu musíte přeprogramovat, příslušný úsek kódu je ve zdrojáku ColorReduction.cs označen závorkami:
// !!!{{ // !!!}}
Náměty: doporučuji implementovat Heckbertův algoritmus středního řezu nebo
můžete zkusit i výpočetně náročnější shlukovou analýzu. V obou případech experimentujte
s metrikami či různými přístupy při rozdělování/spojování skupin barev (pro snadnou změnu
těchto parametrů použijte textový argument předávaný vaší funkci). Nezapomeňte
reagovat na uživatelské předčasné ukončení výpočtu, viz níže. Nepoužívejte
přístup "Octree"!
Můžete (ale nemusíte) používat nějakou formu rozptylování barev, např. některou
variantu distribuvce chyby.
Technicky: vstupní i výstupní obrázky jsou předávány jako parametry (typ Bitmap) spolu s parametrem string param pro další řízení vašeho algoritmu (parsování číselné hodnoty je v pilotním řešení naznačeno). Výsledný obrázek musíte v metodě ColorReduction.Reduce() sami vytvořit - viz vzorový kód. Rozměry okopírujte ze vstupního obrázku, pixelový formát nastavte na Format8bppIndexed. Paletu přiřaďte podle vzoru Draw.Palette332() (jednotlivé barvy musíte zapisovat do již existujícího objektu ColorPalette).
TERMÍN: do 25. 11. 2012
BODY: až 15 bodů
PROJEKT: 054colorreduction
ZDROJOVÝ SOUBOR: ColorReduction.cs
TESTOVACÍ DATA: anime.png (3461 různých barev), sail.png (102077 různých barev), silverstone-17671.png (120856 různých barev).
OSTRÁ DATA: maran-18587.png (400x300, 45022 různých barev), monarch.png (576x384, 116907 různých barev), skyline129-178-246.png (400x300, 64293 různých barev).
Copyright (C) 2012-2013 J.Pelikán,
last change: $Date: 2014-10-03 15:44:39 +0200 (Fri, 03 Oct 2014) $
Send comments/requests to
pepca.at.cgg.mff.cuni.cz