úloha 067: Umělecký filtr - mozaika

Úkolem je navrhnout a implementovat algoritmus, který počítá efekt nad rastrovým obrázkem. Výsledek by se měl podobat některé z klasických grafických technik: mosaika či vitráž.

Mosaic

Základem poslouží projekt 067mosaic z repository grcis. Je připravena jednoduchá aplikace, ve které uživatel zadává vstupní obrázek a ihned se automaticky spouští metoda Mosaic.TransformImage() přepočítávající vstupní obrázek do nové podoby. Výstup je poté zobrazen ve formuláři. Tuto metodu musíte přeprogramovat, příslušný úsek kódu je ve zdrojáku Mosaic.cs označen závorkami:

  // !!!{{
  // !!!}}
Pilotní implementace demonstruje několik technických detailů:
  1. vytvoření instance výstupního rastrového obrázku s pevným formátem Format24bppRgb
  2. rychlý přístup k binárním datům pixelů - pomocí metody Bitmap.LockBits() a unsafe bloku s použitím ukazatelů do uzamčeného paměťovém bloku
  3. výpočet v samostatném vlákně - s vhodnou frekvencí je nutné v cyklech kontrolovat hodnotu globální logické proměnné Form1.cont (při hodnotě false by měl algoritmus co nejdříve předčasně skončit)
  4. Drag & Drop vstupního obrázku - vstupní soubor můžete do formuláře přenést myší z jakékoli aplikace Windows podporující D&D.

Technicky: vstupní obrázek je předán Vaší metodě v parametru Bitmap input, navrhuji ponechat rychlý přístup do vstupních dat. Uživatelem zadaný textový parametr použijte k příp. modifikaci chování vašeho algoritmu. Výstupní obrázek vracíte pomocí výstupního parametru out Bitmap output.

Inspirace: použití Voroného diagramů pro generování tvaru dílků mozaiky (viz např. A Method for Creating Mosaic Images Using Voronoi Diagrams).
Obecné teselace použité přímo nebo nějakým způsobem adaptované na konkrétní vstupní obrázek. Výsledek by měl vypadat pěkně a/nebo zajímavě, tím se řiďte.

Podpora: Pokud byste potřebovali, tak funkce pro převody mezi RGB a HSV najdete v souboru common/MathSupport.cs. Funkci na převod do odstínů šedé najdete v common/RasterDrawing.cs

Do odevzdaného zdrojáku připište podrobnější komentář o původu vašeho algoritmu: zda jste ho sami vymysleli, zda jste se inspirovali nějakým filtrem (PhotoShop, GiMP, ..), je-li to podle nějaké knížky/článku, apod. Na jaká data se má filtr aplikovat, jaký má být výsledek výpočtu.. (nemusíte posílat žádné obrázky, ale pokud vám algoritmus bude výjimečně pracovat na nějakém vstupu, přiložit ho můžete).
Také je potřeba dostatečně podrobně popsat parametry - jaký mají význam, jejich přípustné hodnoty, ..

TERMÍN: do 8. 12. 2013

BODY: základ 8 bodů (smysluplná implementace efektu), tvary buněk dle obrázku, zajímavá teselace, .. až 7 bodů navíc

PROJEKT: 067mosaic

ZDROJOVÝ SOUBOR: Mosaic.cs

DATA: můžete použít pár obrázků přímo z repository, z adresáře data, dále můžete použít třeba obrázky sail.png, silverstone-17671.png, maran-18587.png, monarch.png, skyline129-178-246.png.


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