Úkolem je implementovat speciální algoritmus na půltónování (halftoning), který bude fungovat na laserové tiskárně s rozlišením 1200dpi. Jde o algoritmus popsaný v článku Velho, Gomes: Stochastic Screening Dithering with Adaptive Clustering (pro barvy: Color Halftoning with Stochastic Screening and Adaptive Clustering)
Obrázek je procházen po tzv. "Space-Filling-Curve" (fraktální křivka vyplňující celou rovinu). Na křivce jsou určeny úseky dlouhé typicky 6 až 100 pixelů. Každý úsek obsahuje právě jednu souvislou vybarvenou část. Poměr délky vybarvené části a celého úseku udává úroveň jasu, délka úseku má vliv na rozlišovací schopnost rastru. Algoritmus je adaptivní proto, že přizpůsobuje délku úseků lokálním vlastnostem obrázku (přítomnost ostrých hran).
Výsledek budu tisknout na laserové tiskárně s rozlišením 1200dpi (např. HP LaserJet 1320 nebo P2015). Pro představu, jak vypadá kvalita takového tisku, každý ode mne dostane testovací obrázek s tečkami velikosti 1x1 až 10x10 pixelů vytištěnými právě na takové tiskárně..
Jako základ poslouží projekt 068laser z repository grcis. Je připravena jednoduchá aplikace, ve které uživatel může zadat vstupní obrázek a ihned se automaticky spouští metoda Dither.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 v souboru Dither.cs označen závorkami:
// !!!{{ // !!!}}
Vstupní obrázek je předán Vaší metodě v parametru Bitmap input, navrhuji ponechat rychlý přístup do vstupních dat. Dva číselné parametry udávají požadované rozlišení výstupu. Uživatelem zadaný textový parametr použijte k příp. modifikaci chování vašeho algoritmu, pilotní implementace čte dvě desetinná čísla, první z nich je škálovacím koeficientem, druhé rozsahem uplatnění náhody (od 0.0 do 1.0). Výstupní obrázek vracíte pomocí výstupního parametru out Bitmap output.
Čtení šedého odstínu ze vstupní bitmapy (včetně bilineární interpolace mezi sousedními pixely) implementuje přiložená metoda Dither.GetGray(), musíte však zachovat rychlý přístup k vstupní bitmapě zafixované v paměti..
Přehledné shrnutí zdrojů informací:
Space-Filling-Curve
Context-based Space Filling Curves
Velho, Gomes:
Stochastic Screening Dithering with Adaptive Clustering
Velho, Gomes:
Color Halftoning with Stochastic Screening and Adaptive Clustering
Při odevzdání je potřeba dostatečně podrobně popsat parametry - jaký mají význam, jejich
přípustné hodnoty, ..
Můžete rovněž přiložit zajímavý vstupní obrázek nebo dva, na kterých jste dosáhli
pěkných výsledků.
Odevzdat do: 7. 12. 2014
Základ: 6 bodů (neadaptivní varianta půltónování)
dalších 5 až 10 bodů navíc za adaptivitu a další vylepšení
Visual Studio 2010 projekt: 068laser
Modifikujte a odevzdejte soubor: Dither.cs
Do komentáře na první řádce napište své jméno!
Nezapomeňte popsat parametry a alespoň stručně upřesnit metodu.
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 frozentree.png, cate1600x1200bw.png nebo egsr1.png.
Copyright (C) 2013-2014 J.Pelikán, last change: 2019-05-09 17:52:59 +0200 (Thu, 09 May 2019)