Úkolem je implementovat některou vylepšenou metodu distribuce chyby: rozptylování černobílého obrázku pro výstup na obrazovce. Klasické přístupy (Floyd-Steinberg) mají několik nevýhod, zejména přítomnost pravidelností (artefaktů) pro některé vstupní odstíny a nesplnění kritéria modrého šumu (oku příjemná nahodilost).
Základem poslouží projekt 007bluenoise z repository grcis. Je připravena jednoduchá aplikace, ve které uživatel zadává vstupní obrázek a automaticky se spouští metoda Dither.TransformImage() přepočítávající obrázek do výstupu. Tuto metodu musíte přeprogramovat, příslušný úsek kódu je ve zdrojáku Dither.cs označen závorkami:
// !!!{{ // !!!}}
Literatura:
Blue-Noise Dithering,
články Viktora Ostromoukhova,
zejména
A Simple and
Efficient Error-Diffusion Algorithm nebo
Structure-Aware
Error Diffusion (těžší), ...
Do komentáře nebo doprovodného mailu napište, jakou metodu jste implementovali (uveďte URL zdroje
informací), jaké se mají nastavovat parametry a diskutujte pozorované výsledky.
Náměty (z jednoduchých randomizací): náhodná modifikace zaokrouhlovací meze, náhodná perturbace distribučního filtru (pozor na jedničkový součet!) nebo náhodný výběr jediného směru pro distribuci celé chyby.
Výsledek budu pozorovat na LCD displeji v originálním zvětšení (100%). Primárně na tyto podmínky byste se měli zaměřit.
Technicky: vstupní i výstupní obrázky jsou předávány jako parametry (typ Bitmap) spolu s jednoduchým číselným parametrem pro případné další řízení vašeho algoritmu. Z obrázku se čte po jednotlivých pixelech metodou Bitmap.GetPixel(), nová barva (Color) se zapisuje do výsledného obrázku metodou Bitmap.SetPixel().
Výsledný obrázek musí být černo-bílý (B/W, 1-bitový), i když naše aplikace používá zápis do formátu "PNG 24bit". Budete tedy muset používat pouze hodnoty 0 a 255.
Pozor: výsledný obrázek musíte v metodě Dither.TransformImage() sami vytvořit - viz vzorový kód. Rozměry okopírujte ze vstupního obrázku.
TERMÍN: do 21. 11. 2010
BODY: 6 až 14 bodů (ve výjimečných případech - velmi složitý algoritmus - mohu dát až 20b)
PROJEKT: 007bluenoise
ZDROJOVÝ SOUBOR: Dither.cs
OBRÁZKY K TESTOVÁNÍ: portrét 1600x1200, interferenční obrazec 600x450, zimní krajina 1920x1200, les 3072x2048.
Copyright (C) 2006-2010 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