You are on page 1of 12

Vežbe 6 - osnovna obrada slike

Uvod
Digitalna obrada slike se kao posebna disciplina pojavila sredinom šezdesetih godina
dvadesetog veka, u nastojanju da se unapredi istraživanje svemira. S obzirom na ozbiljna
ograničenja u mogućnostima tadašnje elektronike i računara, takva obrada je obuhvatala
samo neke osnovne operacije nad slikom, ali je ipak omogućila značajnu popravku kvaliteta
slika dobijenih sa svemirskih sondi i veštačkih satelita. U kasnijem razvoju digilalne obrade
slike mogu se uočiti tri faze. Prva faza obuhvata razvoj digitalne obrade slike od sredine
šezdesetih godina do sredine osamdesetih godina dvadesetog veka. Ovu fazu karakterišu,
pre svega, primene u vojsci i istraživanju svemira. Oprema za obradu slike je bila glomazna
i vrlo skupa, pa je bila koncenirisana u malom broju istraživačkih centara u razvijenim
zemljama koji su imali mogućnosti da sarađuju sa vojskom i agencijama za istraživanje
svemira.
Sa naglim razvojem mikroelektronike i pojavom mikroprocesorskih komponenata došlo je
do naglog pada cene računarske opreme i porasta njenih mogućnosti. Oprema za digilalnu
obradu slike postaje periferija personalnih računara. koji su se u međuvremenu pojavili. Toje
omogućilo da se digitalna obrada slike koristi i u raznim komercijalnim primenama, kao što
su na primer, industrijska kontrola, robotika, televizija, telekomunikacije i dr. S obzirom na
cenu opreme od nekoliko desetina hiljada dolara, digitalna obrada slike postaje pristupačna
širem krugu istraživača. Ova faza je trajala od sredine osamdesetih do kraja devedesetih
godina dvadesetog veka.
Treća faza digitalne obrade slike je započela sa pojavom prvih digitalnih fotoaparata. Nju
karakterišu veoma raznovrsne primene, koje su često pristupačne običnom korisniku bez
mnogo iskustva u obradi slike. S obzirom na dalje povećanje moći personalnih računara,
digitalna obrada slike postaje ostvariva bez posebnog hardvera, čak i u kućnim uslovima.
Pojavilo se mnogo specijalizovanih programa za obradu slike, koji imaju pristupačnu cenu,
a često su i besplatni. U istraživačke svrhe najviše se koristi MATLAB sa svojim Image
Processing T 001 box-om. Intenzivno se radi na obradi video signala, digitalnoj televiziji,
prenosu slike preko Interneta, pojavljuju se multimedijalni sistemi, itd. Ova faza traje i danas,
i ne vidi se kraj mogućim primenama.
Osnovna obrada slike zasniva se na osnovnim aktivnostima. Učitavanjem i spremanjem
slike, osnovnim funkcijama za prikazivanje i matričnim operatorima koje možemo primeniti
nad digitalnom slikom. Počećemo sa slikama koje sadrže samo sive tonove (sive slike), te
pokazati kako taj zapis slike možemo proširiti na slike u boji. Posebno ćemo se osvrnuti na
RGB kao osnovni prostor boja i prikaz digitalne slike u njemu, odnosno na indeksirane slike
i njihov zapis u matlabu.
Image processing tool
U Image Processing toolboxu (IPT) nalaze se funkcije specijalizovane za ulazno-izlazne
operacije, prikazivanje i obradu slika. Da biste videli listu svih funkcija u ovom toolboxu
otkucajte help images u Matlab komandnoj liniji. Na raspolaganju je veliki broj funkcija.
Reprezentacija slike u memoriji
Matlab memoriše sliku kao matricu. Svakom pikselu na slici odgovara jedan element
matrice. PIKSEL je najmanji grafički element matrične fotografije i može reprezentovati
samo jednu boju. Numerička izračunavanja u MATLAB-u se obavljaju korištenjem veličina
klase double, pa se i u digitalnoj obradi slike ova klasa često koristi za reprezentaciju
vrednosti piksela. U tom slučaju se svaki element pamti kao 64-bitni broj u plivajućem
zarezu. Međutim, na ovaj način slike mogu zauzimati izuzetno mnogo memorije. Npr. slika

1
dimenzija 1000x1000 piksela zahtevala bi oko 8 megabajta prostora. Međutim, u praksi je
zadovoljavajuća i grublja kvantizacija vrednosti piksela pa se često koriste 8- bitne i 16-bitne
reprezentacije vrednosti piksela. U MATLAB-u su ove reprezentacije podržane klasama
uint8 i uint16 koje omogućavaju da se svaki element matrice (piksel) memoriše kao 8-bitni,
odnosno 16-bitni neoznačeni celi broj. Pored ovih, za reprezentaciju vrednosti piksela koristi
se i klasa logical.
U matlabu, siva 2D slika reprezentuje se kao M×N matrica. RGB slika će biti reprezentovana
kao tri takve matrice odnosno matrica veličine M×N×3. Jednako tako slike u drugim

prostorima boja ili drugim spektrima mogu biti reprezentirane kao višedimenzionalne
matrice. Stoga se za obradbu i analizu slike mogu koristiti sve uobičajene funkcije za rad s
matricama (matrični operatori) uz funkcije namjenjene upravo za rad sa slikama.

U IPT-u su podržana četiri osnovna tipa slika koji se javljaju i u poznatim rasterskim grafičkim
programima kao što je Adobe Photoshop. Ovi tipovi su:
1. Indeksirane slike,
2. Intenzitetske slike,
3. Binarne slike,
4. RGB slike.

2
Tipom slike se utvrđuje veza između vrednosti elemenata matrice i boje, odnosno,
intenziteta piksela.
Indeksirane slike
Indeksirane slike se memorišu kao dve matrice, matrica slike i kolormapa ili paleta.
Kolormapa sadrži vrednosti koje predstavljaju boje piksela u slici. Matrica slike za svaki
piksel sadrži indeks elementa u kolormapi koji predstavlja boju tog elementa. Ovi indeksi
mogu biti klase uint8, uint16 ili double.
Kolormapa je matrica klase double dimenzija m x 3. Svaka vrsta kolormape sadrži vrednosti
crvene (R), zelene (G) i plave (B) komponente određene boje. R, G i B su realni skalari čije
su vrednosti iz opsega [0, 1]. Tipičan format grafičkog fajla koji podržava indeksirane slike
je TIFF.

Intenzitetske slike
Matlab čuva intenzitetsku sliku kao jednu matricu u kojoj svaki element odgovara jednom
pikselu slike. Matrica može biti klase double u kom slučaju su njeni elementi iz opsega [0,1],
klase uint8 sa elementima iz opsega [0,255] ili klase uint16 sa elementima iz opsega [0,
65535]. Elementi matrice predstavljaju intenzitet (nivo sivila) pojedinih piksela, gde vrednost
0 odgovara crnoj, a 1 (odnosno 255 ili 65535) punom intenzitetu, tj. beloj boji.

3
Binarne slike
U binarnoj slici svaki piksel može poprimiti jednu od dve moguće vrednosti. Ove vrednosti
mogu se tumačiti kao objekat i kao pozadina. Matlab binarnu sliku memoriše kao matricu
čiji elementi su 0 (pozadina) i 1 (objekat). Jasno, binarna slika može se posmatrati kao
specijalan slučaj intenzitetske slike sa samo dva nivoa intenziteta. Elementi matrice su u
ovom slučaju klase logical. Važno je napomenuti da se matrica čiji su elementi 0 i 1, ali
čija klasa nije logical u MATLAB-u ne smatra binarnom slikom.
Binarna slika je najosnovniji oblik digitalnih slika i ovakav tip slika se koristi za čuvanje teksta,
otiska prstiju i arhitektonskih planova.

RGB slike
Kao kod indeksiranih slika i kod RGB slika se boja piksela određuje na osnovu tri
komponente R (crvene), G (zelene) i B (plave). Međutim, za razliku od indeksiranih slika kod
koji se vrednosti ovih komponenti čuvaju u posebnoj kolormapi, kod RGB slika one se pamte
u samoj matrici slike. Dakle, matrica slike je dimenzija m x n x 3, gde su m i n broj vrsta,
odnosno kolona matrice slike. Može se smatrati da se treća dimenzija sastoji od tri ravni
čijom kombinacijom se dobijaju boje piksela.
U standardnim formatima grafičkih fajlova slike su predstavljene kao 24-bitne slike pri čemu
je po 8 bita rezervisano za predstavljanje svake od 3 komponente. U MATLAB-u elementi
matrica mogu biti klase uint8, uint16 ili double.
Svaka slika predstavljena u RGB sistemu može se razložiti na tri monohromatske slike.

4
Matlab omogućava konverzije između različitih tipova i klasa slika. Osnovne funkcije za
konverziju između različitih tipova i klasa slika su dati u Tabeli . Za više informacija pogledati
Image Processing Toolbox dokumentaciju.
Logičke klase

Konvertovanje među klasama

5
Učitavanje slika
Slika se u MATLAB-u predstavlja kao dvodimenzionalna ili trodimenzionalna matrica čiji
elementi određuju boju piksela na određenoj lokaciji. Ukoliko se radi o grayscale slici matrica
je dvodimenzionalna i vrednosti elemenata matrice predstavljaju intenzitet piksela. Ukoliko
se radi o slici u boji matrica je trodimenzionalna i sadrži intenzitete piksela za svaki od tri
kolor kanala: R, G i B.
Osnovne informacije o slici koja se nalazi u nekom fajlu na disku moguće je dobiti
korištenjem funkcije imfinfo(). Slika se u memoriju učitava pomoću funkcije imread(). Na
primer, ako želimo da učitamo sliku lenacolor.jpg možemo iskoristiti sledeću naredbu: slika
= imread('LenaRGB.tif');
Primer za imfinfo, imread i imwrite.
>> info=imfinfo('blobs.tif');
>> I=imread('blobs.tif');
>> imwrite(I,'blobs.jpg','jpg');
>> info=imfinfo('blobs.tif');
>> info=imfinfo('blobs.jpg');
Funkcijom imread() se mogu učitati slike u većini standardnih formata kao što su:
JPEG, GIF, PNG, TIFF, itd.
Slika koja se nalazi u matrici u radnom prostoru MATLAB-a se može upisati u fajl na disku
korištenjem funkcije imwrite(). Ova funkcija ima veliki broj opcija pomoću kojih se
podešavaju različiti parametri fajlova. Najjednostavniji način pozivanja je: imwrite(slika,
'lena.tiff').
Primer
imread - za učitavanje slike. (Da bismo mogli da vršimo operacije nad slikama neophodno
je prvo da ih učitamo.
Primer:
>> img = imread('feliks.jpg');
>> whos
Name Size Bytes Class Attributes
img 800x749 599200 uint8
Da bi smo ispitali osnvne velicine i tip slike, kao i kod matrica koristi se naredba whos. Kao
što je već spomenuto, takodje moze da se koristi i naredba imfinfo za dobijanje kopletnijih
informacija o ucitanoj fotografiji.

>> info=imfinfo('anstajn.gif')
info =

Filename: 'C:\Users\Sekulic\Desktop\anstajn.GIF'
FileModDate: '16-Apr-2018 23:12:22'
FileSize: 240805

6
Format: 'GIF'
FormatVersion: '87a'
Left: 1
Top: 1
Width: 512
Height: 512
BitDepth: 8
ColorType: 'indexed'
FormatSignature: 'GIF87a'
BackgroundColor: 1
AspectRatio: 0
ColorTable: [256x3 double]
Interlaced: 'no'
Za vizualni prikaz slike koristimo naredbe imshow(), image() i imagesc().
**Prikazati razliku izmedju gore pomenutih naredbi**
Razlika medu njima je što naredba image() pretpostavlja da je slika u [0,255>, što znači da
vrednosti van tog raspona prikazuje kao minimalnu ili maksimalnu vrednost, tako npr. broj
500 ne razlikuje od broja 255, a -40 ne razlikuje od 0, te ih prikazuje istim intenzitetom u
slici. S druge strane naredba imagesc() vrednosti matrice koje mogu biti u bilo kojem
rasponu [A,B> preslikava na raspon [0,255>, što nije uvek poželjno jer menja kontrast slike.
Naredba imshow() prikazuje sliku onako kako je ona zapisana. Ako njome prikazujemo
matricu, naredba se prema njoj ponaša kao da je slika, tj. pretpostavlja da je u rasponu
[0,1>, ako je tipa double, odnosno [0,255>, ako je tipa uint8.
Naredbe image() i imagesc() služe za prikaz matrice kao slike i matricu uvek prikazuju kao
sliku u boji. To rade iz razloga što ljudsko oko bolje razlikuje boje nego nijanse sive, čime
su detalji u slici bolje vidljivi.
****Naredba figure() bez argumenata otvara novi prozor. Zadamo li joj kao argument celi
broj naredba otvara novi prozor ako prozor s tim brojem ne postoji, a inače čini aktivnim
prozor s tim brojem.****
Slika koja se nalazi u matrici u radnom prostoru MATLAB-a se može prikazati pomoću
funkcije imshow(), npr. imshow(slika). Pored ove funkcije na raspolaganju je i sofisticiraniji
interaktivni alat za prikazivanje slika kojem se pristupa korištenjem funkcije imtool():
imtool(slika).
Imtool je naredba sa kojom se otvara slika u matlabu i omogućava se korišćenje alata za
manipulisanje sa slikama. (ispitvanje piksela, promena veličine slika i itd.) Koristi se za
dobijanje informacije o učitanoj fotografiji. Prva ikonica "i" daje informacije o visini, širini slike
i itd. Pixel region daje informacije o vrednostima piksela koje cine matricu fotografije.
Primer:
A=imread('bik2.tif');
>> imshow(A);
>> figure

7
>> imagesc(A);
>> figure
>> image(A);
Da bi prikazali razliku izmedju ovih naredbi sprovescemo jos jedan primer (ucitacemo jedan
random niz od 0 do 1000.
>>B=rand(256).*1000; %Generisemo niz sa nasumicno izabranim elemntima od 0 do 1000
>> imshow(B); % Slabi rezultati kontrasta koristeći imshow jer podaci prevazilaze očekivani
opseg
>> imagesc(B); %imagesc automatski prilagođava colourmap opsegu podataka
>> figure
>> imshow(B,[0 1000]); %Ali ako eksplicitno odredimo raspon podataka, imshow takođe
prikazuje tačan kontrast slike
>>

Prikazivanje vise slika zajedno - subplot


Sami da urade - tri slike da ubace sa subplotom!
A=imread('slika');
B=imread('slika');
C=imread('slika');
subplot(3,1,1); imshow(A); title('slika A');
subplot(3,1,2); imshow(B); title('slika B');
subplot(3,1,3); imshow(C); title('slika C');

Primer konvertovanja unit8 u logical (binarni zapis) (prikazati vise primera sa imtool).
a=imread('bik.jpg');
>> b=im2bw(a);
>>
>> subplot (1,2,1); imshow(a);
>> subplot(1,2,2); imshow(b);
>> imtool(b)

Primer konvertovanja iz RGB u Grayscale.


>> A=imread('papagaj.jpg');
>> Asiva=rgb2gray(A);
>> subplot(2,1,1); imshow(A);
>> subplot(2,1,2); imshow(Asiva);

8
Izdvajanje RGB kanala pretvoriti je u crno belu sliku.
>> A=imread('papagaj.jpg');
>> Acrvena=A(:,:,1);
>> Azelena=A(:,:,2);
>> Aplava=A(:,:,3);
>> subplot(2,2,1);imshow(A); title('original');
>> subplot(2,2,2);imshow(Acrvena); title('crvena');
>> subplot(2,2,3);imshow(Azelena); title('zelena');
>> subplot(2,2,4);imshow(Aplava); title('plava');
Zadatak je da se kreira funcija koja ce izdvajati RGB kanale
Ucitati RGB sliku i, pa prikazati njenu crvenu, plavu i zelenu komponentu u posebnim
fajlovima.
function [ boja ] = komponenta( slika, RGB )
boja=slika;
vel_u_pikselima = size(slika);
sirina=vel_u_pikselima(1);
visina=vel_u_pikselima(2);
if RGB == 'R'
for i=1:1:sirina
for j=1:1:visina
boja(i,j,2)=0;
boja(i,j,3)=0;
end
end
end
if RGB == 'G'
for i=1:1:sirina
for j=1:1:visina
boja(i,j,1)=0;
boja(i,j,3)=0;
end
end
end
if RGB == 'B'
for i=1:1:sirina
for j=1:1:visina
boja(i,j,1)=0;
boja(i,j,2)=0;
end
end
end

%% KOMPONENTA vra?a crvenu, zelenu ili plavu komponentu slike


%% Objašnjenje: function [ boja ] = KOMPONENTA( slika, RGB )
%% slika = ime varijable koja sadrži RGB sliku
%% RGB = neko od slova R, G ili B, redom crvena, zelena ili plava
%% boja = slika koja je rezultat
Ucitavanje:
***prvo ucitati sliku***
>> crvena=komponenta(A,'R');
>> zelana=komponenta(A,'G');

9
>> plava=komponenta(A,'B');
>> subplot(1,3,1); imshow(crvena); title('crvena');
>> subplot(1,3,2); imshow(zelana); title('zelena');
>> subplot(1,3,3); imshow(plava); title('plava');

10
Rotiranje slike
Rotiranje slike moze da se radi na vise nacina. Jedan od njih je sledeci:
>> img=imread('anstajn.gif'); %prvo se ucita slika
>> img90=imrotate(img,90); %definisu se varijable img90, img 180, img270
>> img180=imrotate(img,180);
>> img270=imrotate(img,270);
>>
>> figure
>> subplot(2,2,1)
>> imshow(img)
>> title('Originalna slika')
>> subplot(2,2,2)
>> imshow(img90)
>> title('slika rotirana za 90 stepeni')
>> subplot(2,2,3)
>> imshow(img180)
>> title('slika rotirana za 180 stepeni')
>> subplot(2,2,4)
>> imshow(img270)
>> title('slika rotirana za 270 stepeni')
Naredba imrotate se koristi za rotiranje slike pod nekim uglom. Uglovi koji mogu da se koriste
su u rasponu od -360 do 360. Rotiranje se vrsi u suprotnom smeru kazaljke na satu smeru
kazaljke na satu.
Primer:
img49=imrotate(img,-49);
>> figure;
>> imshow(img49)
Kada treba sliku da rotiramo kao u ogledali koriste se sledece naredbe, fliplr, flipud i
flipdim. Ukoliko hocemo da preslikamo grayscale slike koriste se prve dve naredbe. Prva
fliplr se koristi za preslikavanje po vertikalnoj osi, a to znaci da ce prva kolona matrice postati
poslednja i obrnuto. Flipup rotira matricu oko horizontalne ose, i ove dve naredbe se koriste
samo kada matrica ima 2 dimenzije, tj. kod "sivih" slika. Kada imamo slike u boji koristi se
flipdim.
Primer:
>> img_ir=fliplr(img);
>> img_ud=flipud(img);
>>

11
>> figure
>> subplot(1,3,1)
>> imshow(img)
>> title('originalna slika')
>> subplot(1,3,2)
>> imshow(img_ir)
>> title('slika u ogledalu 1')
>> subplot(1,3,3)
>> imshow(img_ud)
>> title('slika okrenuta naopacke')
Sve ove naredbe mogu da se izvedu i rucnom promenom mesta piksela u matrici.
Primeri:
fm=img(:, end:-1:1) %slika u ogledalu
fl=img (end:-1:1, :) %slika naopacke

12

You might also like