Šablona -- Diplomová práce (ft)

Transkript

Šablona -- Diplomová práce (ft)
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 <vector> ..................................................................................... 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 <vector>, fronty <queue>, 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 <vector>
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<int> > 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<int> 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<h; ++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<int>) 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:
<http://www.root.cz/clanky/asciiart-snadno-a-rychle>.
[2] E-learning.tul.cz [online]. 2004 [cit. 2011-04-22]. Segmentace prahováním.
Dostupné z WWW: <http://e-learning.tul.cz/cgi-bin/elearning/elearning.fcgib>.
[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:
<http://www.jave.de/image2ascii/algorithms.html>.
[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:
<http://www.typeart.com/history.asp?FID=43>.
[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: <http://www.cplusplus.com/doc/tutorial/>.
[13] Structure-based ASCII Art [online]. 2009 [cit. 2011-04-25]. Dostupné z WWW:
<http://www.cse.cuhk.edu.hk/~ttwong/papers/asciiart/asciiart.pdf>.
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: <http://www.jizva.net/school/OCR_tisteny_text.pdf>.
[16] WxWidgets [online]. 2011 [cit. 2011-05-01]. WxWidgets.org. Dostupné z WWW:
<http://www.wxwidgets.org>.
[17] Zivel.cz [online].
[cit.
2011-01-20].
Kybergraffiti.
Dostupné
<http://www.zivel.cz/index.php?content=article&id=274>.
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

Podobné dokumenty

Stáhnout PDF verzi příručky

Stáhnout PDF verzi příručky Aplikace REPORT Designer umožňuje upravit originální tiskovou sestavu nebo ji rozmnožit a jednotlivé kopie uspořádat a pojmenovat podle vlastních požadavků. Ke každé sestavě lze vytvořit libovolný ...

Více

Příručka uživatele

Příručka uživatele REPORT Designer – příručka uživatele je jednou ze součástí kompletní dokumentace k systému POHODA. Příručka uživatele není tištěnou verzí elektronické dokumentace; oba typy dokumentace mají rozdíln...

Více

Multiplatformní GUI toolkity

Multiplatformní GUI toolkity { v Qt emit ::() (emit lze vynechat), ::sendEvent(), ::postEvent() { ve wxWidgets nelze (?)

Více

VEDrawing 1.0 Zadání Realizace Kreslení Nabídka a Toolbar

VEDrawing 1.0 Zadání Realizace Kreslení Nabídka a Toolbar toolbaru jsou pouze některé možnosti. Obsahuje tlačítka pro: vytvoření nového dokumentu, uložení současného stavu kreslení, zavření programu. Dále jsou již zmíněná tlačíka zpět a vrátit. Pak jsou n...

Více

tutoriál CodeBlocks 10.05 v1.1.cz

tutoriál CodeBlocks 10.05 v1.1.cz kontextového menu. Pokud je kliknutím myši vybrána kategorie kde se symbol nachází, symbol se zobrazí v dolní ásti okna (viz 1.7 na str. 11). Poklepáním na symbol se otev e soubor, ve kterém je sym...

Více

Code::Blocks 10.05

Code::Blocks 10.05 Kontextového menu "Open include file" (viz Obrázek 1.5 na stran 9). epínat mezi hlavi kou a zdrojem pomocí kontextového menu "Swap header / source". V editoru vyberte z kontextu nap . definici a zv...

Více

stáhnout1.06 MB

stáhnout1.06 MB domky. V údolní nivě podél toku Moravské Sázavy je se prostírá novější zástavba, reprezentována rodinnými domky, bytovými domy a průmyslovými závody. Střed obce je situován u vyústění údolí Hoštej...

Více