úloha 007: Randomizace distribuce chyby

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


[Cvičení NPGR003]  [Návody k zápočtům v C#]  [Přednášky a semináře]  [Odkazy na demonstrace]

Valid XHTML 1.1 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