Základy zpracování obrazu



Podobné dokumenty
Histogram a jeho zpracování

Histogram a jeho zpracování

1 Základní funkce pro zpracování obrazových dat

Zpracování obrazů. Honza Černocký, ÚPGM

BPC2E_C08 Parametrické 3D grafy v Matlabu

Algoritmus pro hledání nejkratší cesty orientovaným grafem

X37SGS Signály a systémy

Vyhodnocení 2D rychlostního pole metodou PIV programem Matlab (zpracoval Jan Kolínský, dle programu ing. Jana Novotného)

NPGR032 CVIČENÍ III. Šum a jeho odstranění teorie&praxe. Adam Novozámský (novozamsky@utia.cas.cz)

Omezení barevného prostoru

NPGR032 Cv úvod

13 Barvy a úpravy rastrového

SEMESTRÁLNÍ PRÁCE Z X37SAS Zadání č. 7

Cvičení z Numerických metod I - 12.týden

Primární zpracování radarového signálu dopplerovská filtrace

ROZ1 - Cv. 3 - Šum a jeho odstranění ÚTIA - ZOI

Kosinová transformace 36ACS

MATEMATIKA V MEDICÍNĚ

Úpravy rastrového obrazu

1 Jasové transformace

Kompresní algoritmy grafiky. Jan Janoušek F11125

Studentská tvůrčí a odborná činnost STOČ 2015

ROZ1 - Cv. 1 - Zobrazenэ snэmku a zсklady Matlabu

Text úlohy. Která barva nepatří do základních barev prostoru RGB? Vyberte jednu z nabízených možností: a. Černá b. Červená c. Modrá d.

Úvod do Matlabu. Praha & EU: Investujeme do vaší budoucnosti. 1 / 24 Úvod do Matlabu

Analýza a zpracování digitálního obrazu

Vizualizace. TECHNICKÁ UNIVERZITA V LIBERCI Fakulta mechatroniky, informatiky a mezioborových studií

Definice 13.1 Kvadratická forma v n proměnných s koeficienty z tělesa T je výraz tvaru. Kvadratická forma v n proměnných je tak polynom n proměnných s

Volba zobrazení (Direct Current, Scaling) - FFT 1D, FFT 2D

Příklady k prvnímu testu - Matlab

Škola matematického modelování 2016

Kreslení grafů v Matlabu

Zadání Máme data hdp.wf1, která najdete zde: Bodová předpověď: Intervalová předpověď:

Číslicové filtry. Honza Černocký, ÚPGM

ROZ1 CVIČENÍ VI. Geometrická registrace (matching) obrazů

Algoritmus pro generování normálních magických čtverců

5. Lokální, vázané a globální extrémy

1 Projekce a projektory

X = x, y = h(x) Y = y. hodnotám x a jedné hodnotě y. Dostaneme tabulku hodnot pravděpodobnostní

2010 Josef Pelikán, CGG MFF UK Praha

11MAMY LS 2017/2018. Úvod do Matlabu. 21. února Skupina 01. reseni2.m a tak dále + M souborem zadané funkce z příkladu 3 + souborem skupina.

DETEKCE HRAN V BIOMEDICÍNSKÝCH OBRAZECH

WAVELET TRANSFORMACE V POTLAČOVÁNÍ

Lineární algebra : Násobení matic a inverzní matice

Vyhodnocení experimentálního měření kmitání vibrační třídičky pomocí optické metody

Vodoznačení video obsahu

Lingebraické kapitolky - Počítání s maticemi

Číslicové zpracování signálů a Fourierova analýza.

Algoritmy a struktury neuropočítačů ASN - P11

INVESTICE DO ROZVOJE VZDĚLÁVÁNÍ. Modernizace studijního programu Matematika na PřF Univerzity Palackého v Olomouci CZ.1.07/2.2.00/28.

KTE / PPEL Počítačová podpora v elektrotechnice

Pointery II. Jan Hnilica Počítačové modelování 17

Stručný návod k programu Octave

Matice. Je dána matice A R m,n, pak máme zobrazení A : R n R m.

Obrazovkový monitor. Antonín Daněk. semestrální práce předmětu Elektrotechnika pro informatiky. Téma č. 7: princip, blokově základní obvody

Z OBRAZOVÉHO ZÁZNAMU. Jan HAVLÍK. Katedra teorie obvodů, Fakulta elektrotechnická

" Furierova transformace"

Počítačové zpracování obrazu Projekt Učíme se navzájem

D E T E K C E P O H Y B U V E V I D E U A J E J I C H I D E N T I F I K A C E

Předmluva 9 Obsah knihy 9 Typografické konvence 10 Informace o autorovi 10 Poděkování 10

3. kapitola. Průběhy vnitřních sil na lomeném nosníku. Janek Faltýnek SI J (43) Teoretická část: Příkladová část: Stavební mechanika 2

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

Algoritmizace prostorových úloh

Přehledy pro Tabulky Hlavním smyslem této nové agendy je jednoduché řazení, filtrování a seskupování dle libovolných sloupců.

o barvách PHOTOSHOP strana 1

Lineární algebra : Násobení matic a inverzní matice

Cvičení 5 - Inverzní matice

02. HODINA. 2.1 Typy souborů a objektů. 2.2 Ovládací prvky Label a TextBox

scale n_width width center scale left center range right center range value weight_sum left right weight value weight value weight_sum weight pixel

Časové řady - Cvičení

Nastavení parametrů PID a PSD regulátorů

MATLAB HRAVĚ Zdeněk Jančík, FIT VUT Brno

Škola matematického modelování Petr Beremlijski, Rajko Ćosić, Marie Sadowská, Matyáš Theuer

Grafika na počítači. Bc. Veronika Tomsová

Filtrace snímků ve frekvenční oblasti. Rychlá fourierova transformace

Numerické metody 6. května FJFI ČVUT v Praze

Jasové transformace. Karel Horák. Rozvrh přednášky:

NOVÉ METODY HODNOCENÍ OBRAZOVÉ KVALITY

Obecná informatika. Matematicko-fyzikální fakulta Univerzity Karlovy v Praze. Podzim 2012

MATLAB základy. Roman Stanec PEF MZLU

Popisná statistika. Komentované řešení pomocí programu R. Ústav matematiky Fakulta chemicko inženýrská Vysoká škola chemicko-technologická v Praze

KTE / PPEL Počítačová podpora v elektrotechnice

Lineární algebra s Matlabem cvičení 3

2. Určete jádro KerL zobrazení L, tj. nalezněte alespoň jednu jeho bázi a určete jeho dimenzi.

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

Semestrální práce Mozaika aneb Co všechno umí pan Voronoi

Skriptování co se do minula nevešlo, práce s řetězci a řešení rovnic

Makroskopická obrazová analýza pomocí digitální kamery

Algoritmy a datové struktury

Úloha - rozpoznávání číslic

PROJEKT 3 2D TRAJEKTORIE KAMERY SEMESTRÁLNÍ PRÁCE DO PŘEDMĚTU MAPV

Funkce - opakování. Funkce může přijímat parametry na vstupu a může vracet parametry na výstupu.

Hodnocení soutěžních úloh

Úvod do programování 7. hodina

Popisná statistika. Komentované řešení pomocí MS Excel

Matematická analýza III.

2.17 Webová grafika. Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Jiří Hort. Vyrobeno pro SOŠ a SOU Kuřim, s.r.o.

SEMESTRÁLNÍ PRÁCE Z PŘEDMĚTU MODELOVÁNÍ MATLABEM

Bodové odhady parametrů a výstupů

(Auto)korelační funkce Statistické vyhodnocování exp. dat M. Čada ~ cada

Transkript:

Základy zpracování obrazu Tomáš Mikolov, FIT VUT Brno V tomto cvičení si ukážeme základní techniky používané pro digitální zpracování obrazu. Pro jednoduchost budeme pracovat s obrázky ve stupních šedi - zpracování barevných RGB obrázků probíhá analogicky, musíme však všechny operace provést pro každou barevnou složku zvlášť. 1 Načtení a vykreslení obrázku I=imread( lena.gif ); imshow(i); Nezapomínejte středníky za příkazy, které vrací bitmapy (matice)! 1.1 Základní operace s obrazem Velikost obrázku můžeme zjistit jednoduše příkazem size(i), který nám vrátí velikost matice. Pro výpis všech nastavených proměnných lze použít příkaz whos, kde uvidíme i datový typ přiřazený proměnným - náš obrázek bude mít typ uint8. Otočení obrazu: Uložení obrazu: Irot=imrotate(I, 30, bilinear ); imshow(irot); imwrite (I, lenacopy.gif ); Úkol zjistěte velikost obrázku lena.gif před a po otočení o 45 stupňů 2 Základní techniky zpracování obrazu Mnoho jednoduchých transformací obrazu můžeme realizovat pomocí průchodu přes celou matici obrazu, kde postupně měníme hodnoty jednotlivých prvků podle nějaké předem dané funkce. Tyto operace lze ve velké většině realizovat jedním příkazem v Matlabu. Protože však smyslem tohoto cvičení je ukázat, jak věci fungují, ukážeme si ruční přístup, který je sice výrazně méně efektivní, ale více názorný. Pokud se podíváme na matici I, kterou jsme vytvořili v předcházejícím příkladu načtením obrázku lena.gif, zjistíme, že se nám v ní objevují hodnoty v rozsahu 0-255. Samotná hodnota určuje intenzitu bílé barvy na dané pozici v obraze (0 odpovídá černé, 255 bílé barvě). Názorně to ukazuje funkce colorbar. Pozice [0, 0] odpovídá levému hornímu rohu - můžeme si vyzkoušet jednoduchý experiment: Icopy=I; Icopy(1:200, 1:400)=zeros(200, 400); imshow(icopy); colorbar; 1

2.1 Inverze barev Poměrně známou transformací obrazu je inverze barev: V Matlabu by stačilo napsat: I2(x,y)=255-I(x,y); I2 = 255 - I; V tomto cvičení Vám ale schválně budeme většinu operací presentovat pomocí cyklů (i když je to Matlabově neoptimální ), abyste si dokázali představit, jak tyto operace implementovat v C, Javě, atd. 2.2 Jednoduchá detekce hran Pro další zpracování obrazu je často vhodné detekovat hrany. Zatím si ukážeme velmi jednoduchý přístup, kdy zobrazujeme rozdíl hodnot sousedních pixelů násobený nějakou konstantou (v našem případě 10) pro vetší kontrast: for (x=1:511) I2(x,y)=(I(x,y)/2 - I(x+1,y)/2)*10; Protože na hranách je rozdíl hodnot sousedních pixelů mnohem větší než na jednobarevných plochách, zobrazí se nám hrany jako bílé čáry. 2.3 Thresholding Mezi další klasické funkce patří thresholding (česky prahování). Nejprve si určíme hodnotu prahu a poté pixely obrazu rozdělíme podle této hodnoty do dvou tříd. prah=120; if (I(x,y)<prah) I2(x,y)=0; else I2(x,y)=255; Úkol vyzkoušejte různé hodnoty pro prahovou hodnotu; jaká z nich je nejlepší a lze ji spočítat? 2

3 Histogram Histogram je funkce, která nám určuje počet pixelů dané barvy. V našem případě máme 256 různých barev (0-255) - pokud tedy spočítáme, kolikrát se která barva objevuje v našem obrázku a graf vykreslíme, dostaneme histogram: Ruční výpočet by vypadal takto: imhist(i); Pocet=zeros(256); Pocet(I(x,y))=Pocet(I(x,y))+1; plot(pocet); Z histogramu je patrné, že některé hodnoty barev nebyly v našem obrázku použity vůbec, zatímco jiné byly použity mnohokrát. Můžeme tedy všechny barvy roztáhnout tak, aby histogram opravdu využíval všechny hodnoty 0-255: I2=histeq(I); subplot(221); imshow(i); title ( original ); subplot(222); imhist(i); subplot(223); title ( equalized ); subplot(224); imhist(i2); Po tomto příkladu subploty opět vypněte pomocí subplot(111); nebo close all 4 Lineární filtry Jak už jsme si ukázali v předchozím příkladu, můžeme detekovat hrany tak, že od sebe odečteme hodnoty sousedních pixelů. Opačná funkce, tedy sečení hodnot sousedních pixelů, nám způsobí rozmazání obrazu. Funkce, které pracují s lineární kombinací okolí pixelu pro vyprodukování nové hodnoty, lze realizovat pomocí lineárních filtrů. 4.1 Blur (rozmazání obrazu) Nejprve si ukážeme filtrování pomocí příkazu imfilter: h = ones(5,5) / 25 I2 = imfilter(i,h); Matice h nám zde představuje filtr. V tomto případě tedy posčítá všechny sousední pixely do vzdálenosti 2 a vyprodukuje průměrnou hodnotu. Abychom lépe pochopili, jak vše funguje, ukážeme si ruční výpočet: h=ones(5,5)/25 I3=zeros(512,512); for (x=3:509) for (y=3:509) for (x2=1:5) for (y2=1:5) I3(x, y)=i3(x, y)+h(x2, y2)*double(i(x+x2-3, y+y2-3)); imshow(uint8(i3)); Procházíme tedy celý obraz a na každé pozici vypočítáme novou hodnotu v obrazu tak, že vynásobíme jádro filtru a odpovídající část obrazu. 3

4.2 Zaostření obrazu Opačnou funkcí k rozmazání je zaostření obrazu. Tohoto efektu dosáhneme tak, že od hodnoty pixelu odečteme hodnoty sousedních pixelů. 4.3 Detekce hran h2=[-1-1 -1; -1 9-1; -1-1 -1] I2 = imfilter(i,h2); Jednoduchou detekci hran jsme si již ukázali - odpovídal by jí filtr [5-5]. Problémem takového přístupu je značné zašumění, protože není uvažováno vůbec okolí pixelu. Dále takový detektor hran není schopen rozpoznat horizontální hrany. Abychom problémy odstranili, použijeme větší filtr a to dvakrát: jednou pro detekci vertikálních hran a jednou pro detekci horizontálních hran. h=[1 0-1; 2 0-2; 1 0-1] I2 = imfilter(i,h); h2=h I3 = imfilter(i,h2); imshow(i2/2+i3/2); 5 Komprese à la JPEG pomocí DCT Zřejmě každý uživatel počítače se už v dnešní době setkal s JPEG kompresí obrazu. V tomto příkladu si ukážeme její podstatu. Nejprve rozdělíme obraz na bloky 8x8 pixelů a na ty aplikujeme 2D diskrétní kosinovou transformaci (DCT). Tato transformace nám umožní oddělit složky obrazu s různou frekvencí. Poté zahodíme vysokofrekvenční složky obrazu, díky čemuž dosáhneme komprese. Následně zpětnou transformací dostaneme opět bloky 8x8 pixelů, ze kterých zrekonstruujeme obraz. Ačkoliv je patrná ztráta informace ve vysokých frekvencích (hrany jsou rozmazané), kvalita obrazu je pořád poměrně dobrá vzhledem k tomu, že jsme zahodili 58 z 64 koeficientů = 90.625% informace. Id = im2double(i); T = dctmtx(8) dct = @(x)t * x * T ; % aplikovat na kazdy 8x8 blok % definuje matici DCT bazi % definuje funkci, kteou budeme % prima DCT B = blkproc(id,[8 8],dct); % tady to udelame mask = [1 1 1 0 0 0 0 0 % maska, ktera vybere jen 1 1 0 0 0 0 0 0 % prvnich par koeficientu... 1 0 0 0 0 0 0 0 ]; B2 = blkproc(b,[8 8],@(x)mask.* x); invdct = @(x)t * x * T; I2 = blkproc(b2,[8 8],invdct); imshow(i), figure, imshow(i2) % vsechny bloky 8x8 se vymaskuji % definice zpetne DCT % kterou zde aplikujeme. Ve skutečnosti je JPEG komprese samozřejmě komplikovanější - méně podstatná informace není zahozena, ale uložena s menší přesností (na menší počet bitů). To samé platí o barevných složkách obrazu, protože lidské oko je na různé barvy jinak citlivé. Příklad z http: // www. mathworks. com/ access/ helpdesk/ help/ toolbox/ images/ f21-16366. html 4

Úkoly 1. podívejte se na řádky a sloupce matice T, která obsahuje DCT báze, např. takto: plot (1:8, T(1:3,:) ) plot (1:8, T ) plot (1:8, T(:,1:3)) plot (1:8, T) % zobrazi prvni 3 radky % zobrazi vsechny radky % zobrazi prvni 3 sloupce % zobrazi vsechny sloupce Komentujte, které frekvence která báze hledá. 2. zkuste ručně zkonstruovat následující obrázky: celý černý. celý bílý. s vodorovnými proužky. se svilými proužky. šachovnici po jednoitlivých pixelech. Obrázky prožeňte uvedeným algoritmem a Zobrazte a komentujte obsah matice B, zobrazte např. B (1:8, 1:8) B2 (1:8, 1:8) Komentujte, jak kvalitní je výstup. 3. Řešení pomocí funkce blockproc je velmi efektivní, ale nevidíme přesně, co se děje. Zkuste příklad přepsat pomocí cyklů a ručně zpracovat každý blok 8x8. 5

6 Chyba v obraze Provádíme-li pokusy s obrazem jako například v předchozím příkladu, je užitečné umět spočítat, jaké chyby jsme se dopustili. To můžeme provést například tak, že spočítáme průměrnou chybu na jeden pixel: noise=0; I2=im2uint8(I2); noise=noise+double(abs(i(x,y)-i2(x,y))); noise=noise/512/512 7 Reference http://www.mathworks.com/access/helpdesk/help/toolbox/images/f0-3373.html http://www.fit.vutbr.cz/study/courses/iss/public/pred/2d/aux.m 8 Řešení Ruční zpracování DCT: 6

Id = im2double(i); % prima dct T = dctmtx(8) B = zeros (512,512); for x=1:8:511, for y=1:8:511, vysek = Id (x:(x+7),y:(y+7)); dctvyseku = T * vysek * T ; B(x:(x+7),y:(y+7)) = dctvyseku; % maskovani mask = [1 1 1 0 0 0 0 0 % maska, ktera vybere jen 1 1 0 0 0 0 0 0 % prvnich par koeficientu... 1 0 0 0 0 0 0 0 ]; B2 = zeros (512,512); for x=1:8:511, for y=1:8:511, vysek = B (x:(x+7),y:(y+7)); vymaskovano = vysek.* mask; B2(x:(x+7),y:(y+7)) = vymaskovano; % zpetna DCT I2 = zeros (512,512); for x=1:8:511, for y=1:8:511, vysek = B2 (x:(x+7),y:(y+7)); zpet = T * vysek * T;; I2(x:(x+7),y:(y+7)) = zpet; imshow(i), figure, imshow(i2) 7