Návrh a realizace Ascii Art programu Development and programming of Ascii Art software
Bc. Roman Žák
Diplomová práce 2011
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
2
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
3
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
4
ABSTRAKT V této diplomové práci je popsáno Ascii umění a metody jeho tvorby. Práce zahrnuje principy počítačové grafiky a objektově orientovaného programování s podporou grafického uživatelského rozhraní. Praktická část prezentuje metody převodu z obrázku na text s ukázkovými příklady a navzájem je porovnává. Nejvýznamnější úsek této práce tvoří autorem vytvořený software pro generování Ascii Artu.
Klíčová slova: Ascii Art, počítačová grafika, neproporcionální text, objektově orientované programování, grafické uživatelské rozhraní, wxWidgets, algoritmy rozpoznávání.
ABSTRACT This master thesis deals with Ascii Art and methods of its creation. This document involves the principles of computer graphics and object-oriented programming with support for graphical user interface. The practical part presents the method of transfer from image to text with showcase examples and compares them with each other. The most important part of this work consists of author created software for generating Ascii Art.
Keywords: Ascii Art, computer graphics, monospace text, object-oriented programming, graphical user interface, wxWidgets, recognition algorithms.
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
5
Poděkování, motto Děkuji především vedoucímu mé diplomové práce panu Ing. Pavlu Pokornému, Ph.D. za odborné rady a předané znalosti v oboru IT. Dále děkuji paní akad. mal. Naděždě Čančíkové za cenné rady v oblasti výtvarného umění. Zvláště pak děkuji svým nejbližším za pomoc a trpělivost při psaní teoretické části diktováním. Za připomínky spojené s testováním mého softwaru děkuji svým spolužákům a přátelům.
Výtvarný směr vítězí teprve tehdy, když jej začnou používat aranžéři výkladních skříní. -Pablo Picasso
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
6
Prohlašuji, že •
•
•
• •
•
•
beru na vědomí, že odevzdáním diplomové/bakalářské práce souhlasím se zveřejněním své práce podle zákona č. 111/1998 Sb. o vysokých školách a o změně a doplnění dalších zákonů (zákon o vysokých školách), ve znění pozdějších právních předpisů, bez ohledu na výsledek obhajoby; beru na vědomí, že diplomová/bakalářská práce bude uložena v elektronické podobě v univerzitním informačním systému dostupná k prezenčnímu nahlédnutí, že jeden výtisk diplomové/bakalářské práce bude uložen v příruční knihovně Fakulty aplikované informatiky Univerzity Tomáše Bati ve Zlíně a jeden výtisk bude uložen u vedoucího práce; byl/a jsem seznámen/a s tím, že na moji diplomovou/bakalářskou práci se plně vztahuje zákon č. 121/2000 Sb. o právu autorském, o právech souvisejících s právem autorským a o změně některých zákonů (autorský zákon) ve znění pozdějších právních předpisů, zejm. § 35 odst. 3; beru na vědomí, že podle § 60 odst. 1 autorského zákona má UTB ve Zlíně právo na uzavření licenční smlouvy o užití školního díla v rozsahu § 12 odst. 4 autorského zákona; beru na vědomí, že podle § 60 odst. 2 a 3 autorského zákona mohu užít své dílo – diplomovou/bakalářskou práci nebo poskytnout licenci k jejímu využití jen s předchozím písemným souhlasem Univerzity Tomáše Bati ve Zlíně, která je oprávněna v takovém případě ode mne požadovat přiměřený příspěvek na úhradu nákladů, které byly Univerzitou Tomáše Bati ve Zlíně na vytvoření díla vynaloženy (až do jejich skutečné výše); beru na vědomí, že pokud bylo k vypracování diplomové/bakalářské práce využito softwaru poskytnutého Univerzitou Tomáše Bati ve Zlíně nebo jinými subjekty pouze ke studijním a výzkumným účelům (tedy pouze k nekomerčnímu využití), nelze výsledky diplomové/bakalářské práce využít ke komerčním účelům; beru na vědomí, že pokud je výstupem diplomové/bakalářské práce jakýkoliv softwarový produkt, považují se za součást práce rovněž i zdrojové kódy, popř. soubory, ze kterých se projekt skládá. Neodevzdání této součásti může být důvodem k neobhájení práce.
Prohlašuji,
že jsem na diplomové práci pracoval samostatně a použitou literaturu jsem citoval. V případě publikace výsledků budu uveden jako spoluautor. že odevzdaná verze diplomové práce a verze elektronická nahraná do IS/STAG jsou totožné.
Ve Zlíně
……………………. podpis diplomanta
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
7
OBSAH ÚVOD .................................................................................................................................... 9 I TEORETICKÁ ČÁST .................................................................................................... 10 1 CO JE ASCII ART ................................................................................................... 11 1.1 HISTORIE .............................................................................................................. 11 1.1.1 Podobnosti ve výtvarných směrech před nástupem počítačů ....................... 11 1.1.2 Informační věk ............................................................................................. 12 1.1.2.1 Znaková sada ASCII ............................................................................ 13 1.2 VYUŽITÍ ............................................................................................................... 14 1.2.1 Emotikony a dekorace .................................................................................. 14 1.2.2 Generované obrázky a animace ................................................................... 14 1.3 TVORBA ............................................................................................................... 14 2 PŘEDZPRACOVÁNÍ OBRAZU A TEXTU ......................................................... 15 2.1 OBRAZ.................................................................................................................. 15 Prahování...................................................................................................... 15 2.1.1 2.1.2 Jas a kontrast ................................................................................................ 16 2.1.3 Barevnost...................................................................................................... 16 2.1.3.1 Model RGB .......................................................................................... 17 2.1.3.2 Stupně šedi ........................................................................................... 17 2.1.3.3 Negativ ................................................................................................. 18 2.2 TEXT .................................................................................................................... 18 2.2.2 Objekt wxFont .............................................................................................. 19 3 METODY ROZPOZNÁVÁNÍ ................................................................................ 20 3.1 METODA POROVNÁNÍ POMĚREM ........................................................................... 20 METODA GRADIENTNÍ .......................................................................................... 20 3.2 3.3 METODA POROVNÁVÁNÍ PODLE POLOHY .............................................................. 20 3.4 KNIHOVNA AA-LIB .............................................................................................. 21 3.5 PODOBNOST S TECHNIKAMI OCR ......................................................................... 21 4 PROGRAMOVACÍ JAZYK C++ S WXWIDGETS KNIHOVNOU .................. 22 OBJEKTOVÉ VLASTNOSTI JAZYKA C++................................................................. 22 4.1 4.1.1 Důležité pojmy v OOP ................................................................................. 22 4.1.2 Knihovna STL .............................................................................................. 23 4.1.2.1 Třída
..................................................................................... 24 4.2 KNIHOVNA PRO PRÁCI GUI .................................................................................. 24 4.2.1 Důležité pojmy v rozhraní GUI.................................................................... 25 Objekt wxBitmap ......................................................................................... 25 4.2.2 II PRAKTICKÁ ČÁST ...................................................................................................... 26 5 ALGORITMY ROZPOZNÁVÁNÍ......................................................................... 27 5.1 ŠUMOVÝ VZOREK ................................................................................................. 27 5.1.1 Předzpracování ............................................................................................. 27
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
8
5.2 POROVNÁNÍ POMĚREM ......................................................................................... 27 5.3 VLASTNÍ ALGORITMUS ROZPOZNÁVÁNÍ................................................................ 28 5.4 ALGORITMUS GRADIENTNÍ METODY ..................................................................... 29 5.5 HOPFIELDOVA NEURONOVÁ SÍŤ ............................................................................ 31 5.6 POROVNÁNÍ POPSANÝCH METOD .......................................................................... 31 6 FUNKCE APLIKACE ............................................................................................. 37 6.1 OTEVŘENÍ A ÚPRAVA OBRÁZKU ........................................................................... 37 6.2 NASTAVENÍ ASCII ARTU ...................................................................................... 38 6.3 PŘEVOD ................................................................................................................ 39 6.3.1 Vytvoření šablony abecedy .......................................................................... 39 6.3.2 Běh na pozadí aplikace................................................................................. 40 6.3.3 Tlačítko převodu .......................................................................................... 40 6.4 DRUHY VÝSTUPŮ .................................................................................................. 40 6.4.1 Výstup do textového pole a do souboru typu txt.......................................... 40 6.5 MODEL TŘÍD ......................................................................................................... 41 ROZLOŽENÍ GRAFICKÉHO UŽIVATELSKÉHO ROZHRANÍ ......................................... 42 6.6 6.7 MOŽNOSTI ROZŠÍŘENÍ .......................................................................................... 42 ZÁVĚR ............................................................................................................................... 44 CONCLUSION .................................................................................................................. 45 SEZNAM POUŽITÉ LITERATURY.............................................................................. 46 SEZNAM POUŽITÝCH SYMBOLŮ A ZKRATEK ..................................................... 48 SEZNAM OBRÁZKŮ ....................................................................................................... 49 SEZNAM TABULEK ........................................................................................................ 50 SEZNAM PŘÍLOH............................................................................................................ 51
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
9
ÚVOD Paralelně se zabývám informačními technologiemi a výtvarným uměním. Z tohoto důvodu se pokusím tyto dva zajímavé obory propojit. Zvolena byla tvorba aplikace pro automatické vykreslování Ascii symbolů. Jejich výslednou formu můžeme považovat za specifické počítačové umění. Oproti tradičním kresbám a malbám, které se vyvíjely od počátku lidské civilizace, je počítačová grafika relativně mladá. Její vývoj je ale neuvěřitelně rychlý, protože tvoří podobor informatiky. Důsledkem rychlého růstu informačních technologií je potřeba ve větší míře zpracovávat komplexnější a komplikovanější vizualizace. Jejich realizace se uskutečňuje pomocí prostředků různých programovacích jazyků a stojí na základech matematického vědního oboru. Grafika je aplikována v mnoha informačních systémech ve formách 2D nebo 3D a má svá specifika. Zaměřuje se na animace, videa, hry, digitální fotografie, webdesign, mobilní a telekomunikační technologie a také na další využití softwaru v průmyslu. Cílem této diplomové práce je návrh a vytvoření programu, který bude řešit převod libovolného bitmapového obrázku na Ascii znaky tak, aby se výsledek co nejblíže podobal originálu. Práce přibližuje oblasti související s počítačovou grafikou a s typem písma. Ty jsou realizovány programovacím jazykem C++ pro generování Ascii Artu s podporou knihovny wxWidgets. Zmíněny jsou některé principy pro převod z rastru obrazu na text. Každá z rozpoznávacích metod má svůj matematický základ, na němž dál staví. Z časového hlediska je vhodné otestovat a porovnat zpracování v závislosti na velikosti obrazu, a také je pro uživatele nejdůležitější vizuální podoba výsledku. Výstupem je vždy subjektivní dojem, který nelze počítačem ohodnotit. Bude navržen vlastní program, umožňující nastavení dílčích parametrů, které budou operacemi převodu zpracovány pro výslednou grafickou podobu, která bude mít dva typy výstupů. Oba, jednoduchý neproporcionální text i rastrová forma, mohou být použity libovolně k další práci nebo úpravám mimo tento generátor Ascii Artu. Možnosti využití těchto typů jsou profilové vizualizace v diskuzích, herních portálech a sociálních sítích, webdesign internetových stránek, tištěná podoba, loga a vizitky firem, textové dekorace v dokumentacích, texturování 3D modelů a mnohé další.
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
I. TEORETICKÁ ČÁST
10
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
1
11
CO JE ASCII ART
Znaková sada abecedy ASCII a Art, který v překladu znamená umění. Spojením těchto dvou slov získáváme umění, které je vyjádřeno skrze znaky abecedy. Text se stal populárním vizuálním prostředkem, u kterého není kladen důraz na význam písmen jako informačního prostředku, ale jen na jeho schopnost vytvořit vizualizaci. Objekty se přetváří pomocí poměrně omezené sady znaků nebo symbolů. Textová kompozice je rychlejší pro přenos dat a má nesrovnatelně menší kapacitu než grafické formáty.
1.1 Historie Určitou podobnost s Ascii Artem, který se dá považovat za umělecký směr, můžeme hledat již u děl z dob před současnou počítačovou érou, protože písmo jako výtvarný prostředek mělo v oblasti umění už dříve svůj význam. 1.1.1
Podobnosti ve výtvarných směrech před nástupem počítačů
Za první projevy, jež se dosti podobají Ascii Artu, jak ho známe dnes, lze považovat básnické sbírky od francouzského básníka a surrealisty Guillaumea Apollinairea (18801918), který ve svých pracích používal tvary textu jako vizuální básně (Obr. 1). Jeho verše mají však i jazykový význam. Tehdy byly básně sázeny ručně. Tento typografický styl se nazývá kaligramy.
Obr. 1 Autor Guillaume Apollinaire - ukázka vizuální básně
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
12
Uměleckým směrem zabývajícím se malířským pojetím písma od začátku 20. století je tzv. lettrismus.
Za základní jednotku jeho výtvarného projevu jsou považovány tvary
jednotlivých liter seskupené do různorodých obrazců. Je to směr, který používá písmové tvary jako výtvarný prostředek. S příchodem technických vynálezů získává Ascii jako umění své místo - a to již od doby používání psacích strojů začátkem 20. století až po nástup informačních technologií. Uživatelé prvních psacích strojů zjistili, že mohou
tohoto
nového
přístroje
použít
nejen
k rychlejšímu psaní textu, ale i za účelem kreslení. Prvními známými tvůrci kreslených děl na psacích strojích byli stenografové (Obr. 2). Tvorba čehokoliv na psacím stroji vylučovala zříci se možnosti dodatečných úprav. Autor musel mít dokonalou představu o svém budoucím díle a celý proces tvorby musel být strojově přesný z důvodu absence klávesy Backspace. [17] 1.1.2
Obr. 2 Typewriter art
Informační věk
S příchodem rané počítačové éry v době 8-bitové a 16-bitové grafiky a zobrazovacích zařízení byl místo rastrové grafiky používán prostý text. Ten se zobrazoval mnohem snadněji. Přenos textového obrázku je mnohem jednodušší. Ascii Art se používal a používá stále ve zdrojových kódech např. pro zobrazení loga firmy nebo produktu (Obr. 3).
Obr. 3 Grafika v programu M602 (kolem r. 1990) V době konzolových operačních systémů se stala grafika jako text hojně používanou např. pro vyobrazení tabulek nebo diagramů. Využití u negrafických počítačových terminálů je běžnou záležitostí.
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
13
1.1.2.1 Znaková sada ASCII Ascii Art byl pojmenován podle používané zkratky ASCII, standardního kódu pro výměnu informací. Americká asociace standardů (ASA, později ANSI) nejprve publikovala standard, který byl definován v roce 1967 a aktualizován v roce 1986. Jedná se o 7-bitový kód, který má maximálně 128 znaků pro číselné vyjádření symbolu. Pro tisk, neboli zobrazení, je možné použít pouze znaky v rozmezí od 32 po 126 (začínající znakem 32 = mezera) (Tab. 1). Tab. 1 Vybraná část ASCII tabulky tištěných znaků
Další rozšíření bylo vytvořeno americkým standardizačním institutem (ANSI) doplněním o nové symboly pro 256 znaků s 8-bitovým kódem (Obr. 4). Rozšířená znaková sada má několik variant podle místa svého používání, např.: Windows-1250, ISO 8859-2 aj. Grafický prostředek je označován jako Ansi Art. Tato forma umění vznikla jako grafika
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
14
používaná v konzolových operačních systémech MS-DOS, UNIX a systémech BBS (Bulletin Board System, který umožňuje uživatelům vzdáleně se připojit a přihlásit do systému pomocí terminálu). Ansii Art se stal poměrně populárním v počátcích internetu.
Obr. 4 Rozšířená znaková sada
1.2 Využití Ascii Art najdeme všude tam, kde je nějaké zobrazovací zařízení umožňující výpis textu. 1.2.1
Emotikony a dekorace
Na konci 21. století se používají kombinace několika znaků pro vyjádření emocí (slangově smajlík). Dá se to považovat za nejjednodušší vyjádření Ascii Artu. Pro složitější obrázky je využito více řádků, kterými uživatelé zakončují textové zprávy (emaily, komunikační klienti, internetové diskuse) nebo vytvářejí jedinečné typografie. Ascii grafika může mít dále dekorativní a ohraňující charakter například u textových dokumentací. 1.2.2
Generované obrázky a animace
Další oblastí, ve které se dá toto umění aplikovat, je převod rastrového obrázku na formu hustého textu obdélníkové podoby. Jeho generováním se zabývá praktická část této diplomové práce. Náročnější formy Ascii Artu je možno najít v efektní animaci nebo-li v pohyblivé grafice. V textovém režimu může být nejen jednoduché video, ale také např. zobrazení webové kamery. Příkladem extrémnější ukázky, co všechno lze, jsou počítačové hry v textové podobě. Nejznámějším pokusem je hra Quake. Nutno dodat, že posloupnost textu nemá informační hodnotu ve znacích, které v podstatě slouží jako textura. Font by měl být neproporcionální.
1.3 Tvorba Nejčastěji se dá Ascii Art vytvořit v klasických textových editorech nebo využitím specifického programu pro převod. Existuje pár takových utilit a programů. Není jich však mnoho a jsou většinou za úhradu. Konkrétní programy, které si lze vyzkoušet jsou: ASCII Art Maker, ASCII Art Studio (pro vektorovou kresbu) a ASCII Art Generátor. Převody je možno aplikovat také na webech, např. na adrese http://www.glassgiant.com/ascii/.
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
2
15
PŘEDZPRACOVÁNÍ OBRAZU A TEXTU
Aby bylo vůbec možné nějaký obraz převést automaticky do textové podoby, musí se čtenář seznámit s nejdůležitějšími oblastmi počítačové grafiky. Obrazová i textová data musí mít stejnou formu.
2.1 Obraz Zpracování a úprava obrazů jsou nezbytné pro další pochopení problematiky. Úpravy obrazů mají za úkol zvýraznit nejrůznější informace, které může bitmapa poskytnout. Obraz uložený v počítači je chápán jako matice typu šířka x výška nezáporných celých čísel. Nejnižší hodnota 0 odpovídá nejvyšší intenzitě barvy, tedy černé, a nejvyšší hodnota 16 777 215 odpovídá barvě bílé. Základní jednotkou dvojrozměrného obrazu je pixel. Grafická data se dělí na dva druhy, a to vektorová a bitmapová (rastrová). Vektorová data souvisí s tradičním slovem ve smyslu matematického vektoru vyjádřeného orientovanou úsečkou, která má počáteční a koncový bod. Počítačová vektorová grafika je soubor obsahující informace o objektech složených z křivek nebo z jednoduchých těles. V rámci Ascii Artu má ale smysl zabývat se jen bitmapovými daty. Tato data jsou uložena ve 2D matici, jejíž každý prvek znamená jeden bod obrazu. [6] 2.1.1
Prahování
V době, kdy počítačová grafika a výkon byly značně limitovány, jednoduché obrazce obsahovaly pouze binární posloupnost, při které barvy nabývaly dvouhodnotové stupně šedi - tedy bílé nebo černé. Monochromatická reprezentace obrazu je totiž velmi praktická z hlediska matematických operací. I přes obrovské technické pokroky se tento systém stal používaným hlavně pro svou rychlost. Prahování se stalo dílčím postupem pro další mnohem rozsáhlejší zpracování. Tato metoda je založena na porovnání obrazových pixelů s hodnotou prahu. Prahování je transformace vstupního obrazu f na výstupní (segmentovaný) binární obraz podle vztahu: [2] g(i, j) = �
1 pro f(i, j) ≥ T, 0 pro f(i, j) < 𝑇𝑇,
kde T je předem určená konstanta nazývaná práh, g(i, j) je rovno 1 pro obrazové elementy náležející po segmentaci objektům a je rovno 0 pro pixely náležející k pozadí. Prahování
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
16
testujte postupně všechny obrazové elementy (i, j) obrazu f. Správná volba prahu je pro úspěšný výsledek prahování zásadní. Hodnotu prahu lze určovat interaktivně. [2] Z hlediska generování Ascii Artu je důležité oddělit objekt od pozadí. 2.1.2
Jas a kontrast
Úprava jasu se řídí tímto pravidlem: Čím vyšší je hodnota pixelu, tím světlejší je barva. Budeme-li tedy jeho hodnotu zvyšovat, obraz zesvětlá, a když snižovat, ztmavne. Jas se upravuje na principu součtu s libovolným zadaným číslem. U úpravy kontrastu je postup podobný s tím, že jsou větší rozdíly mezi jednotlivými pixely a ty nejjednodušeji zvýšíme násobením. Změny kontrastu jsou většinou doprovázeny úpravami jasu. [6] 2.1.3
Barevnost
Rozlišujeme dvě základní skupiny barevných systémů: aditivní a subtraktivní. Aditivní míchání barev funguje na principu, kdy se jednotlivé složky barev sčítají. Snadno si to můžeme představit jako míchání barevných světel reflektorů. Jedná se o rozklad bílého světla na barevné složky. Při subtraktivním míchání barev se jednotlivé složky odčítají. Pro představu jde o nanášení pigmentu (např. temperových barev, inkoustových tiskáren, …). Přítomnost všech barev v plné intenzitě dá barvu černou. U obou těchto systémů se většinou jedná o tři barevné složky (Obr. 5). [6]
Obr. 5 Míchání barev systému aditivního (vlevo) a subtraktivního (vpravo) Nejrozšířenější barevné modely jsou RGB (aditivní), CMY (subtraktivní) a HSV. V praktické části pracují všechny algoritmy pouze se složkami RGB. Tento model má svá specifika, která budou popsána podrobněji.
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
17
2.1.3.1 Model RGB Barevný model kóduje barvu každého bodu obrazu pomocí tří čísel reprezentujících intenzitu složky červeného (Red), zeleného (Green) a modrého (Blue) světla, jedná se o tzv. kanály. Intenzita každého z těchto kanálů se udává binárně, hexadecimálně nebo dekadicky podle barevné hloubky (Tab. 2). Nejčastěji se používá 8 bitů na každý jednotlivý RGB kanál (pro jeden pixel tedy potřebuje 8*3=24 bitů), což umožňuje regulovat intenzitu každé barvy v intervalu od 0 do 255. Označuje se také jako 24-bitová barva True Color. Rozšířením RGBA na 32 bitů vzniká k dispozici další kanál (Alpha) pro průhlednou hodnotu. Tab. 2 Základní barvy a jejich kódy v dekadické a hexadecimální soustavě Název barvy Černá Červená Zelená Modrá Žlutá Purpurová Azurová Bílá Středně šedá
Kanál B
Kanál G
Kanál B
Dec Hex Dec Hex Dec Hex 0 255 0 0 255 255 0 255 128
00 FF 00 00 FF FF 00 FF 80
0 0 255 0 255 0 255 255 128
00 00 FF 00 FF 00 FF FF 80
0 0 0 255 0 255 255 255 128
00 00 00 FF 00 FF FF FF 80
Barva v prostředí počítače se nejčastěji zapisuje v hexadecimálním tvaru se symbolem # na začátku RGB kódu, např. #FFFF00 (žlutá). 2.1.3.2 Stupně šedi Odstín šedých, tedy přechod intenzity světla černé do bílé, je dán vždy zastoupením všech tří složek se stejnou hodnotou. Pokud chceme provést převod z nějaké barvy tvaru RGB na tvar YYY, bylo by logicky nejjednoznačnější vypočítat aritmetický průměr ze složek: 𝑌𝑌 = (𝑅𝑅 + 𝐺𝐺 + 𝐵𝐵) / 3,
avšak lidské oko je nejvíce citlivé na zelenou barvu a nejméně na modrou, a proto jsou barevné složky zvýhodněny/potlačeny poměrovým zastoupením. Standardně se používá vzorec [3]: 𝑌𝑌 = 0,299 ∙ 𝑅𝑅 + 0,587 ∙ 𝐺𝐺 + 0,114 ∙ 𝐵𝐵,
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
18
kde Y je jasová složka, má rozsah od 0 do 255 (stejně jako model RGB) a je označována jako stupeň šedi (grayscale). Počítá se podle tohoto vzorce pro každý pixel zvlášť. 2.1.3.3 Negativ Inverzi neboli negativ barevných složek RGB obrazu nahradíme pixelem opačné barvy. Matematicky vyjádřeno 255 – Red (červená), 255 – Green (zelená) a 255 – Blue (modrá), kde 255 je maximální intenzita.
2.2 Text Ascii grafika většinou používá neproporcionální styl písma (monospace). Charakteristické vlastnosti takového písma jsou: •
Šířka znaku je u všech písmen stejná.
•
Zahrnuje v sobě i prázdný prostor před znakem a za znakem. Do stejného prostoru fontu se vejde např. velké písmeno M o stejné šířce jako písmeno I.
Zástupcem monospace písma jsou tyto fonty: Courier, Courier New, Consolas, Lucina Konsole, Monaco apod. Pro názornost je v následujícím textu popsán Courier New. [10] 2.2.1
Courier New
Historie tohoto písma sahá do roku 1950, kdy bylo navrženo pro firmu IBM a po dobu 30ti let bylo užíváno ke psaní na psacích strojích. Každý znak má fixní rozteč písma, a proto není třeba kerningu (česky vyrovnávání, upravující mezery mezi dvojicemi písmen). Postupem času získal font několik variant: Courier New, Courier New Bold (tučný styl), Courier New Italic (kurzíva styl), Courier New Bold Italic, Courier New CE (pro české znaky) a další. Obsahuje více než 3 100 symbolů. [10]
Obr. 6 Ukázka sazby textu Courier New CE
UTB ve Zlíně, Fakulta aplikované informatiky, 2011 2.2.2
19
Objekt wxFont
V aplikaci generující Ascii Art je využívána pro práci s textem třída wxFont (z knihovny wxWidgets viz kapitola 4), která umí pracovat právě i s Courierem New. Jednotlivé znaky písmen se nejprve převedou pomocí kontextu zařízení na bitmapu. Takto přichystaný rastr je operací prahováním transformován na matici binární posloupnosti. Konstruktor objektu wxFont s jeho argumenty (pojem bude objasněn v kapitole 4.1.1) je definován takto: [11] 1 wxFont(int pointSize, wxFontFamily family, int style, wxFontWeight weight, const bool underline = false, const wxString& faceName = "", wxFontEncoding encoding = wxFONTENCODING_DEFAULT)
Jednotlivé parametry konstruktoru mají následující význam: •
pointSize – velikost písma v bodech.
•
family – rodina znakové sady.
•
style – zde je možné zadat jeden z následujících stylů definovaných ve wxWidgets: o wxFONTSTYLE_NORMAL (normální), o wxFONTSTYLE_SLANT (sklon), o wxFONTSTYLE_ITALIC (kurzíva).
•
weight – šířka znaku. Je možné zadat jednu z těchto možností: o wxFONTWEIGHT_NORMAL (normální), o wxFONTWEIGHT_LIGHT (úzké písmo), o wxFONTWEIGHT_BOLD (tučné písmo).
•
underline – podtržení písma.
•
faceName – název zadávaného fontu.
•
encoding – druh kódování písma.
Konkrétní volání konstruktoru v aplikaci vypadá takto: 2 wxFont font(16, wxDEFAULT, wxNORMAL, wxNORMAL, FALSE, wxT("Courier New"));
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
3
20
METODY ROZPOZNÁVÁNÍ
Před rozpoznáváním musí být obraz nejprve separován na menší části (vzorky), které jsou podrobeny rozpoznávacím algoritmům. Detekování jednotlivých znaků se děje pro každý vzorek zvlášť nezávisle a není tedy ovlivněno předchozím výstupem. Mezi hlavní nároky kladené na tvorbu patří zachování poměru mezi časem potřebným pro generování a kvalitou dosažených výsledků. Efektivita je závislá na velikosti obrazu, potažmo na jeho rozlišení. Dále závisí na zachování stejné kvality podle časové náročnosti algoritmu, který je využíván.
3.1 Metoda porovnání poměrem Každý bod v oblasti je srovnán s množinou znaků v šabloně, pokud se pixely shodují, zvyšuje se hodnota čítače. Každý znak má svou míru podobnosti s porovnávaným vzorkem. Algoritmus v podstatě hledá maximální shodu. Tento postup je popsán v praktické části této práce, kde tuto metodu dále rozšiřuje navržený rozpoznávací algoritmus, nazvaný procentuální. Zpracování je časově náročnější, protože se prochází matematickými operacemi bod po bodu a navíc v některých méně kontrastních obrazcích není natolik přesný. [13]
3.2 Metoda gradientní Algoritmus používá „šedý gradient“ definovaný tím, že všechny znaky jsou seřazeny podle závislosti svého jasu. To znamená, že ve vzorku se sečte obsazenost černých bodů a na základě toho se porovná s příslušným znakem o stejné obsazenosti černých pixelů. Postup může být podobný i pro počítání odstínů šedi. Princip metody spočívá v tom, že stanoví počet bodů v popředí. Algoritmus prochází vzorek a v případě, že se jedná o popředí znaku, inkrementuje čítač o jedna. Tato metoda je velmi rychlá z hlediska časové náročnosti algoritmu, ale nebere v úvahu tvar ani polohu znaku. [4]
3.3 Metoda porovnávání podle polohy Algoritmus využívá rozdělení celé oblasti znaků do zón. Každá ze zón má jinou váhu podle číselného ohodnocení. Každá zóna tak obsahuje vlastní smyčku. [13]
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
21
3.4 Knihovna AA-lib Kolem roku 2000 vznikla knihovna AA-lib, která poskytuje grafické funkce. Kreslit můžeme tak jako u jiných grafických knihoven s tím rozdílem, že výsledek je speciálními algoritmy renderován na výstupní matici ASCII znaků. Zapotřebí je znalost klasického jazyka C, neboť se s knihovnou pracuje ve zdrojovém kódu a musí se kompilovat příkazem uvedeným od autora. Knihovna AA-lib pracuje na bázi tzv. grafických kontextů (virtuální malířské plátno). Umí zobrazovat grafiku přímo na terminál nebo ji uložit do textového souboru. AA-lib nepracuje s barvami, veškeré kreslení se odehrává v odstínech šedi. Na základě speciálních funkcí dokáže tvořit vektorové obrazce, např. kružnice (Obr. 7). [1]
Obr. 7 Kružnice vytvořená AA-lib knihovnou
3.5 Podobnost s technikami OCR Rozpoznávání textu v obraze tzv. Optical Character Recognition technologiích je speciálním případem vektorizace (převod dat z rastrového formátu do formátu vektorového). Identifikuje různé tvary v obraze a porovnává je s předlohou. Velký rozdíl od ASCII grafiky je v tom, že program spolupracuje se slovníkem a umí se i učit. V současné době se OCR zaměřuje i na ručně psaný text, avšak s problémy - zejména u odstraňování pozadí, korekce sklonu psaní a velikosti písma. Algoritmus nezpracovává celou bitmapu, ale jen část, kde se shlukuje text. Postupy bývají založeny na metodách neuronových sítí, např. Hopfieldova síť. Ta se naučí předložené vzory a poté rozpozná vzory s dostatečnou hammingovou vzdáleností od originálu. Používá se k převodu skenovaných dokumentů na text, rozpoznávání ručně psaného textu na tabletu či mobilním telefonu. [15]
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
4
22
PROGRAMOVACÍ JAZYK C++ S WXWIDGETS KNIHOVNOU
Realizace všech navržených algoritmů je aplikována v programovacím jazyce C++ s využitím wxWidgets. Tento tradiční jazyk byl zvolen pro jeho rychlost, dostupnost a objektové vlastnosti. V této kapitole jsou popsány jeho základní vlastnosti a to především ty, které přímo používám ve svém programu Ascii grafiky, neboť úplný popis jazyka C++ i s knihovnou by vydal na několik dalších prací. Vývojářům umožňuje wxWidgets vytvářet aplikace pro operační systémy Windows, Linux a Mac OS X na 32-bitové a 64-bitové architektury. Nemusí spolupracovat jen s C++, ale má vazby i na populární jazyky Python nebo Perl. Knihovna je volně šiřitelná (open-source) a používá na každé platformě nativní API. [11] [16]
4.1 Objektové vlastnosti jazyka C++ Objektově orientované programování (OOP) má své základní pojmy a vlastnosti, které jsou zde uvedeny jako přehled. Základem OOP je objekt, který se definuje jako samostatný, a dále nedělitelná entita, která zapouzdřuje data a obsahuje zároveň metody, které jsou určené pro práci s těmito daty. Představa objektu je prakticky libovolná věc z reálného světa, např.: auto, žárovka, hodiny aj., která má své atributy (vlastnosti) jako je datový typ, materiál, velikost apod. Každý objekt má své funkce (metody) pro okolí, které manipulují s atributy uvnitř objektu, např.: jeď, zapni, vypni a další. Každá metoda může mít své předávané parametry (proměnné). Celá podstata OOP tkví v tom, že se objekty vytvářejí a mají vztahy mezi sebou. Šablona objektů se nazývá třída (class). U vytvoření třídy se používá klíčové slovo instance třídy. Třída může mít několik instancí. [8] [9] [14] 4.1.1
Důležité pojmy v OOP
Principy OOP přináší následující vybrané pojmy: [8] [14] •
Zapouzdření (encapsulation) – spojení dat a metod určených pro manipulaci s těmito daty. Struktura uvnitř třídy musí být skryta před okolím. Z vnějšku k datům přistupujeme pomocí tzv. rozhraní, čímž je zaručeno zabezpečení. Data a metody uvnitř třídy mívají přívlastek členská, aby se odlišily od ostatních vnějších.
•
Dědičnost (inheritance) – umožňuje vytvářet nové třídy z tříd existujících. Základní třída (předek, rodičovská nebo se také používá označení bázová) a od ní odvozená (potomek, dceřiná) tvoří hierarchii tříd. Existují tři typy dědičnosti veřejná (public), chráněná (protected) a soukromá (priváte). Nejběžnější formou je
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
23
veřejná, která odvozuje atributy a metody od základní třídy. Pokud je v bázové třídě nějaká zapouzdřená soukromá položka, tak není potomkovi přístupná. Chráněná je taková, která má svou platnost i v potomkovi, ale není přístupná zvenčí. Dědičnost může být i vícenásobná. •
Mnohotvárnost (polymorphism) – jinak také polymorfismus (řecké slovo, v překladu znamenající mnoho tváří), umožňuje společné pojmenování názvů položek v hierarchii tříd. Pokud budeme mít více stejných metod se stejnými názvy, při volání se provede vždy i odpovídající instance příslušné třídy za běhu programu. Proto se před názvem metody uvádí klíčové slovo virtual, tedy metoda virtuální.
Vlastnosti používaných pojmů: •
Konstruktor – je to metoda, která se inicializuje v okamžiku tvorby instance. Jako každá jiná funkce může mít své implicitní hodnoty argumentů. Název konstruktoru odpovídá názvu třídy.
•
Destruktor - speciální metoda (s prefixem se symbolem ~), která je volána pří zániku instance.
Při dynamickém vytvoření instance třídy jsou spjaty operátory new (vytvoření) a delete (zrušení). Při práci s vytvořenou třídou můžeme použít takové metody, které jsou veřejného typu (public). [14] 4.1.2
Knihovna STL
Předností OOP je znovupoužitelnost již vytvořeného kódu. Předem napsaným vzorům šablon (template) se rovněž říká generické či parametrické typy. Nejběžnější a nejpopulárnější šablonou tříd je STL. Zkratka vychází z anglického označení Standard Template Library. Byla vytvořena počátkem 90. let 20. století v laboratořích firmy Hewlett Packard. Součástí STL jsou: [8] [14] •
Algoritmy – šablony obyčejných funkcí, pracujících s daty.
•
Kontejnery – datového charakteru, schopny uchovávat v sobě data.
•
Iterátory – abstrakce přístupu do kontejnerů, díky nimž mohou algoritmy pracovat.
Výčet STL kontejnerů, jež jsou zahrnuty (include) v deklaraci zdrojového kódu: dynamická pole , fronty , seznamy <list>, zásobníky <stack>, asociativní pole <map>, stromy <set> a další.
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
24
4.1.2.1 Třída U generování Ascii Artu v praktické části se pracuje s bitovou posloupností reprezentovanou bílými a černými body. Proto se hodí v této konkrétní situaci použít datový kontejner dynamického pole i pro dvojrozměrnou matici obrazu. Ukázka konkrétního zdrojového kódu: 3 vector< vector > maticeAbecedy; // kde vnořený “vector“ je znak o velikosti N x N px
STL
vector
má
své
funkce
a
vlastnosti,
které
umožňují
manipulovat
se
zapouzdřenými daty. Popis vybraných metod: [12] [14] •
Operátor [] – indexový přístup k elementům vectoru.
•
Operátor = – kopírování přiřazeného obsahu do vectoru.
•
Metoda size() – vrací velikost dynamického pole.
•
Metoda resize() – mění velikost vectorů.
•
Metoda empty() – testuje, zda-li je vector prázdný.
•
Metoda push_back() – přidává element na konec.
•
Metoda pop_back() – odstraňuje poslední prvek.
•
Metoda clear() – čistí veškerý obsah v datovém kontejneru.
•
Metoda insert() – vkládá prvek na pozici, určenou argumentem funkce.
•
Metoda erase() – odstraňuje prvek z pozice.
•
Iterátor begin() – vrací referenci na první element v kontejneru.
•
Iterátor end() – vrací referenci na poslední element v kontejneru.
4.2 Knihovna pro práci GUI Grafické uživatelské rozhraní (Graphical User Interface) slouží k vydávání příkazů pomocí zařízení jako je např. myš, která aktivuje vizuální obraz na ploše. GUI představuje informace a akce k dispozici uživateli přes grafické ikony, obrázky a vizuální indikátory. Nástroj v této práci je použit k vzhledu a emulován nativně knihovnou wxWidgets. Tento toolkit je určen pro psaní desktopových nebo mobilních aplikací. Knihovna obsahuje velké množství tříd a metod pro programátora k použití a přizpůsobení. Aplikace typicky zobrazuje okna standardních ovládacích prvků, případně specifické kresby a grafiku. Reaguje na vstup z hardwarových zařízení (myš, klávesnice nebo jiné zdroje). Může také komunikovat s jinými procesy nebo programy. Jeho třídy umožňují práci se soubory a
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
25
proudy, s více vlákny, s komunikací mezi procesy, s přístupem k databázi a mnoho dalších funkcí. Každé okno je reprezentováno jako C++ objekt. Spojuje tak OOP s GUI Frameworkem. Již v dřívějším textu si lze všimnout, že všechny programátorské názvy, související s wxWidgets, mají jako prefix písmena “wx“ a často používané konstanty jsou označovány velkými písmeny. 4.2.1
Důležité pojmy v rozhraní GUI
Veškeré vyobrazení a interakce s uživatelem pro generování Ascii Artu je tvořeno podporou Frameworku wxWidgets, a proto se přísluší uvést pár základních pojmů:[11][16] •
Okno aplikace – je prvek, který tvoří hlavní rám a může mít volitelné záhlaví s vazbou na tlačítko pro zavření okna. Ve wxWidgets je definován objekt pro okno jako wxFrame, který může zahrnovat wxMenuBar (hlavní menu), wxToolBar (nástrojový panel s ikonami) a wxStatusBar (stavový řádek).
•
Zpracování událostí – počítačové události (events) jsou akce, které obvykle zahajují části kódu v rámci programu. Událost se typicky vyvolá uživatelem, např. kliknutím na tlačítko, stisknutím klávesy aj. Akce jsou deklarovány buď jako statické tabulky nebo jako dynamické události. Jednotlivé rutiny uvnitř implementované události jsou de facto specifické metody.
•
Dialogová okna – jsou taková, která zobrazují informace nebo získávají data od uživatelů. Pokud je to možné, tak se u wxWidgets používají nativní dialogy, které jsou využity v každém okenním systému různých platforem. Jedná se o wxDialog, wxMessageBox (informační dialog se zprávou), wxFileDialog (pro výběr souborů), wxColourDialog (výběr barvy z palety) aj.
•
Vlákna – označují více běhů zároveň, tzv. multitasking. Každý proces může vytvořit mnoho vláken. Pokud chceme používat vlákna, měli bychom napsat třídu, která dědí z wxThread a implementovat virtuální metodu Entry, která běh provádí.
4.2.2
Objekt wxBitmap
Za zmínku ještě stojí uvést objekt wxBitmap, který reprezentuje bitmapu pro podporu kreslení. Je implementován pomocí bitmap nezávislých na zařízení. Každá wxBitmap obsahuje pixmapový objekt z GDK, případně X11. Lze ji konvertovat na wxImage a naopak.
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
II. PRAKTICKÁ ČÁST
26
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
5
27
ALGORITMY ROZPOZNÁVÁNÍ
V této diplomové práci jsou podrobně popisovány tři matematické metody pro detekci textu z obrazu a to - porovnání poměrem, vlastní algoritmus rozpoznávání (procentuální) a algoritmus gradientní metody. Jednotlivé algoritmy jsou následně porovnány mezi sebou na konkrétních obrázcích. Všechny jsou naprogramovány v jazyce C++. Napsal jsem specializovanou třídu pro všechny operace rozpoznávání. Uživatel si zvolí sadu znaků v nějakém intervalu. Ty jsou reprezentovány jako číselné ASCII kódy. Například malá písmenka od a do z jsou interval od 97 po 122. Algoritmus pracuje jen s indexy těchto čísel a u vykreslení se nahradí příslušným znakem do textového pole nebo rastru. Aby bylo možné zmínit ukázkové příklady, zavedl jsem si pojem šumový vzorek.
5.1 Šumový vzorek Celý načtený obrázek je rozdělen na vzorky, odpovídající jednomu písmenu o velikosti 14x24 px, a to i s mezerou na okraji. Vzorky jsou uloženy opět v 2D matici. Každý vzorek je částí obrazu, tedy je chápán dále jako šumový binární vektor s náhodnými hodnotami. Z barevné bitmapy se vyseparují složky RGB. Vypočítá se odstín šedi podle vzorce z kapitoly 2.1.3.2. Tato hodnota se porovná s průměrnou hodnotou prahu. Pokud přesáhne průměrnou hodnotu, je přiřazena jednička, jinak nula. Vzniká binární vzorek šumu podle principu prahování. Obraz je tedy převeden jen do černobílého monochromatického rastru. 5.1.1
Předzpracování
Šumové vzorky, které zabírají celou matici (černý obdélníček) jedničkami nebo naopak nulami (bílý obdélníček) se nemusí zbytečně počítat, ale nahradí se buď přímo předdefinovaným prázdným a plným znakem nebo zadaným uživatelem. Jako výchozí je prázdný znak nastaven na “_“ a plný znak na “@“.
5.2 Porovnání poměrem Je nejjednodušší typem, co do pochopení a složitosti postupu. Je však nejméně přesný, jak se ukáže. Na matematickém příkladu je demonstrováno, jak probíhá celý proces. Z abecedy jsou vybrány vzorky (matice) T a L, v nichž jedničky odpovídají tvaru daného písmene:
UTB ve Zlíně, Fakulta aplikované informatiky, 2011 1 𝑇𝑇 = �0 0
1 1 1 1 0� ; 𝐿𝐿 = �1 1 0 1
Šumová matice n má náhodný charakter:
0 𝑛𝑛 = �0 0
Nejprve se sečte shoda mezi vzorky a šumem:
28 0 0 0 0� 1 1
1 1 1 0� 1 0
Pro T = 8 a pro L = 2. Dále se odečte od shody neshoda (doplněk shody): Pro T = 8 - (9-8) = 7. Pro L = 2 - (9-2) = -5. Výsledná podmínka porovnává maxima, tedy 7 > -5, a proto písmeno T bude výstupem.
5.3 Vlastní algoritmus rozpoznávání Cílem této práce bylo vytvořit i vlastní detekční algoritmus. Navrhl jsem postup, jakým bude šumový vzorek nahrazen znakem z abecedy. Postup je logický, jde o jakési procentuální zastoupení shod a neshod mezi šablonami znaků a šumového vzorku. Příklad opět s písmeny T a L:
Šumová matice n:
1 𝑇𝑇 = �0 0
1 1 1 1 0� ; 𝐿𝐿 = �1 1 0 1 0 𝑛𝑛 = �0 0
0 0 0 0� 1 1
1 1 1 0� 1 0
Nejprve si algoritmus spočítá obsazenost vektoru: Součet jedniček pro T = 5. Součet jedniček pro L = 5. Součet jedniček pro n = 4.
V dalším kroku sečte shodu jedniček mezi znakem a šumem:
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
29
Shoda mezi T a n = 4. Shoda mezi L a n = 1. Podobně se sečtou neshody (na místech nul u znaku jsou u šumu jedničky): Neshoda mezi T a n = 0. Neshoda mezi L a n = 3. Následně se shoda vydělí součtem jedniček v daném vektoru: Podíl shody pro T = 4/5 = 0,8. Podíl shody pro L = 1/5 = 0,2. V závěru se vypočítá procentuální neshoda (od sta procent se odečte podíl neshody a součtu jedniček v šumu): Podíl neshody pro T a n = 1 - 0/4 = 1. Podíl neshody pro L a n = 1 - 3/4 = 0,25. Výsledkem bude násobení shody a neshody (čím větší číslo, tím větší podobnost mezi znakem a šumem): Vynásobíme shodu a neshodu pro T a dostaneme 0,8 * 1 = 80 %. Vynásobíme shodu a neshodu pro L a dostaneme 0,2 * 0,25 = 5 %. V tomto jednoduchém příkladě algoritmus hledá maximum, z vybrané sady znaků zvolí takový, který má největší procentuální zastoupení a tudíž vítězí písmeno T.
5.4 Algoritmus gradientní metody Princip tohoto postupu spočívá v tom, že všechny znaky jsou v podstatě seřazeny podle závislosti svého jasu nebo-li četnosti svých černých bodů. Pro názornost je to nejlépe viditelné na přechodu jasu, tzv. šedém gradientu (Obr. 8).
Obr. 8 Ukázka seřazení písmen podle svého jasu (vygenerováno Ascii Art programem)
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
30
Neboť jde o jednoduchý a nejpoužívanější princip zpracování, je zde přímo uveden i zdrojový kód v C++ s jeho komentářem (označený "//" za zdrojovým řádkem). Implementace metody algoritmusGradientni vlastní třídy RDA a jako parametr má stl::vector šumu (noise) a vrací ASCII kód znaku: 4 int RDA::algoritmusGradientni(vector noise) { 5
int noiseSum_1 = sum_1_V(noise); // suma černých bodů
6
int result = alphabet[0]; // výsledný znak 1. v poli
7
int min = noise.size(); // nastavení minima
8
for(int i = 0; i < alphabet.size(); ++i) { // cyklus projede celou abecedu vzorů:
9
int diff = abs(alphabetSum_1[i]-noiseSum_1); // rozdíl vzorku od šumu
10
if(min>diff) { // hledání minimálního rozdílu
11
result = alphabet[i];
12
min = diff;
13
}
14
}
15
return result; // vrátí výsledný znak (dekadicky)
16 }
Pro úplnost je analogicky uveden matematický příklad i pro tento algoritmus. Z abecedy vybereme symboly T a I:
Šumová matice n:
1 𝑇𝑇 = �0 0
1 1 0 1 0� ; 𝐼𝐼 = �0 1 0 0 0 𝑛𝑛 = �0 0
1 0 1 0� 1 0
0 0 1 0� 1 0
Nejprve se sečtou všechny jedničky (černé body) v maticích: Součet jedniček pro T = 5. Součet jedniček pro I = 3. Součet jedniček pro n = 2. Vypočítá se absolutní hodnota z rozdílů sum jedniček vzorků a sumy jedniček z šumu: Rozdíl mezi T a n = |5-2| = 3.
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
31
Rozdíl mezi I a n = |3-2| = 1. Tato metoda hledá pro změnu minimum, takže 1 < 3, výsledkem je tedy písmeno I. Jak můžeme vidět, tato metoda je triviální na výpočet a jak bude uvedeno níže, je tím pádem i nejrychlejší.
5.5 Hopfieldova neuronová síť Zjistil jsem, že Hopfieldovu síť nelze plně použít, protože má problémy s malou hammingovou vzdáleností. Pro víc jak 6 znaků se předložené vzory začínají plést a algoritmus nepozná ani neporušený originální znak. Navíc pracuje jen se čtvercovou maticí. Nicméně jsem testoval tento postup v prostředí Wolfram Mathematica 7.
5.6 Porovnání popsaných metod Předem bych měl zmínit, že výsledné obrázky nelze srovnat z pohledu, který je lepší nebo horší, protože v umění jako takovém jde především vždy o subjektivní pohled. To, jestli bude podoba výstupního Ascii Artu větší či menší než originál, již závisí na zrnitosti rastru, což je potlačeno obarvenými písmeny a jedinečným nastavením parametrů (jas, kontrast, práh apod.). V prvním testu (Tab. 3) je srovnání rychlostí zpracování při ponechání všech výchozích parametrů, kromě změny "prázdného znaku" na znak mezery (kvůli velké členitosti barevných ploch). Originální načtený obrázek má rozměry 570x800 px (Obr. 9). Jak je vidět z tabulky, gradientní metoda je několikanásobně rychlejší i vizuálně odlišná od ostatních pro tuto předlohu. Tab. 3 Porovnáni rychlostí převodních metod Metoda
Rozlišení [px]
Čas převodu [s]
Gradientní (Obr. 10)
570x800
0,063
Procentuální (Obr. 11) 570x800
0,844
Poměrová (Obr. 12)
0,861
570x800
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
Obr. 9 Originální náhled - autor: Roman Žák,
název:
Podzimní
zátiší,
Obr. 10 Ascii Art metodou gradientní
kresba
pastelkami
Obr. 11 Ascii Art metodou procentuální
Obr. 12 Ascii Art metodou poměrovou
32
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
33
Dalším testem je změna velikosti rastru na čase generování v aplikaci pro zmíněné metody s vizuálními náhledy pro srovnání. Originální načtené obrázky mají rozměry 580x580 px (Obr. 14, Obr. 18, Obr. 22). Gradientní metoda byla nastavena s parametry převodu na práh 30%, všechny dostupné znaky bez použití prázdného a plného znaku, velikost textu zmenšena 2x. Procentuální metoda byla nastavena s parametry převodu na práh 35%, všechny dostupné znaky s použitím prázdného znaku "." (tečka), velikost textu zmenšena 2x. Poměrová metoda byla nastavena s parametry převodu na práh 65%, všechny dostupné znaky bez použití prázdného znaku, velikost textu zmenšena 4x. Tab. 4 Porovnání časů závislých na velikosti Poměr velikosti [%]
Gradientní [s]
Poměrová [s]
Procentuální [s]
50
0,016
0,021
0,023
100
0,031
0,061
0,065
150
0,078
0,129
0,118
200
0,140
0,214
0,176
Časová náročnost algoritmů Čas převodu [s]
0,25 0,2 Gradientní metoda 0,15
Procentuální metoda Poměrová metoda
0,1 0,05 0 50
100
150
200
Velikost obrázku [%]
Obr. 13 Graf rychlostí metod převodu Ascii Artu Z průběhu časů porovnaných metod dle grafu (Obr. 13) vyplývá, že metoda gradientní je jednoznačně nejrychlejší. Naopak metoda poměrová se výrazně zpomaluje s rostoucím rozlišením obrazu z hlediska času výpočtu. Procentuální metoda vychází z poměrové a má podobné vlastnosti, ale konkrétně u ní závisí na zrnitosti rastru.
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
Obr. 14 Originální náhled - autor:
Obr. 15 Ascii Art metodou gradientní,
Roman Žák, název: Čtoucí dívka,
zmenšení na 50%
34
kresba pastelkami
Obr. 16 Ascii Art metodou gradientní
Obr. 17 Ascii Art metodou gradientní, zvětšení na 150%
Metoda gradientní (Obr. 15, Obr. 16, Obr. 17) se ukazuje jako nejvíce přesná z hlediska vizuální podobnosti s originálem. Má vlastnost založenou na intenzitě světla, která je pro lidské oko (resp. mozek, který je úspěšně "oklamán") nejvíce věrohodná.
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
35
Obr. 18 Originální náhled - autor:
Obr.
Roman Žák, název: Prostor, malba
procentuální, zmenšení na 50%
19
Ascii
Art
metodou
temperami
Obr.
20
procentuální
Ascii
Art
metodou
Obr.
21
Ascii
Art
metodou
procentuální, zvětšení na 200%
Na uvedených ukázkách (Obr. 19, Obr. 20, Obr. 21) se potvrzuje nepsané pravidlo, že u abstraktnějších děl není ani tak podstatná nějaká podobnost, ale především jde o osobní pocit z výsledku. Konkrétně v tomto případě zdůrazněním perspektivy vznikne dojem prostoru.
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
Obr. 22 Originální náhled - foto-portrét
36
Obr. 23 Ascii Art metodou poměrovou, zmenšení na 50%
Obr. 24 Ascii Art metodou poměrovou
Obr. 25 Ascii Art metodou poměrovou, zvětšení na 150%
Poměrová metoda (Obr. 23, Obr. 24, Obr. 25) není příliš přesná, proto byla zvolena velikost 4x menší od výchozího 12pt Courier New (tedy písmo odpovídá 3pt).
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
6
37
FUNKCE APLIKACE
Naprogramoval jsem aplikaci pro generování Ascii grafiky v objektovém jazyku C++ s využitím multi-platformní knihovny wxWidgets. Aplikace umožňuje kromě vlastního převodu i jednoduché úpravy obrázků a mnoho nastavitelných parametrů pro převod. Celý projekt aplikace je rozdělen na několik objektových tříd. V následujících podkapitolách je popsána podrobně jejich realizace a funkcionalita. Celkový vzhled GUI rozhraní programu je uveden v příloze P I.
6.1 Otevření a úprava obrázku Prvním krokem všech následných operací je načtení souboru s obrázkem, který si uživatel sám zvolí. Zpracování obrázku je společně zapouzdřeno v nově vytvořené třídě, kterou jsem si pojmenoval příhodným názvem Image. Třídou lze načítat základní nejpoužívanější bitmapové formáty, jako jsou: BMP, GIF, JPG, PCX, PNG, TGA, TIF. Podpora všech těchto formátů je využívána manipulátorem (handler) wxWidgets. Při načítání se obraz konvertuje na separovanou matici vzorků s hodnotami příslušných pixelů. Na každý vzorek je aplikována operace prahování viz kapitola 2.1.1 : 17 vzorek[i] = “hodnota pixelu“<“hodnota prahu“ ? 1 : 0; // ukázka prahování v pseudokódu
Z každého vzorku je uchovávána průměrná barva, která je použita k obarvování jednotlivých znaků na výstupu. Následuje uchovávání rastru do listu (datová struktura wxList), aby se bylo možno vrátit, po budoucích úpravách, k původnímu obrázku. Objekt Image je rozšířen o další implementace, jako jsou úprava jasu a kontrastu, transformace velikosti, převod do negativu a stupně šedi. Uživatel může jednotlivé parametry měnit (Obr. 26).
Obr. 26 Panel pro úpravu obrazu
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
38
Popis algoritmu inverze barev: Cykly projíždí všechny body o souřadnicích [x, y] s velikostí rastru šířka (w) a výška (h), kde r, g a b jsou složky barev modelu RGB: 18 int r,g,b; 19 for(int x=0; x<w; ++x) { 20
for(int y=0; y
21
r = 255 - (int)img->GetRed(x, y);
22
g = 255 - (int)img->GetGreen(x, y);
23
b = 255 - (int)img->GetBlue(x, y);
24
img->SetRGB(x, y, r, g, b); // obarvení pixelu
25
}
26 }
Proběhne-li nějaká z těchto úprav obrázků, je každá operace uložena do historie změn již zmiňovaného listu. Na závěr se příslušný obraz vykreslí do grafického uživatelského panelu wxPanel.
6.2 Nastavení Ascii Artu Uživatel má možnost měnit několik vstupních parametrů, ze kterých vychází jádro rozpoznávacího algoritmu. Volby parametrů jsou navzájem nezávislé, takže je člověk může měnit v libovolném pořadí dle svého vkusu (Obr. 27). Metoda převodu: Uživatel zvolí z kontextové nabídky metodu převodu (gradientní, poměrovou nebo …). Práh: Procentuálně se zvolí hodnota prahu, kterou využívá již popsaná třída Image. Tento parametr je dost citlivý na maximální nebo minimální hodnotu. Uživatel sice slidebarem zvolí procenta, ale algoritmus přepočítá práh na číslo od nuly do 255, kdy výchozích 50 % je hodnota 127. Barevnost:
Tento
checkbox
má
dvouhodnotový
charakter, buď se zohlední vykreslování (vypisování) textu v barvě nebo ne. Každá pozice písmenka odpovídá poloze vzorku v matici obrazu, ze kterého je předpočítaná průměrná barva vzorku (také zmíněno v předchozí kapitole v rutině konverze na submatice obrazu). Obr.
27
Ascii Artu
Panel
nastavení
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
39
Použití prázdného a plného znaku: Obrázek má často svá jasná nebo temná místa (kompletně bílé nebo černé vzorky). Toto zohledňuje zadávání těchto znaků. Může se zadat jen symbol, který je dostupný ze všech znaků v sadě. V případě, že není zadáno nic, algoritmus implicitně pracuje se znakem mezery. Volba barvy pozadí: Jedná se čistě o změnu, která ovlivňuje pouze grafické rozhraní pozadí textového pole a pozadí vykreslování bitmapy s textem. Poměr zmenšení fontu: Číselná hodnota udávající velikost matice vzorku v poměru k základní velikosti písma. Interval má smysl řešit od poměru 1:1 (písmo 12 pt) po 5:1. Znaková sada: Je výběr symbolů, se kterými algoritmus rozpoznávání pracuje jako se šablonou předdefinovaných vzorů. Výchozím stavem je volba "všechny dostupné", což jsou znaky z celé tabulky ASCII (Tab. 1). Dalšími explicitními volbami jsou intervaly: •
od a do z (97 – 122 v ASCII)
•
od A do Z (65 – 90)
•
kombinace malých a velkých písmen od aA do zZ
•
číslice od 0 do 9 (48 - 57)
•
binární číslice 0 a 1
•
speciální znaky ! ? & @ …
•
poslední volba je pro vlastní znaky
6.3 Převod Napsal jsem specializovanou objektovou třídu, která zapouzdřuje všechny zmíněné algoritmy rozpoznávacích metod, matematicky popsaných v kapitole 3. Dále v sobě má třída zakomponováno vytvoření šablon znaků do binární podoby. 6.3.1
Vytvoření šablony abecedy
Nejprve jsou všechny vybrané znaky fontu převedeny na dvourozměrnou matici binární posloupnosti. Celá tato operace je poměrně rychle vykonaná, protože všechny znaky, které uživatel zvolí, jsou pomocí objektu wxFont převedeny na data. Standardně jsem zvolil proporcionální písmo Courier New o velikosti 12pt, což odpovídá 16 px. Mezi výhody Courier New patří to, že má všechny znaky stejně široké a také kolem sebe okraj, který má každé písmeno jiný, takže vzorek odpovídá velikosti 14 x 24 px. Binární data z fontu jsou
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
40
poté uloženy do jednoduchého binárního vektoru (reprezentované std::vector) a všechna tato data jsou použita jako šablona abecedy znaků. 6.3.2
Běh na pozadí aplikace
V době nečinnosti uživatele (když neprovádí žádnou akci v uživatelském rozhraní), může být zpracován převod na pozadí v události OnIdle(). V těle události je spouštěno paralelní vlákno, aby nedošlo k zpomalení aplikace, které provádí tři po sobě jdoucí kroky. Prvním krokem je vlastní rozpoznávací algoritmus, který vrací posloupnost výsledných ASCII znaků do pomocného textového řetězce. Druhým krokem je z tohoto textového řetězce vytvořit bitmapu obrázku. To se prochází znak po znaku a vypisuje se do virtuálního paměťového kreslícího prostoru wxMemoryDC. Výsledek je na závěr na obrazovce vykreslen až jako celek. Třetím krokem je výpis textového ASCII řetězce do textového uživatelského editačního pole. Všechny kroky jsou prováděny po jakékoliv uživatelské změně obrázku nebo parametru, kterým uživatel provede nezávislou změnu. Tyto úpravy jsou řízeny pomocí stavové proměnné, která je právě testována v události na pozadí programu. Aby nedošlo ke kolizi vlákna s nově začínajícím v průběhu jeho běhu, musí být dosavadní vlákno regulérně zrušeno. Jeho stornování může být také přerušeno načtením nebo uložením nového obrázku. 6.3.3
Tlačítko převodu
V okně aplikace je k dispozici tlačítko s názvem Převést, které umožní to samé, co vlákno na pozadí, jen s tím rozdílem, že operace běží sekvenčně, čili uživatel musí čekat a nemůže provést žádnou akci, dokud není převod kompletní. Všechny ovládací prvky jsou mu zakázány jako neaktivní (stav Disable()). Po převedení se automaticky přepne do zobrazení textového editačního pole.
6.4 Druhy výstupů Jakmile je uživatel spokojen se svou prací, může přejít k editaci nebo k ukládání do souboru. 6.4.1
Výstup do textového pole a do souboru typu txt
Řetězec se znak po znaku vypisuje do textového pole. Odřádkování je nastaveno podle šířky obrázku. Barva jednotlivých písmen se určuje podle zastoupení barvy vzorku rastru. Průměrné barevné složky jsou již uloženy ze zpracování načteného obrázku (viz kapitola
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
41
4.2.1). Výstup textu může být uložen do souboru s příponou txt jako běžný neformátovaný text pomocí dialogového okna wxFileDialog. 6.4.2
Výstup do obrazového rastru
Řetězec se znak po znaku vykreslí do objektu typu wxBitmap. Tato bitmapa může být vykreslena rovnou v okně aplikace nebo uložena do libovolného obrazového formátu typu BMP, GIF, JPG, PCX, PNG, TGA, TIF.
6.5 Model tříd Rozložení vnitřní struktury programu má několik dílčích objektů, což je přehledně vidět ve schématu (Obr. 28). Pro názornost jsou uvedeny jen vybrané a nejdůležitější položky, aby bylo patrné, jak software pracuje.
Obr. 28 Model tříd softwaru pro generování Ascii Artu Stručný popis uvedeného diagramu má fyzicky v jazyce C++ tuto strukturu tříd: Hlavní třída (class MainFrame): Spouští a inicializuje okno celé aplikace pro Ascii Art. Dědí ze třídy MainFrameBase, aby mohla obsloužit všechny rutiny události okna. Také dědí veřejně s třídy Interface.
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
42
GUI (class MainFrameBase): Bázová třída deklarující všechny vzhledové a ovládací prvky grafického uživatelského rozhraní. Je vygenerována v pomocném prostředí programu wxFormBuilder (framework wxWidgets pro editaci GUI). Operace (class Interface): Třída vytváří instance tříd Image a RDA. Dále v sobě má definované podstatné proměnné a metody využívané v hlavní třídě aplikace, např.: měření času převodu, přepínač rozsahů znakových sad, výpis na stavový řádek atd. Vlákno (class Thread): Dědí z třídy wxThread a přetěžuje její metody Entry() pro běh vlákna (volá metody pro operace převodu) a OnExit(). Obrázek a Úpravy (class Image): Zapouzdřuje všechny manipulace s obrázkem jako jsou: separace na vzorky, uložení a načtení souboru, úpravy jasu a kontrastu, převod do stupňů šedi a do negativu, transformace velikosti. Rastrový obraz je uchováván v proměnné wxBitmap. Posloupnost hodnot pixelů (po prahování) ve vzorcích je uložena jako stl::vector. Rozpoznávací algoritmus (class RDA): Jádro celé aplikace, které má v sobě implementovány tři zmíněné metody převodu z kapitoly 5. Také má navíc funkci pro vzorkování tvaru písmen Courier New, díky použití objektu wxFont, viz. kapitola 2.2.2
6.6 Rozložení grafického uživatelského rozhraní Okno aplikace jsem rozdělil na několik logických částí, viz ukázka v příloze P I. Levý sloupec slouží k nastavování veškerých parametrů. Je rozdělen na část s ovládacími prvky pro obrázek a nastavení Ascii Artu. Hlavní část programu tvoří panel pro zobrazení obrázku, který obsahuje další dvě karty pro přepínání. Karta s názvem “AsciiArt TEXT“ zobrazuje editační textové pole a “AsciiArt OBRÁZEK“ vykresluje text jako bitmapu. Vedle tohoto panelu je ještě jeden srovnávací náhled, jenž jde skrýt/zobrazit klávesou N. Spodní sektor je vymezen pro výpis vybrané znakové sady, ze které se skládá obrázek (lze měnit uživatele). Ve stavovém řádku se vypisuje informace o tom, jestli je aplikace aktivní nebo ne.
6.7 Možnosti rozšíření Téma diplomové práce mě oslovilo a dosažené výsledky splnily má očekávání. Proto bych chtěl pokračovat v tomto směru i nadále, zde uvádím návrhy možného rozšíření:
UTB ve Zlíně, Fakulta aplikované informatiky, 2011 •
43
Více druhů fontů – písmo jako takové je zajímavým vizuálním prostředkem a existuje mnoho jeho typů a stylů, které by stálo za to přidat.
•
Animace a video – rozpohybování jakékoliv grafiky náročnějším multimediálním aktem, takže jedním z nejzajímavějších rozšíření by mohla být ze začátku konverze animovaného GIF formátu a poté snaha o převod video-formátu na text.
•
Komprimace a šifrování výstupního textu – přestože je výsledný řetězec ASCII znaků nesrovnatelně menší než originální vstupní obrázek, mohl by být ještě zmenšen komprimací. V některých extrémních případech lze použít pro přenos šifrování.
•
Další úpravy obrazu – doplnění některých dalších operací s obrázky jako je výřez, rotace, detekce hran, výměna barevných složek, rozmazání atd.
•
Webdesign – rozšíření dalšího výstupu o základní formát html nebo přepracování převodních metod do webových programovacích jazyků, aby bylo možno převádět rastr on-line.
•
Nové metody převodu – na základě matematických principů by nebylo od věci vyzkoušet jiné řešení postupů převodu.
•
ANSI Art – přidání nových symbolů z větší znakové sady.
•
Vektorové kreslení – jak již bylo zmíněno u kapitoly 3.4, knihovna AA-lib dokázala vykreslit text i ze zadaných vektorových geometrických obrazců (měla nevýhodu v tom, že zadavatel musel znát příkazy). Proto by bylo lepší, kdyby uživatel kreslil tak jako v běžných kreslících editorech s tím, že by zároveň souběžně na obrazovce viděl, jakou podobu má Ascii Art.
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
44
ZÁVĚR Cílem mé diplomové práce bylo vytvořit software pro generování textu z obrazových dat. Uživatel tak má možnost upravit si svůj vlastní obrázek dle svých představ a převést ho na Ascii Art. Použité metody převodů jsou řešeny názornými ukázkami, aby bylo viditelné, jak je počítačová grafika úzce spjata s matematikou. Konečný vizuální textový výstup je srovnán z hlediska časové náročnosti zpracování převodu a také především porovnán se zadaným originálem. Aby se dalo nějakým způsobem pracovat s operacemi převodů, čtenář se musí nutně seznámit se základními pojmy počítačové grafiky a principy objektově orientovaného programování, bez kterých by nebylo možné představit si realizaci tohoto komplikovaného úkolu. Vytvořený program byl vyvinut v prostředí CodeLite a zkompilován překladačem pro C++ MinGW verze 4.4.1 v operačním systému Microsoft Windows 7. Podpora multi-platformní knihovny wxWidgets verze 2.8 tvoří nedílnou součást naprogramované aplikace jako je její grafické uživatelské rozhraní a paralelní běh více vláken. Domnívám se, že tato práce má smysl, protože výsledné grafické výstupy působí zajímavým estetickým dojmem, jak je konkrétně viditelné na výtvarných dílech v příloze P II. Doufám, že navržený software najde širší uplatnění u mnoha uživatelů, kteří mají v oblibě ASCII grafiku. Program bude dále rozšiřován, jak je uvedeno v kapitole 6.7.
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
45
CONCLUSION The aim of this thesis was to develop software for generating text from the image data. The user has the possibility to customize his own image according to his ideas and convert it to Ascii Art. Used methods of transfers are illustrated on demonstrations to show how computer graphics is closely linked with mathematics. The final visual text output is compared in terms of time needed to process your transfer, and especially compared with the specified original. To enable working with transfer operations, the reader has to be necessarily familiar with basic computer graphics concepts and principles of objectoriented programming, without which it would be impossible to imagine the implementation of this complicated task. The created program was developed in a CodeLite environment and compiled by compiler for C++ MinGW version 4.4.1 on Microsoft Windows 7. Multi-platform support wxWidgets library version 2.8 is an integral part of programmed applications such as its graphical user interface, and parallel run of multiple threads. I believe that this work is meaningful, because the final graphic output has an interesting aesthetic impression, which you can see in works of art in annex P II. I hope that the designed software will find wide application for many users who are fond of ASCII graphics. The program will be expanded as described in chapter 6.7.
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
46
SEZNAM POUŽITÉ LITERATURY [1] BURDA, Michal. Root.cz [online]. 27.4.2001 [cit. 2011-03-20]. ASCII-Art snadno a rychle. Dostupné z WWW: . [2] E-learning.tul.cz [online]. 2004 [cit. 2011-04-22]. Segmentace prahováním. Dostupné z WWW: . [3] FOLEY, James D., et al. Computer Graphics - principles and practice. 2nd edition. Boston : Addison-Wesley, 1997. 1175 s. ISBN 0-321-21056-5. [4] GEBHARD, Marku. Image2Ascii conversion [online]. 8.1.2005 [cit. 2011-03-20]. Image2Ascii
conversion
-
State
of
the
art.
Dostupné
z
WWW:
. [5] LIBERTY, Jesse. Naučte se C++ za 21 dní. 2. aktualiz. vyd. Brno : Computer Press, 2007. 796 s. ISBN 978-80-251-1583-1. [6] MARTIŠEK, Dalibor. Matematické principy grafických systémů. 1. vyd. Brno : Littera, 2002. 296 s. ISBN 80-85763-19-2. [7] MURRAY, James D., VANRYPER, William. Encyklopedie grafických formátů. 1. vyd. Praha : Computer Press, 1997. 922 s. ISBN 80-7226-033-2. [8] POKORNÝ, Pavel. Objektově orientované programování v C++ . Vyd. 2. Zlín : Univerzita Tomáše Bati ve Zlíně, 2005. 91 s. ISBN 80-7318-330-7. [9] PRATA, Stephen; SOKOL, Boris. Mistrovství v C++ . 3., aktualiz. vyd. Brno : Computer Press, 2007. 1119 s. ISBN 978-80-251-1749-1. [10] Typeart.com [online]. 2002 [cit. 2011-04-07]. Typeart history. Dostupné z WWW: . [11] SMART, Julian; HOCK, Kevin; CSOMOR, Stefan. Cross-Platform GUI Programming with wxWidgets. USA : Prentice Hall, 2005. 744 s. ISBN 0-13147381-6. [12] SOULIE, Juan. C++ Language Tutorial [online]. 2000, 06.04.2009 [cit. 2011-01-20]. Dostupný z WWW: . [13] Structure-based ASCII Art [online]. 2009 [cit. 2011-04-25]. Dostupné z WWW: .
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
47
[14] ŠALOUN, Petr. Programovací jazyk C++ pro zelenáče. [s.l.] : Neocortex , 2005. 252 s. ISBN 80-86330-18-4. [15] TATTERMUSCH, Jan. OCR pro tištěný text [online]. 2006 [cit. 2011-04-27]. Dostupné z WWW: . [16] WxWidgets [online]. 2011 [cit. 2011-05-01]. WxWidgets.org. Dostupné z WWW: . [17] Zivel.cz [online].
[cit.
2011-01-20].
Kybergraffiti.
Dostupné
.
z
WWW:
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
48
SEZNAM POUŽITÝCH SYMBOLŮ A ZKRATEK ANSI
American National Standards Institute, který standardizuje znakovou sadu ASCII.
API
Application Programming Interface, rozhraní pro programování aplikací.
ASCII American Standard Code for Information Interchange, definuje znaky anglické abecedy a jiné symboly používané v informatice. BBS
Bulletin Board Systém, umožňuje uživatelům připojení a přihlášení do systému pomocí terminálu.
BMP
Windows Bitmap, formát rastrové grafiky.
CMY
Zkratka podle barevných složek Cyan-Magenta-Yellow, doplňkový barevný model k RGB.
GIF
Graphics Interchange Format, formát rastrové grafiky, umožňuje jednoduché animace.
GUI
Graphical User Interface, grafické uživatelské rozhraní ovládacích prvků na monitoru počítače.
HSV
Barevný model Hue-Saturation-Value.
JPEG
Joint Photographic Experts Group, formát rastrové grafiky se ztrátovou kompresí.
OCR
Optical Character Recognition, rozpoznávání tištěných textů, nejčastěji ze scannerů.
OOP
Object-Oriented Programming, objektově orientované programování.
PNG
Portable Network Graphics, formát bezeztrátové rastrové grafiky.
pt
Jednotka pro vyjádření velikosti písmen, typografický bod.
px
Pixel, obrazový bod.
RGB
Barevný model, zkratka podle barevných složek Red-Green-Blue.
STL
Standard Template Library, knihovna zahrnutá v jazyce C++.
TGA
Grafický rastrový formát nazývaný Targa.
TIFF
Tag Image File Format, formát rastrové grafiky.
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
49
SEZNAM OBRÁZKŮ Obr. 1 Autor Guillaume Apollinaire - ukázka vizuální básně ............................................. 11 Obr. 3 Grafika v programu M602 (kolem r. 1990) .............................................................. 12 Obr. 2 Typewriter art ........................................................................................................... 12 Obr. 4 Rozšířená znaková sada ............................................................................................ 14 Obr. 5 Míchání barev systému aditivního (vlevo) a subtraktivního (vpravo) ..................... 16 Obr. 6 Ukázka sazby textu Courier New CE ....................................................................... 18 Obr. 7 Kružnice vytvořená AA-lib knihovnou .................................................................... 21 Obr. 8 Ukázka seřazení písmen podle svého jasu (vygenerováno Ascii Art programem) ................................................................................................................ 29 Obr. 9 Originální náhled -
autor: Roman Žák, název: Podzimní zátiší, kresba
pastelkami ................................................................................................................... 32 Obr. 10 Ascii Art metodou gradientní ................................................................................. 32 Obr. 11 Ascii Art metodou procentuální ............................................................................. 32 Obr. 12 Ascii Art metodou poměrovou ............................................................................... 32 Obr. 13 Graf rychlostí metod převodu Ascii Artu ............................................................... 33 Obr. 14 Originální náhled - autor: Roman Žák, název: Čtoucí dívka, kresba pastelkami ................................................................................................................... 34 Obr. 15 Ascii Art metodou gradientní, zmenšení na 50% ................................................... 34 Obr. 16 Ascii Art metodou gradientní ................................................................................. 34 Obr. 17 Ascii Art metodou gradientní, zvětšení na 150% ................................................... 34 Obr. 18 Originální náhled - autor: Roman Žák, název: Prostor, malba temperami ............ 35 Obr. 19 Ascii Art metodou procentuální, zmenšení na 50% ............................................... 35 Obr. 20 Ascii Art metodou procentuální ............................................................................. 35 Obr. 21 Ascii Art metodou procentuální, zvětšení na 200% ............................................... 35 Obr. 22 Originální náhled - foto-portrét .............................................................................. 36 Obr. 23 Ascii Art metodou poměrovou, zmenšení na 50% ................................................ 36 Obr. 24 Ascii Art metodou poměrovou ............................................................................... 36 Obr. 25 Ascii Art metodou poměrovou, zvětšení na 150% ................................................. 36 Obr. 26 Panel pro úpravu obrazu ......................................................................................... 37 Obr. 27 Panel nastavení Ascii Artu ..................................................................................... 38 Obr. 28 Model tříd softwaru pro generování Ascii Artu ..................................................... 41
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
50
SEZNAM TABULEK Tab. 1 Vybraná část ASCII tabulky tištěných znaků ........................................................... 13 Tab. 2 Základní barvy a jejich kódy v dekadické a hexadecimální soustavě ...................... 17 Tab. 3 Porovnáni rychlostí převodních metod ..................................................................... 31 Tab. 4 Porovnání časů závislých na velikosti ...................................................................... 33
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
SEZNAM PŘÍLOH PŘÍLOHA P I: GUI APLIKACE PRO GENEROVÁNÍ ASCII ARTU PŘÍLOHA P II: VÝTVARNÉ PRÁCE PŘEVEDENÉ DO ASCII ARTU
51
PŘÍLOHA P I: GUI APLIKACE PRO GENEROVÁNÍ ASCII ARTU
PŘÍLOHA P II: VÝTVARNÉ PRÁCE PŘEVEDENÉ DO ASCII ARTU Styl fontu výsledných obrázků: Courier New o velikosti 12 pt. A)
B)
A) Originální náhled 1280 x 960 px – autor: Roman Žák, název: Malířovo zátiší, kresba pastelkami, rok 2010. B) Ascii Art – metoda gradientní v čase 0,172 s, velikost písma 4x zmenšena.
C)
D)
C) Originální náhled 1280 x 960 px – autor: Roman Žák, název: ze série Planety, kresba pastelkami, rok 2009. D) Ascii Art – metoda poměrová v čase 0,344 s, znaková sada a – z, velikost písma 2x zmenšena.
E)
F)
E) Originální náhled 1280 x 900 px – autor: Roman Žák, název: Uroboros, kresba pastelkami, rok 2009. F) Ascii Art – metoda procentuální v čase 0,515 s, speciální znaky (plný znak "O" a prázdný "/"), velikost písma 3x zmenšena.
G)
H)
G) Originální náhled 1280 x 900 px – autor: Roman Žák, název: Člověk a krabice (ze série), kresba pastelkami, rok 2004. H) AsciiArt – metoda procentuální v čase 1,078 s, znaková sada všechny dostupné, velikost písma 5x zmenšeno.
I)
J)
I) Originální náhled 1280 x 870 px – autor: Roman Žák, název: Zátiší s harmonikou, kresba pastelkami, rok 2007. J) Ascii Art – metoda gradientní v čase 0,134 s, znaková sada všechny dostupné (prázdný znak - mezera), velikost písma 2x zmenšeno.
K) Dívka s perlami - porovnání originálních portrétů s Ascii Artem
Autor: Leonardo da Vinci
Ascii Art
Autor: Roman Žák
Ascii Art