Professional Documents
Culture Documents
Vezba 7 - Kompleksna Obrada Slike PDF
Vezba 7 - Kompleksna Obrada Slike PDF
____________________________________________________
itanje slika
f = imread('example1.jpg');
Funkcija koja omoguava itanje slika je funkcija imread. Ona omoguava da se kao parameter zada slika
koju je potrebno obraditi I da se njena vrednost uita u promenljivu (u ovom sluaju f) koja predstavlja
matricu.
Prikaz slika
imshow(f,[180 200])
Sliku je mogue prikazati pomou funkcije imshow koja kao ulazne parameter moe imati jedan ili dva
parametra. Prvi parameter je promenljiva tipa matrice koja ustari predstavalja sliku. Drugi parameter
predstavlja broj stepeni inteziteta slike koji se prikazuje. Ukoliko se ne zada taj parameter, broj je broj
stepeni inteziteta slike je 256.
1
Funkcija imwrite slui da se matrica koji je prvi parameter funkcije sauva kao fajl koji je drugi parameter
funkcije. Lepa osobina ove funkcije je da moe kao da ima I druge parameter. U sluaju slike tipa jpg,
moe da prima parameter quality koji ima vrednost od 0 do 100. to je vrednost manja to je ve
degradacija slike usled JPEG kompresije.
Ukoliko je slika tiff tipa, onda je, na primer mogue smanjiti rezoluciju slike kao u datom primeru.
imwrite(fjpg, 'tifexample1.tif', 'resolution' ,[300 300])
Informacija o slikama
lowquality = imfinfo('jpgexample1.jpg')
Informacije o slici se dobijaju putem funkcije iminfo koja kao parameter prima ime fajla koji predstavlja
sliku. U izlaznu promenljivu (tipa strukture) se upisuju podaci o slici:
lowquality =
Filename: 'G:\Program Files\MATLAB\R2011b\bin\Graficari
Vezbe\Kompleksna obrada slike\jpgexample1.jpg'
FileModDate: '20-Nov-2012 10:44:01'
FileSize: 21027
Format: 'jpg'
FormatVersion: ''
Width: 500
Height: 500
BitDepth: 24
ColorType: 'truecolor'
FormatSignature: ''
NumberOfSamples: 3
CodingMethod: 'Huffman'
CodingProcess: 'Sequential'
Comment: {}
Izvrtanje slike
f = imread('example1.jpg');
reverseimg = f(end:-1:1, :,:);
imshow(reverseimg)
Izvrtanje slike se radi na nain kao to je prikazano u poslednjem segmentu koda. Sutina je u izvrtanju
samo dimenzije koja predstavlja vrste matrice.
Isecanje se jednostavno vri tako to se odabere segment slike po obe ose koji eli da se isee, na nain
koji je prikazan u kodu. To ustvari znai da se izaberu iz slike vrste I kolone koje se trebaju prikazati.
Nain 2.
[s1,s2,s3] = size(f);
figure(7)
image(f)
[x y] = ginput(2);
x1=x(1);
x2=x(2);
y1=y(1);
y2=y(2);
x1= round (x1);
x2= round (x2);
y1= round (y1);
y2= round (y2);
if (x1<=x2) & (y1<=y2)
croppedimg2 = f(x1:x2, y1:y2, :);
elseif (x1<=x2) & (y1>y2)
croppedimg2 = f(x1:x2, y2:y1, :);
elseif (x1>x2) & (y1>=y2)
20
40
60
80
100
120
140
160
20
40
60
80
100
120
140
U okviru naina 2. obezbeeno je isecanje dela slike tako to se segment slike koji eli da se isee obelei
korienjem mia I to ako se omogui da se klikne na mesto koje predstavlja jedan oak nove iseene
slike, a zatim na mesto koje predstavlja drugi oak iseene slike (dijagonalan u odnosu na prvi).
U konkretnom segment kod uzimamo samo vrste I kolone koji nam predstavljaju svaku etvrtu liniju
slike po vertikali I horizontali.
50
100
150
200
250
300
350
400
100
200
300
400
500
600
10
20
30
40
50
60
70
80
90
100
110
20
40
60
80
100
120
140
image(s)
50
100
150
200
250
300
350
400
100
200
300
400
500
600
50
100
150
200
250
300
350
400
100
200
300
400
500
600
50
100
150
200
250
300
350
400
100
200
300
400
500
600
50
100
150
200
250
300
350
400
100
200
300
400
500
600
Sa slika se moe primetiti da prikaz bitovne ravni bita veeg znaaja daje vie detalja o slici, dok ta
koncentracija detalja progresivno opada sa prikazom bitovnih ravni manjeg znaaja.
Posvetljivanje slike
Posvetljivanje slike moe da se vri na vie naina. Svakako jedan je da se na vrednost svakog piksela
doda odgovarajua konstanta. Treba napomenuti da za vrednosti koje postaju vee od 255 treba uvesti
ogranienje da su one upravo jednake 255 jer je to najvea vrednost koju svaka od komponenti moe
dobiti. Drugi nain posvetljivanja slike je umnoavanjem svakog piksela nekim umnokom. Kako to zaista
izgleda za odgovarajue vrednosti dodavanja konstante i umnoavanjem umnokom moete videti na
slikama.
for i=1:s1
for j=1:s2
for k=1:3
if s(i,j,k)>180
s(i,j,k)=255;
else
s(i,j,k)= s(i,j,k)+75;
10
end
end
end
end
50
100
150
200
250
300
350
400
100
200
300
400
500
600
for i=1:s1
for j=1:s2
for k=1:3
if s(i,j,k)*3>255
s(i,j,k)=255;
else
s(i,j,k)= s(i,j,k)*3;
end
end
end
end
11
50
100
150
200
250
300
350
400
100
200
300
400
500
600
Potamljivanje slike
Potamljivanje slike moe da se vri na vie naina. Svakako jedan je da se od vrednosti svakog piksela
oduzme odgovarajua konstanta. Treba napomenuti da vrednosti koje postaju manje od 0 treba
ograniiti da one postanu upravo jednake 0 jer je to najmanja vrednost koju svaka od komponenti moe
imati. Drugi nain posvetljivanja slike je deljenje svakog piksela nekom konstantom. Kako to zaista
izgleda za odgovarajue vrednosti dodavanja konstante i umnoavanjem umnokom moete videti na
slikama.
for i=1:s1
for j=1:s2
for k=1:3
if s(i,j,k)-75<0
s(i,j,k)=0;
else
s(i,j,k)= round(s(i,j,k)-75);
end
end
end
end
12
50
100
150
200
250
300
350
400
100
200
300
400
500
600
for i=1:s1
for j=1:s2
for k=1:3
s(i,j,k)= round(s(i,j,k)/3);
end
end
end
13
50
100
150
200
250
300
350
400
100
200
300
400
500
600
14
m=1;
end
% n predstavlja kolonu na koju deluje sum
n=round(s2*rand);
% ako je kolona = 0, onda automatski postaje kolona = 1, posto
% ne moze biti 0-ta kolona slike
if n==0
n=1;
end
% promenljiva pom sluzi da bi u zavisnosti od njene vrednosti (0,1)
% tacka suma bila bela ili crna
pom = round(rand);
if pom ==0
s(m,n,1)=255;
s(m,n,2)=255;
s(m,n,3)=255;
else
s(m,n,1)=0;
s(m,n,2)=0;
s(m,n,3)=0;
end
end
end
figure(2)
image(s)
50
100
150
200
250
300
350
400
100
200
300
400
500
600
15
16
50
100
150
200
250
300
350
400
100
200
300
400
500
600
17
if m==0
m=1;
end
% n predstavlja kolonu na koju deluje sum
n=round(s2*rand);
% ako je kolona = 0, onda automatski postaje kolona = 1, posto
% ne moze biti 0-ta kolona slike
if n==0
n=1;
end
% slucajne vrednosti koje se mnoze sa vrednostima piksela
s(m,n,1)=round(s(m,n,1)*rand);
s(m,n,2)=round(s(m,n,2)*rand);
s(m,n,3)=round(s(m,n,3)*rand);
end
end
figure(2)
image(s)
50
100
150
200
250
300
350
400
100
200
300
400
500
600
18
m = rgb2hsv(s)
50
100
150
200
250
300
350
400
100
200
300
400
500
600
19
s(i,j,1)=s(i,j,1);
s(i,j,2)=0;
s(i,j,3)=0;
end
end
figure(1)
image(s)
s = imread('rome.jpg');
for i=1:s1
for j=1:s2
s(i,j,1)=0;
s(i,j,2)=s(i,j,2);
s(i,j,3)=0;
end
end
figure(2)
image(s)
s = imread('rome.jpg');
for i=1:s1
for j=1:s2
s(i,j,1)=0;
s(i,j,2)=0;
s(i,j,3)=s(i,j,3);
end
end
figure(3)
image(s)
50
100
150
200
250
300
350
400
100
200
300
400
500
600
20
50
100
150
200
250
300
350
400
100
200
300
400
500
600
500
600
50
100
150
200
250
300
350
400
100
200
300
400
21
for i=1:s1
for j=1:s2
f(i,j,1)=s(i,j,1);
f(i,j,2)=0;
f(i,j,3)=0;
end
end
figure(3)
image(f)
for i=1:s1
22
for j=1:s2
f(i,j,1)=0;
f(i,j,2)=s(i,j,2);
f(i,j,3)=0;
end
end
figure(4)
image(f)
for i=1:s1
for j=1:s2
f(i,j,1)=0;
f(i,j,2)=0;
f(i,j,3)=s(i,j,3);
end
end
figure(5)
image(f)
50
100
150
200
250
300
350
400
100
200
300
400
500
600
23
50
100
150
200
250
300
350
400
100
200
300
400
500
600
50
100
150
200
250
300
350
400
100
200
300
400
500
600
24