Hlavní navigace

Grafika v UNIXu - výstupní rozlišení a půltónování

26. 11. 2001
Doba čtení: 5 minut

Sdílet

Většina výstupních zařízení nedokáže přímo zobrazovat vektorové obrazy ani plynulé stupnice šedi, ale skládá obraz z drobných teček plné barvy. Proto má výstupní rozlišení a půltónování takový význam pro kvalitu tisku. V dnešním dílu se dozvíte více o výstupním rozlišení, o frekvenci rastru, hodnotách DPI a LPI a o napravování chyb vznikajících při nízkém rozlišení.

Nejdůležitějším parametrem výstupního zařízení je bezesporu rozlišení. Rozlišení při skenování jsme věnovali část čtvrtého dílu našeho seriálu, nyní si téma dokončíme.

Výstupní rozlišení

Pokud zařízení pracuje na rastrovém principu, pak v naprosté většině případů skládá obraz z drobných bodů – pixelů (zkomolená zkratka anglického picture element – element obrázku) – rozmístěných v čtvercové nebo obdélníkové síti. Body mohou nabývat pouze dvou (tiskárny) nebo určitého množství (obrazovky) diskrétních hodnot. Vzájemná vzdálenost těchto bodů dává jednu důležitou informaci o kvalitě zařízení. Toto rozlišení se udává většinou v bodech na palec (DPI) nebo na centimetr.

Pokud je rozlišení tiskárny menší než 200 DPI, jsou jednotlivé body jasně patrné i z běžné čtecí vzdálenosti. Do této kategorie dnes patří jen faxy.

Pokud je rozlišení tiskárny 300–400 DPI, jsou jednotlivé body z běžné čtecí vzdálenosti jen nepatrně viditelné. Výrazně se však ještě může projevovat zkreslení písmen a tloušťky čar.

Při rozlišení 600–800 DPI (běžné laserové tiskárny) lidské oko jednotlivé pixely běžně nevidí. Lze je však spatřit u ostrých špiček a jemně stoupajících čar a školené oko je stále ještě schopné spatřit jemné deformace písmen. S vzrůstající hodnotou rozlišení tyto jevy postupně ustupují. Při rozlišení 1200 DPI jsou již nepatrné a při rozlišení 1800 DPI lidskému oku zcela mizí.

Přesto však rozlišení špičkových osvitových jednotek (4000 DPI a více) není zbytečné, protože má vliv na kvalitu rastrů.

Rozlišení a PostScript

Efekty spojené s nízkým rozlišením řeší v PostScriptu několik technik.

U písem se jedná o zeštíhlení (hinting – viz desátý díl našeho seriálu), které zaručí, že např. dřík písmena L bude stejně silný jako dřík písmena R.

Tabulka č. 210

výsledek setstrokeadjust
Čáry o tloušťce 1,1 pixelu (naznačeny zeleně): nahoře bez korekce setstrokeadjust, dole s korekcí.

U čar jde o operátor setstrokeadjust (Level 2). Bez jeho nastavení se obarví pixely, jejichž střed leží uvnitř čáry. To může způsobit, že čára jedné a téže tloušťky bude kreslená různým počtem pixelů v závislosti na poloze. Nastavením setstrokeadjust se zavede korekce, která zajistí vždy stejnou tloušťku čáry.

Vyhlazování (antialiasing)

Tabulka č. 211

výsledek vyhlazování
Obrazec vlevo je kreslený bez vyhlazování, napravo s vyhlazováním. Na dolních obrázcích je 4× zvětšený ukázkový výřez.

Některá výstupní zařízení mají opačný problém – malé rozlišení, ale naproti tomu vysoký počet dostupných odstínů (např. obrazovka). Je-li potřeba na nich co nejlépe zobrazit vektorovou grafiku, musí se naopak provádět vyhlazování hran. Jde o postup, při kterém se čáry nekreslí ostře ohraničené, ale ty pixely, které leží na hranici různě obarvených oblastí, se vybarvují směsí barev oblastí, na kterých bod leží. Výpočtem hodnoty směsí se zabývá několik algoritmů, jejichž použití závisí na formě a množství vstupních dat. Univerzální, ovšem výpočetně nejnáročnější metodou, je podvzorkování, kdy se celý obraz vypočte ve vyšším rozlišení a poté se každému bodu přiřadí průměr několika hodnot.

U všech algoritmů vyhlazování je třeba brát v úvahu gama korekci.

Rozklad obrazu (půltónování)

Rastrování slouží k převodu bitové hloubky vstupních dat do bitové hloubky výstupního zařízení, která je typicky menší.

Zatímco některá zařízení mají problém s vykreslením osamoceného bodu (např. laserové tiskárny či běžný ofsetový tisk), jiným naopak nesvědčí větší vyplněné plochy (např. inkoustovým tiskárnám). Proto také vznikly metody používající různé rozkladové obrazce:

Bodový rozklad: Při rozkladu polotónů bodovým rozkladem vzniká množství osamocených bodů ve velikosti jednoho pixelu. Ty jsou pro lidské oko nejméně patrné, ale nejvíce náchylné na změnu velikosti při tisku. Bodový rozklad je vhodný pro indexované obrázky, inkoustové tiskárny a inkoustové plotry. Hustota bodů je zde dána rozlišením výstupního zařízení. Někdy se tento typ rozkladu po vzoru elektrotechniky nazývá frekvenční modulace.

Rastrový rozklad: Při rastrovém rozkladu vzniká ve víceméně stejném rozestupu množství různě velkých bodů. Tento rozestup je dán výrobcem zařízení anebo uživatelem. Hustota rastrů se udává v linkách na palec (LPI) nebo centimetr a nazývá se frekvence rastru. Rastrový rozklad je vhodný pro laserové tiskárny a ofsetový tisk. Někdy se nazývá amplitudová modulace.

Čárový rozklad: Při čárovém rozkladu vzniká na obrazu množství rovných nebo klikatých čar. Podobně jako u bodů lze rozlišit dva různé typy rozkladu – frekvenční (čáry mění hustotu) a amplitudový (čáry mění tloušťku). Při návrhu tohoto rozkladu je třeba vzít v úvahu, že čáry bývají viditelné lépe než body. Nejznámějším typem tohoto rozkladu je šrafování a nejčastěji se tento rozklad používá u pisátkových plotrů.

Možné postupy rozkladu obrazu

Vlastní algoritmus rozkladu silně ovlivňuje jeho použitelnost v různých programech. Pomineme-li triviální a nepoužitelné metody, lze rozklad obrazu provést několika způsoby:

Tabulka č. 212

Floyd-Stenibergův rozklad
Obrázek ze třetího dílu s Floyd-Steinbergovým rozkladem.

Difúze chyby (error diffusion):

Jde o metodu rozkladu na body. Při tomto postupu se provádí „aproximace“ vstupní hodnoty černou nebo bílou (případně jinými dostupnými odstíny). Při této „aproximaci“ vzniklá „chyba“ je pak podle určité rozptylové matice rozptýlena do okolních bodů (z výpočetních důvodů pouze do těch, které jsme ještě „neaproximovali“. Při „aproximaci“ dalších bodů pak místo původních hodnot bereme v úvahu hodnoty upravené rozptylem chyby. Při vhodně volené rozptylové matici získáme nepravidelný jemný bodový rozklad. Mezi nejznámější rozptylové matice patří Floyd-Steinberg, Sierra a Stucki.

Nevýhodou algoritmů difúze chyby je nutnost znát v době tvorby rastru hodnoty ve všech bodech obrazu. To vylučuje možnost rozumné integrace této metody do PostScriptu.

Tabulka č. 213

vyplnění Hilbertovou křivkou
Obrázek vyplněný Hilbertovou křivkou.

Stochastické rastry (stochastic screens):

Stochastické rastry vznikají neopakujícím se umístěním bodů nebo čar do prostoru. Některé z těchto metod využívají přímo náhodný generátor. Jejich problémem je najít dostatečně náhodný a rychlý generátor. Při implementaci jiných metod se používají různé sofistikované postupy – např. vyplňování Hilbertovou křivkou nebo s použitím neopakujících se funkcí. Vlastnosti stochastických rastrů se silně mění s použitým algoritmem, většinou se jedná o kvalitní, avšak výpočetně náročné metody.

Tabulka č. 214

Bayerovo seskupení
Obrázek rozložený pomocí Bayerova seskupení.

Pole prahů (threshold array):

Máme zadáno čtvercové nebo obdélníkové pole (buňku) s prahovými hodnotami pro jednotlivé body. Při rozkladu pak hodnoty z buňky pravidelně opakujeme. Jde o jednoduchý, rychlý a široce rozšířený algoritmus. Vhodně navržené buňky se používaly u indexovaných obrazovek a u jehličkových tiskáren. V PostScriptu se jedná o půltónování typu 3.

root_podpora

Tabulka č. 215

bodové seskupení
Obrázek rozložený na klasické kruhové body.

Funkce bodu (spot function):

Je zadána velikost buňky a vhodná dvourozměrná funkce v intervalu mezi −1 a 1. Buňku zobrazíme do tohoto intervalu a vypočteme hodnotu funkce. Zjistíme hodnoty funkce pro středy buněk, setřídíme je podle velikosti (jsou-li stejné, řadíme libovolně) a jednotlivým středům buněk přiřadíme hodnotu prahu (rovnoměrně rozdělenou mezi 0 a 1). Tím jsme pomocí jednoduché funkce rychle vytvořili libovolně velké pole prahů. Tato metoda je vůbec nejrozšířenější metodou pro tvorbu rastrů. V PostScriptu se jedná o půltónování typu 1.

(ukázky rozkladu viz pgmtopbm z balíku NetPBM)

Byl pro vás článek přínosný?