Zadání zápočtových prací pro PGR1

Pokyny pro témata zápočtové práce - prezentace (níže na této stránce)

Vzorová témata zápočtové práce - programování:

Warping

Naprogramujte aplikaci s grafickým uživatelským rozhraním (GUI) implementující algoritmus z článku

T. Beier, S. Neely, Feature-based image metamorphosis, Computer graphics (SIGGRAPH '92 Proceedings) (1992), 35-42.

Aplikace bude obsahovat

  • user-friendly GUI,
  • načítání obrázku v nějakém rozumném formátu jako JPEG nebo PNG, rozhodně ne BMP,
  • přidávání, odebírání a editaci libovolného počtu úseček myší,
  • bilineární interpolaci

Testovací obrázky

Jelikož ne vždy se Vám povede správně naprogramovat bilineární interpolaci, Zde si můžete stáhnout vhodný testovací obrázek a jeho zwarpovanou verzi, kde je bilineární interpolace správně.

Testovací obrázek pro warping Správně zwarpovaný testovací obrázek na warping

Morphing

Pokud se vám zdá warping příliš jednoduchý, můžete jej využít k naprogramování GUI aplikace pro morphing (animovanou přeměnu) jednoho obrázku v druhý.

Dithering

Naprogramujte GUI aplikaci implementující algoritmy na dithering zmiňované na přednášce a uvedené v článku

Donald E. Knuth, Digital halftones by dot diffusion, ACM Trans. Graphics, Volume 6, Issue 4 (1987), 245-273.

Minimálně by to měly být následující algoritmy:

  • náhodné rozptýlení,
  • clustered-dot dither,
  • ordered dither,
  • error diffusion.

U VŠECH algoritmů dejte možnost na výběr mezi verzí se zvýrazněním hran a bez zvýraznění hran (viz. zmiňovaný článek od Knutha). Přidejte možnost volby mezi několika předdefinovanými maticemi i možnost ručního vytváření rozptylovacích matic. Načítání a ukládání obrázků v nějakém rozumném formátu (např. knihovna FreeImage, v Linuxu např. jpeglib) je samozřejmostí. Součástí aplikace musí logicky být i převod barevných obrázků do odstínů šedi.

Výpočetní geometrie

Naprogramujte GUI aplikaci implementující základní algoritmy výpočetní geometrie:

  • uživatel vytvoří klikáním myší jednoduchý polygon a Váš program provede jeho triangulaci a spočítá jeho obsah,
  • uživatel nakliká myší předem neznámý počet bodů (nebo je program náhodně vygeneruje) a Váš program najde a zobrazí konvexní obal těchto bodů,
  • program najde co nejmenší kružnici obalující množinu naklikaných nebo vygenerovaných bodů,
  • případně jakýkoli další algoritmus, jako např. dělení nekonvexních polygonů na konvexní a podobně.

Color picker

Naprogramujte GUI aplikaci implementující známé dialogové okno pro výběr barvy. Aplikace by měla umět

  • vybírat barvy pomocí různých barevných prostorů (RGB, CMY, HSV, HSL, YUV, YIQ, YCBCR, ...)
  • automaticky dopočítávat souřadnice barev v ostatních prostorech
  • generovat kódy barev v HTML formátu
  • atd :-)

Algoritmy pro ořezávání a vyplňování obrazců

Implementujte některé z algoritmů pro ořezávání a vyplňování útvarů:

  • ořezávání úsečky, kružnice, kruhu, elipsy
  • vyplňování polygonu
  • vyplňování kruhu a elipsy v celočíselné aritmetice
  • Pinedův algoritmus vyplňování konvexního polygonu
  • flood fill s použitím fronty nebo zásobníku, pro 4-spojité nebo 8-spojité oblasti, metody porovnejte.

Zpracovat pouze jediný algoritmus asi nebude stačit, poraďte se nejprve s vyučujícím.

Vlastní formát obrázku

Populární formáty pro ukládání a kompresi obrázků mají mnoho variant a možností, jsou flexibilní, díky čemuž mají složitou hlavičku atd. Některé základní principy kódování a komprese dat, které jsou v nich použity, jsme však důkladně probrali na přednášce. Můžete se proto pokusit navrhnout vlastní jednoduchý formát pro ukládání a kompresi obrazových dat (vstupem budou 3 matice pro R,G,B složky barev pixelů) a napsat funkce pro ukládání a načítání se souboru. Samozřejmě k nim musíte dodat ukázkový prográmek, který demonstruje, že skutečně fungují. Pro kompresi dat můžete implementovat některé metody z přednášky, nebo další metody, které sami nastudujete nebo navrhnete.

  • převod na indexovanou barvu s pevnou nebo adaptivní paletou (vektorová kvantizace, median cut)
  • kódování RLE (samo o sobě nestačí)
  • kódování LZ77, resp. LZW
  • Huffmanovo kódování (jednoduchý nápad: enkodér v 1. průchodu analyzuje obrázek, bude hledat četnost všech dvojic bytů (barev) a podle nich odhadne pravděpodobnost výskytu daných dvojic. Provede konstrukci Huffmanova binárního kódu a poté v 2. průchodu obrázek tímto kódem zkomprimuje. Binární strom Huffmanova kódu musí být uložen spolu s obrázkem).
  • pro fajnšmekry: komprese JPEG (základní varianta popsaná na přednášce)

Jednoduchá 2D hra

Můžete se pokusit naprogramovat jednoduchou interaktivní dvourozměrnou hru podle vlastního návrhu. Detaily (povolené knihovny apod.) konzultujte s vyučujícím před započetím práce.


Vzorová témata zápočtové práce - prezentace:

  1. Naučte se (do jisté míry) pracovat s nějakou technologií tvorby atraktivního grafického, resp. multimediálního obsahu:
  1. Vytvořte a vyzkoušejte jednoduchý příklad použití této technologie.
  2. Připravte prezentaci obsahující seznámení s danou technologií (popř. technické detaily), vysvětlení jejího účelu, použití a nakonec předvedení návrhu a funkčnosti vlastního příkladu.

Svoji prezentaci budete mít možnost předvést spolužákům na poslední hodině POGR1. Délka prezentace je cca 20 minut. Z toho plyne omezení počtu zájemců o tento typ zápočtového úkolu na 4-5 studentů.