Semestální práce z předmětu PC



Podobné dokumenty
Semestrální práce KIV/PC Řešení kolizí frekvencí sítě vysílačů Zdeněk Bečvář A14B0466P 10. ledna 2016

Pokud nebude na příkazové řádce uveden právě jeden argument, vypište chybové hlášení a stručný

Semestrální práce z KIV/PC. Kolja Matuševský (A14B0310P)

Projektč.3dopředmětuIZP. Maticové operace

Klasifikace textu do kategorií spam/ne-spam

Testování prvočíselnosti

Šifrování/Dešifrování s použitím hesla

SEMESTRÁLNÍ PROJEKT Y38PRO

Algoritmizace a programování

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií

Paralelní výpočty na clusteru KMD

Uživatelská příručka

Transformace digitalizovaného obrazu

Matematika v programovacích

6. lekce Úvod do jazyka C knihovny datové typy, definice proměnných základní struktura programu a jeho editace Miroslav Jílek

Webový server lapache

Ročníkový projekt DYNAMICKÉ HTML. Projektová dokumentace. Jan Ehrlich, Petr Marek, Tomáš Marván, Martin Paľo. Vedoucí projektu: RNDr.

SRSW4IT Inventarizační SW. Prezentace aplikace. Vedoucí DP: ing. Lukáš Macura Autor: Bc. Petr Mrůzek

Základní příkazy UNIXu (Linuxu)

INFORMAČNÍ A KOMUNIKAČNÍ TECHNOLOGIE

Program pro tvorbu technických výpočtů. VIKLAN - Výpočty. Uživatelská příručka. pro seznámení se základními možnostmi programu. Ing.

1. Webový server, instalace PHP a MySQL 13

1 Webový server, instalace PHP a MySQL 13

Zadání semestrálního projektu Algoritmy I. zimní semestr 2018/2019

Přesměrování vstupu a výstupu. Posloupnost příkazů. Příkazy pro informaci o uživatelích

Semestrální práce KIV/PC

Dílčí projekt: Systém projektování textilních struktur 1.etapa: tvorba systému projektování vlákno - příze - tkanina

KRY. Projekt č. 2. Kamil Dudka xdudka00

FilmScan35 I. Uživatelská příručka

Cvičení MI-PAP I. Šimeček, M. Skrbek, J. Trdlička

Pro označení disku se používají písmena velké abecedy, za nimiž následuje dvojtečka.

Semestrální úloha 1 z předmětu Programovací jazyk C. Textový merge. Student:

Přednáška. Systémy souborů. FAT, NTFS, UFS, ZFS. Katedra počítačových systémů FIT, České vysoké učení technické v Praze Jan Trdlička, 2012

Zobrazte si svazy a uspořádané množiny! Jan Outrata

Jak programovat Tinykeyer?

Inovace výuky prostřednictvím ICT v SPŠ Zlín, CZ.1.07/1.5.00/ Vzdělávání v informačních a komunikačních technologií

Maturitní otázky z předmětu PROGRAMOVÁNÍ

- dělají se také pomocí #define - podobné (použitím) funkcím - předpřipravená jsou např. v ctype.h. - jak na vlastní makro:

Zdroj:

ORIENTOVANÉ GRAFY, REPREZENTACE GRAFŮ

Systém adresace paměti

IUJCE 07/08 Přednáška č. 1

SUPERPOČÍTAČE DANIEL LANGR ČVUT FIT / VZLÚ

Návod pro řešení typických problémů se stabilitou AMČR

int ii char [16] double dd název adresa / proměnná N = nevyužito xxx xxx xxx N xxx xxx N xxx N

Simluátor Trilobota. (projekt do předmětu ROB)

Ing. Igor Kopetschke TUL, NTI

Zadání soutěžních úloh

Vytvoření bootovatelného média

Cílem seminární práce je aplikace teoretických znalostí z přednášky na konkrétní úlohy. Podstatu algoritmu totiž

AutoPEN, Ing. Lubomír Bucek, Halasova 895, Liberec 6 autopen@volny.cz ,

APS mini.ed programová nadstavba pro základní vyhodnocení docházky. Příručka uživatele verze

Zadání druhého zápočtového projektu Základy algoritmizace, 2005

Jan Březina. 7. března 2017

Zadání soutěžních úloh

Střední odborná škola a Střední odborné učiliště, Hořovice

POČÍTAČE A PROGRAMOVÁNÍ

Zadání semestrálního projektu Algoritmy II. letní semestr 2017/2018

Operační systémy. Cvičení 1: Seznámení s prostředím

Systém souborů (file system, FS)

Certifikační autorita EET Modelové postupy vytvoření souboru žádosti o certifikát

2. Mřížky / Záplavové vyplňování

Přednáška. Správa paměti I. Katedra počítačových systémů FIT, České vysoké učení technické v Praze Jan Trdlička, 2012

Implementace numerických metod v jazyce C a Python

LZ77 KNIHOVNA PRO KOMPRESI A DEKOMPRESI DAT POMOCÍ ALGORITMU LZ77. Příručka uživatele a programátora

v. 2425a Jak si na PC vypěstovat HTTP (WWW, Web) server a jak ho používat (snadno a rychle) by: Ing. Jan Steringa

Semestrální projekt. Předmět: Programování v jazyce C. Zadání: Operace s maticemi. Uživatelský manuál. ver. 1.0

Jazyk C práce se soubory. Jan Hnilica Počítačové modelování 16

Úvod do Linuxu SŠSI Tábor 1

Princip funkce počítače

Popis funkcí a parametrů programu. Reliance External communicator. Verze 1.5.0

Algoritmizace řazení Bubble Sort

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

int => unsigned int => long => unsigned long => float => double => long double - tj. bude-li:

Recognoil RRW Manager rychlý návod k obsluze

U3000/U3100 Mini. (Pro počítač Eee PC s operačním systémem Linux) Stručná příručka

ČÁST 1. Základy 32bitového programování ve Windows

Rocrail. Nejprve: Obecný úvod. Instalace

Výhody a nevýhody jednotlivých reprezentací jsou shrnuty na konci kapitoly.

A0M15EZS Elektrické zdroje a soustavy ZS 2011/2012 cvičení 1. Jednotková matice na hlavní diagonále jsou jedničky, všude jinde nuly

Stručný návod k programu Octave

2.2 Acronis True Image 19

Měření teploty, tlaku a vlhkosti vzduchu s přenosem dat přes internet a zobrazování na WEB stránce

TÉMATICKÝ OKRUH Softwarové inženýrství

8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek

Specifikace projektu Ocerus

Více o konstruktorech a destruktorech

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

Postup přechodu na podporované prostředí. Přechod aplikace BankKlient na nový operační systém formou reinstalace ze zálohy

Časová a prostorová složitost algoritmů

Rekurzivní algoritmy

Vývoj programů. ÚVOD DO OPERAČNÍCH SYSTÉMŮ

Manuál Multitag čtečka

09. Memory management. ZOS 2006, L.Pešička

Skripty - úvod. Linux - skripty 2

Pascal. Katedra aplikované kybernetiky. Ing. Miroslav Vavroušek. Verze 7

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

Základní popis Toolboxu MPSV nástroje

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Transkript:

A05450 ZCU ZS2006 Martin Lipinský martin@lipinsky.cz Semestální práce z předmětu PC Přebarvování souvislých oblastí 1. Zadání Naprogramujte v ANSI C přenositelnou konzolovou aplikaci, která provede v binárním digitálním obrazu obarvení souvislých oblastí pomocí níže uvedeného algoritmu. Vaším úkolem je tedy implementace tohoto algoritmu a funkcí rozhraní (tj. načítání a ukládání obrázku, apod.). Program se bude spouštět příkazem ccl.exe <inpf><outf>. Symbol <inpf> zastupuje úplnou specifikaci vstupního souboru s binárním obrazem, symbol <outf> úplnou specifikaci výstupního souboru, který vytvoří Vaše aplikace. Takže Váš program může být během testování spuštěn například takto: ccl.exe e:\images\img-inp-01.pgm e:\images\img-res-01.pgm Váš program nechť vytvoří výsledný soubor s obarveným obrazem v uvedeném umístění a s uvedeným jménem. Vstupní i výstupní obraz bude uložen v souboru ve formátu PGM, který je popsán níže. Obarvení proveďte podle níže popsaného algoritmu. Testujte, zda je vstupní obraz skutečně černobílý. Musí obsahovat pouze pixely s hodnotou 0x00 a 0xFF. Pokud tomu tak není, vypište chybové hlášení a oznamte chybu operačnímu prostředí pomocí nenulového návratového kódu. Hotovou práci odevzdejte v jediném archivu ZIP, pojmenovaném Vaším osobním číslem, tj. např. A03487.zip. Archiv nechť obsahuje všechny zdrojové soubory potřebné k přeložení programu, makefile a dokumentaci ve formátu PDF nebo PostScript. Budeli některá z částí chybět, kontrolní skript Vaši práci odmítne. Algoritmus: Přebarvování souvislých oblastí (Connected Component Labelling) je dvouprůchodový algoritmus z oblasti počítačového vidění. Pracuje tak, jak je uvedeno v následujícím popisu: 1. průchod: Procházejte obraz po řádcích. Každému nenulovému pixelu (tj. pixelu představujícímu objekt) na souřadnicích [i, j] přiřaďte hodnotu podle hodnoty jeho sousedních pixelů, pokud nenulové sousední pixely existují (zkoumáme pixely dané maskou: [i-1,j-1],[i-1,j][i-1,j+1][i,j-1] ). Všechny sousední pixely dané maskou již byly obarveny v předchozích krocích. - Jsou-li všechny sousední pixely součástí pozadí (mají hodnotu 0x00), přiřaďte pixelu [i, j] dosud nepřidělenou hodnotu novou barvu. - Má-li právě jeden ze sousedních pixelů nenulovou hodnotu, přiřaďte obarvovanému pixelu hodnotu nenulového sousedního pixelu. - Je-li více sousedních pixelů nenulových, přiřaďte obarvovanému pixelu hodnotu kteréhokoli nenulového pixelu ze zkoumaného okolí. Pokud byly hodnoty pixelů v

masce různé (došlo k tzv. kolizi barev), zaznamenejte ekvivalenci dvojic hodnot do zvláštní datové struktury - tabulky ekvivalence barev. 2. průchod: Po průchodu celého obrazu jsou všechny pixely náležející oblastem (objektům) obarveny, některé oblasti jsou však obarveny více barvami (díky kolizím). Proto projděte znovu celý obraz po řádcích a podle informací o ekvivalenci barev přebarvěte pixely těchto oblastí. Po tomto kroku odpovídá každé oblasti označení (obarvení) jedinou, v jiné oblasti se nevyskytující hodnotou (barvou). Vstupní a výstupní formát: Na vstupu i výstupu Vašeho programu budiž obrázek v souboru ve formátu PGM. Formát tohoto souboru je následující: P5 znaky P a 5 a znak nový řádek (LF, ASCII 0x0A) 1024 768 počet sloupců, mezera, počet řádek (zapsaný řetězcem znaků) 255 index nejvyšší hodnoty šedé, resp. úrovně jasu (řetězcem znaků) ČČČuu$$AAAA... byty představující hodnoty jednotlivých pixelů Každý pixel je v souboru uložen jako jeden byte (hodnota pixelu je tedy vlastně úroveň šedé). Byte s hodnotou 0x00 znamená úplně černý pixel, zatímco byte s hodnotou 0xFF znamená úplně bílý pixel. 2. Analýza problému Zadaná úloha se skládá z několika různých problémů. Jednak jde načtení a rozebrání vstupního souboru s obrázkem, pak vlastní detekce a obarvení souvislých ploch, a nakonec uložení upraveného obrázku zpět na pevný disk. Vlastní práce s obrázkem je pak dále možno rozdělit na první poměrně přímočarý průchod a oindexování obrázku, zjištění kolizí barev po prvním průchodu a jejich zaznamenání, a závěrečné přeindexování obrázku tak, aby každá jedna plocha skutečně odpovídala jedné barvě. Pro zaznamenání kolizí mezi barvami byla vybrána matice sousednosti (jednoduché dvourozměrné pole) a jednoduché operace nad ní (více níže) a její následné přepsání do reindexovacího jednorozměrného pole. Matice sousednosti je sice relativně paměťově náročná, zvláště u větších obrázků s velkým počtem indexů, oproti tomu je však proti jiným strukturám (seznam sousednosti) velmi snadno a přímočaře implementovatelná. 3. Popis implementace Program je rozdělen do celkem čtyř částí. ccl.c obsahuje kontrolu vstupních parametrů a jednoduché volání dalších funkcí. Zdrojový soubor fio.c obsahuje funkce na načtení a oparsování vstupního souboru, a zapsání výstupního souboru. Hlavní výkonná část programu zajišťující všechny úkony detekce a obarvování obrázku je obsažena ve zdrojovém souboru color.c a všechna chybová hlášení včetně potřebných funkcí jsou obsaženy v souboru errors.c. Zajímavé části jsou detajlněji popsané dále. 3.1 První obarvovací průchod První průchod je lineární a velmi jednoduchý. Celý obrázek je procházený bod po bodu, a v zřetězené podmínce se zkoumá zda kterýkoli z jeho předchozích sousedů

má již obarvený bod. Pokud se takový najde, dostane aktuálně zkoumaný bod jeho barvu, pokud ani jeden ze sousedů barvu nemá, přidělí se zkoumanému bodu nová barva. 3.3 Naplnění a alokace matice sousednosti Po prvním průchodu vznikne obrázek kde spousta ploch je obarvena více barvami (kolize). Ty je nutno detekovat a připravit přeindexovací pole aby bylo možno finálně přebarvit obrázek. Z různých mořností implementace uložení kolizí (matice sousednosti, BVS, seznam sousednosti) byla vybrána matice sousednosti. Je sice více paměťově náročná, její implementace je však velmi jednoduchá a průhledná. Po prvním průchodu je znám počet celkově přidělených indexů. Je dynamicky alokovaná matice velikosti početindexů^2 a celý obrázek se znovu projde. Přitom se zkoumá zda aktuální bod má stejnou barvu, pokud ne, do matice se zapíše jednička na souřadnice [barva_aktbodu, barva_kolsouseda] i na souřadnice [barva_kolsouseda, barva aktbodu]. Minimalní počet zkoumaných sousedů se jeví v tomto průchodu 3 (přímého předchůdce je možno vynechat, protože ten je použit jako první v případě že existuje při obarvování a tudíž v tomto směru nemůže kolize nastat). 3.4 Vytvoření přeindexovacího pole Aby bylo možno obrázek finálně přebarvit, je potřeba z matice sousednosti vygenerovat přepisovací pole který index odpovídá které barvě. Je naalokována paměť pro přeindexovávací pole délky početindexů. Matice sousednosti získaná v předchozím kroku je doplněna o jedničky na diagonále a ve druhém kroku projitá Floyd Marshallovym algoritmem. Jeho podrobný popis je připojený ve speciálním souboru fast_ccl.pdf (anglicky). /* Floyd-Marshall algoritmh*/ for (j=1; j<actualindex; j++) { for (i=1; i<actualindex; i++) { if (matrix[((actualindex)*i)+j+1]) { for (k=1; k<actualindex; k++) { if ((matrix[(actualindex)*i+k+1]) (matrix[(actualindex)*j+k+1])) { matrix[(actualindex)*i+k+1]=1; else { matrix[(actualindex)*i+k+1]=0; Tím jsou sousedící barvy snadno naplnitelné do reindexovacího pole.

/* naplneni reindexovaciho pole z upravene matice sousednosti */ for (i=1; i<actualindex; i++) { for (j=1; j<actualindex; j++) { if (matrix[((actualindex)*i)+j+1]==1) { reindex[j]=actualcolor; pom++; clearcoulumn(j); if (pom) { /* novou barvu davame jen pokud se behem pruchodu radku alespon jednou resilo */ actualcolor++; pom=0; Paměťová náročnost (matice sousednosti) by šla částečně řešit implementací mapovací funkce charu na á bitu (v současné implementaci je použit 1byte na jeden boolean), tedy potřebu jedné osminy paměti na matici sousednosti. Co se rychlosti týče, bylo by možné doprogramovat rychlejří úpravu matice sousednosti tedy optimalizaci n^3 složitého Floyd-Marshallova algoritmu. Podrobný popis je opět v přiloženém souboru fast_ccl.pdf. 4. Uživatelská příručka Instalace: Program je dodáván v.zip archivu. Pro jeho rozbalení je potřeba program zip respektive unzip (na win platformě vinzip). Pro vlastní překlad se předpokládá dostupnost nástroje pro překlad (gcc, wcc386) a nástroje make (wmake). unix (gcc): unzip ccl.zip cd ccl make copy ccl /target/directory/ Rozbalíme archiv, přesuneme se do jeho vnitřku. Otevřeme a případně upravíme makefile, defaultně je připraven pro překlad na platformě linux. Spustíme překlad příkazem make a výslednou binarku ccl zkopírujeme na potřebné místo, pravděpodobně do nějakého /bin adresáře v cestě windows (watcom):

winzip ccl.zip cd ccl make.bat copy ccl.exe d:\target\directory Rozbalíme archiv a vstoupíme do nově vzniklého adresáře ccl. Zde spustíme připravený dávkový soubor make.bat. Pokud jsou v cestě potřebné nástroje z balíku watcom (http://www.openwatcom.org/), dojde k přeložení a sestavení výsledného programu ccl.exe. Ten je pak možno zkopírovat na potřebné místo. Používání Program ccl (ccl.exe) je konzolová aplikace určená k obarvení souvislých oblastí v černobílém obrázku formátu.pgm. Spouští ze příkazem: windows: ccl.exe <infile> <outfile> unix: ccl <infile> <outfile> Pokud nejsou zadány dva povinné parametry, tedy vstupní soubor a výstupní soubor, vypíše program chybové hláčení s návodem na použití. 5. Závěr Semestrální práce byla dotažena do stádia funkčního programu přeložitelného na platformách w32 i linux (a pravděpodobně i dalších). Program by byl dále optimalizovatelný, zejména co se týče náročnosti na paměť (optimalizace ukládání kolizních dat) a rychlosti (fundovanější algoritmus na detekci kolizí).