Documente Academic
Documente Profesional
Documente Cultură
Pentru:
>> b=patratinpatrat(512,128,0);
>> image(b)
Obtinem:
Pentru
>> b=patratinpatrat(512,128,80);
>> image(b)
Obtinem:
Pentru:
>> b=patratinpatrat(512,128,160);
>> image(b)
Obtinem:
Pentru
>> b=patratinpatrat(512,128,255);
>> image(b)
Obtinem:
Observam cum patratul din centru este scos mai mult sau mai putin in evidenta in functie de nivelul de gri
folosit pentru fundal.
Acum dupa ce ne-am jucat cu diferitele niveluri de gri la punctul (a), trecem la punctul (b) unde vom
incerca sa remarcam diferentele dintre comenzile image( ), imagesc( ), imshow( ), colormap(gray( )).
Introducem in Command Window urmatoarele comenzi:
>>b=patratinpatrat(512,128,0);
>>colormap(gray(256));
Acum vom afisa imaginea lui b folosind pe rand image( ), imagesc ( ) si imshow ( ):
Pentru image(b) obtinem :
Avand ca si comparatie cele 3 imagini de mai sus, observam ca image(b) si imagesc(b) afiseaza
imaginea pe o axa de coordonate (x,y), cu diferenta ca imagesc(b) scaleaza datele imaginii astfel inca sa
foloseasca valorile minime si maxime din colormap(gray(256)), in cazul nostru negru (0) si alb (255).
Comanda imshow( ) nu afiseaza axa de coordonate (x,y), ci in schimb afiseaza imaginea la marimea ei
naturala (512x512 pixeli).
2. Benzile lui Mach. Generati o imagine de dimensiune 512x512 reprezentand o mira cu m benzi
orizontale (m=4-16).
a. Priviti cu atentie imaginea afisata. Comentati.
b. Reprezentati grafic cu functia plot() profilul liniei 256. Figurati profilul liniei percepute de
dumneavoastra.
In fisierul C:\Program Files\MATLAB\R2011b\benzimach.m scriem functia pentru afisarea benzilor lui
Mach (N=marimea imaginii, b=numarul de benzi Mach):
function c=benzimach(N,b)
for i=1:N;
for j=1:N;
c(i,j)=0;
end
end
L=256;
d=N/b;
for i=1:b;
c(1:N,(i-1)*d+1:i*d)=L/b*(i-1);
l=1+L/b*i;
end
In Command Window introducem urmatoarele comezi:
>>c=benzimach(512,6)
>>image(c)
Obtinem o imagine de 512x512 pixeli cu 6 benzi, reprezentand o succesiune ascendenta de nivele de gri
incepand de la stanga (negru) spre dreapta (alb imaculat).
In continuare vom folosi comanda plot(c) si vom obtine graficul din imaginea de mai jos:
3. Scrieti o functie care sa genereze imaginea unui disc de raza R si nivel de gri A centrat pe un fundal
uniform de nivel de gri B. Folositi functia pentru a obtine imaginea alaturata. Priviti cu atentie figura si
comentati.
Student: Dragan Sebastian-Ionut, SAT, Anul II
Mai intai vom crea o functie pe care o vom numi in mod intuitiv d=cercinpatrat(N,R,L,F) in
fisierul C:\Program Files\MATLAB\R2011b\cercinpatrat.m si vom salva continutul acestui fisier:
function d=cercinpatrat(N,R,L,F)
for i=1:N;
for j=1:N;
if(i-N/2)^2+(j-N/2)^2<R^2;
d(i,j)=L;
else
d(i,j)=F;
end
end
end
In functia noastra avem urmatorii parametri:
N=marimea imaginii
R=raza cercului
L=culoarea din interiorul cercului
F=culoarea de fundal a imaginii
Avand creata deja functia, acum introducem in Command Window urmatoarele date:
>>d=cercinpatrat(512,128,0,255);
>>image(d)
Astfel, obtinem imaginea urmatoare:
4. Comentati ce observati in figurile de mai jos. Incercati sa generati astfel de figuri folosind matlab.
In imaginea de mai sus avem in partea stanga 2 drepte de aceeasi lungime, insa cea de sus pare a avea o
lungime mai mica decat cea a dreptei de dedesubt ca urmare a faptului ca varfurile celor 2 drepte sunt
marcate intr-un mod care sa pacaleasca ochiul uman si sa sugereze acesta iluzie subtila.
In partea dreapta a imaginii avem un patrat la care sunt trasate cele 2 diagonale, iar mijloacele laturilor
opuse sunt unite prin 2 segemente. Faptul ca aceste 4 segmente sunt discontinue in apropiere de centrul
patratului sugereaza existenta unui cerc al carui contur nu este trasat. Cercul in sine nu exista dar minte
noastra totusi il percepe ca fiind existent.
RGB
1. Incarcati in memorie o imagine color folosind functia imread( ).
a) Afisati imaginea (functia image( ) );
b) Observati dimensiunile, tipul de date, memorie ocupata, etc, folosind comanda whos. Generati o
imagine monocroma cu acelasi numar de linii si coloane reprezentand un disc alb pe fond negru.
Comparati memoria ocupata de imaginea color si imaginea monocroma studiati functiile uint8( ) si
double( );
c) Afisati componentele de rosu, verde, albastru ca imagini alb/negru. Pentru schimbarea paletei de culori
se foloseste functia colormap( );
d) Afisati componenta R (Rosu), G (Verde), B (Albastra).
a) Scriem in Command Window:
>> s=imread('floare.jpg');
>> image(s) % imaginea din dreapta
b) Scriem in Command Window:
>> whos
Name
Size
Bytes Class Attributes
s
328x500x3
492000 uint8
328x500
328x500x3
1312000 double
492000 uint8
>> r=s(1:328,1:500,2);
>> image(r) % <= imaginea din stanga
9
Componenta de culoare rosie (fr = floare rosie) a
imaginii sursa (s):
>>
>>
>>
r=s(1:328,1:500,2);
fr(:,:,1)=s(:,:,1);
fr(:,:,2)=0;
>>
>>
fr(:,:,3)=0;
image(fr) % imagine dreapta =>
Componenta de culoare verde (fv = floare verde) a
imaginii sursa (s):
>> r=s(1:328,1:500,2);
>> image(r)
>> fv(:,:,2)=s(:,:,2);
>> fv(:,:,3)=0;
>> fv(:,:,1)=0;
>> image(fv) % <= imagine stanga
Bytes
492000
1312000
492000
492000
492000
492000
164000
492000
Class Attributes
uint8
double
uint8
uint8
uint8
uint8
uint8
uint8
10
2. a) Generati si afisati imaginea a 3 cercuri (discuri) de culori rosu, verde, albastru, cercurile (discurile)
avand centrele in varfurile unui triunghi. Alegeti raza astfel incat discurile sa se intersecteze. Ce se va
intampla cand centrele celor 3 discuri coincid. Verificati experimental.
b) Scrieti o functie care sa genereze o sfera;
c) Repetati punctul (a) inlocuind discurile cu sfere. Comentati rezultatele obtinute.
a) Cream fisierul imdisc.m care sa contina functia:
function out=imdisc(N,R,L,F,x,y)
for i=1:N;
for j=1:N;
if (i-x)^2+(j-y)^2<R^2;
out(i,j)=L;
else
out(i,j)=F;
end
end
end
Scriem in Command Window:
>> A(:,:,1)=imdisc(512,100,255,0,192,192);
>> A(:,:,2)=imdisc(512,100,255,0,192,320);
>> A(:,:,3)=imdisc(512,100,255,0,320,255);
>> image(d1)
>> d1=uint8(A);
>> image(d1) % imagine dreapta =>
>> image(d1)
>> A(:,:,1)=imdisc(512,100,255,0,192,255);
>> A(:,:,2)=imdisc(512,100,255,0,320,192);
>> A(:,:,3)=imdisc(512,100,255,0,320,320);
>> d2=uint8(A);
>> image(d2) % imagine dreapta =>
% Observam ca din suprapunerea culorilor
obtinem:
Rosu + Verde = Galben
Rosu + Albastru = Violet (Magenta)
Verde + Albastru = Cyan
Rosu + Verde + Albastru = Alb
>> A(:,:,1)=imdisc(512,100,255,0,192,192);
>> A(:,:,2)=imdisc(512,100,255,0,192,192);
>> A(:,:,3)=imdisc(512,100,255,0,192,192);
>> d3=uint8(A);
>> image(d3) % Observam ca din suprapunerea celor 3 discuri (rosu, verde, albastru reiese albul)
Student: Dragan Sebastian-Ionut, SAT, Anul II
10
11
11
12
>> A(:,:,1)=imsfera(512,100,128,0,192,192);
>> A(:,:,2)=imsfera(512,100,128,0,192,192);
>> A(:,:,3)=imsfera(512,100,128,0,192,192);
>> sf=uint8(A);
>> image(sf) % <= imagine stanga
>>
A(:,:,1)=imsfera(512,100,128,0,192,192);
>> A(:,:,2)=imsfera(512,100,128,0,192,320);
>> A(:,:,3)=imsfera(512,100,128,0,320,255);
>> sf1=uint8(A);
>> image(sf1)
>> image(sf1) % imagine dreapta =>
>> A(:,:,1)=imsfera(512,100,128,0,192,255);
>> A(:,:,2)=imsfera(512,100,128,0,320,192);
>> A(:,:,3)=imsfera(512,100,128,0,320,320);
>> sf2=uint8(A);
>> image(sf2) % imagine dreapta =>
12
13
3. Incarcati in memorie imaginea mandrill folosind comanda load mandrill. La examinarea memoriei
(comanda whos) se constata ca imaginea este memorata sub numele X imagine monocroma si sub
numele map este stocata o paleta de culori.
a) Afisati imaginea mandrill alb/negru;
b) Afisati imaginea color (schimband paleta de culori);
c) Generati o imagine RGB identica. Comentati rezultatele obtinute.
a,b,c) In Command Window scriem:
>> load mandrill
>> whos
Name
Size
Bytes Class
X
480x500
caption
2x1
map
220x3
Attributes
1920000 double
4 char
5280 double
>> r(:,:,1)=X;
>> r(:,:,2)=0;
>> r(:,:,3)=0;
>> r=uint8(r);
>> image(r) % <= imagine stanga
13
14
>>
g(:,:,1)=X;
g(:,:,2)=X;
g(:,:,1)=0;
g(:,:,3)=0;
g=uint8(g);
image(g) % => imagine dreapta
>>
>>
>>
>>
>>
>> b(:,:,3)=X;
>> b(:,:,1)=0;
>> b(:,:,2)=0;
>> b=uint8(b);
>> image(b) % <= imagine stanga
Restaurarea imaginilor
Procesul de restaurare reprezint o ncercare de a obine o imagine,
considerat original avnd la dispoziie versiunea sa corupt i informaii
despre procesul care a cauzat corupia. Aceast informaie este esenial deoarece ne
permite s apreciem dac i n ce msur a fost corupt originalul. De o egal
importan este ns i cunoaterea unor detalii despre imaginea original, fie sub
forma unor proprieti statistice, fie sub forma unei cunoateri a priori a
originalului de ctre cel ce face restaurarea. Scopul procesului de restaurare este de
a elimina, prin operaii de filtrare, aceste degradri.
Degradrile imaginii pot fi mprite, dupa originea lor, n patru categorii:
degradri datorate sistemului de captare a imaginii (distorsiuni de apertur,
proast focalizare a camerei, micare relativ obiect-camer);
degradri datorate sistemului de reproducere a imaginii (blurring-ul de
exemplu);
degradri datorate zgomotului prezent n oricare pas al procesului de
prelucrare a imaginii;
degradri datorate efectelor secundare ale operaiilor de restaurare.
Dup modul n care pot fi eliminate, degradrile se pot mpri n:
degradri care se pot elimina printr-o operaie invers;
Student: Dragan Sebastian-Ionut, SAT, Anul II
14
15
15
16
(4.1)
k 2 ( 2 / N 2 )k 2 , 0 k 2 N 2 1
(4.2)
H ( k1 , k 2 ) H d ( k1 ,k 2 )
(4.3)
obinndu-se
Funcia Matlab corespunztoare este FSAMP2.
ordin
f. tiere
0.3
0.6
(metoda) fsamp
fwind
11
fwind
ftrans
ordin
f. tiere
0.3
0.6
fwind
fsamp
11
ftrans
fwind
16
17
[f1,f2] = freqspace(41,'meshgrid');
r = sqrt(f1.^2 + f2.^2);
% Rspunsul n frecven dorit
Hd = ones(41);
Hd((r<0.1) | (r>0.3)) = 0;
% Rspunsul la impuls obinut
h = fsamp2(Hd);
figure(1),freqz2(h)
% Filtrarea imaginii imag1.tif
A=imread('imag1.tif');
figure(2),imshow(A)
B=filter2(h,A);
B=(B-min(min(B)));
B=B/max(max(B));
figure(3),imshow(B)
Gaussian
Average
17
18
Unsharp
Sunt filtre care se aplic pentru determinarea tranziiior nivelurilor de gri din
imagine (prin calculul derivatei n 2 sau 3 puncte) i se utilizeaz n analiza
imaginilor pentru detecia contururilor.
Filtre de gradient de ordin 1
Student: Dragan Sebastian-Ionut, SAT, Anul II
18
19
(4.4)
I ( x, y )
I ( x, y ) I ( x, y 1)
y
(4.5)
h1 ( x, y ) 1 1
(4.6)
h 2 ( x, y )
(4.7)
Alte exemple de funcii pondere pentru filtre de gradient de ordin 1 sunt date
n tabelul urmtor:
Numele filtrului
Gradient pe direcia x
Prewitt:
1
1
0
0
0
1
1
1
Sobel:
1
2
0
0
0
1
2
1
Gradient pe direcia y
1
0
1
1
0
1
1
0
1
1
0
1
2
0
2
1
0
1
Gradientul de ordin 2
pe direcia y
Laplaceanul
1
1
1
3
1
2
2
2
1
1
1
1
1
2
3
1
1
2
1
1
2
1
2
1
1
3
2
1
4
1
2
1
2
1
1
2
4
1
2
4
2
1
2
1
1
1
2
4
1
2
4
2
1
2
1
1
1
0
2
1
0
4
0
1
0
1
19
20
de dimensiune
y i, j MED X NN i, j
NN ,
(4.8)
X i, j
M
O
x i k , j k L
x i k , j k
x i k , j k
(4.9)
20
21
21
22
Estomparea imaginii are mai multe cauze de apariie. Poate s apar n urma
integrrii efectuate de dispozitivul de captare a imaginii sau de cel de redare, poate
fi cauzat de micarea relativ obiect-sistem de achiziie (motion blur) sau de o
filtrare de tip trece-jos. Aceasta din urm poate fi consecina unei operaii de
eliminare a zgomotului sau poate fi rezultatul unei limitri a sistemului de achiziie.
Exist patru metode principale de recuperare a originalului din imaginea
estompat:
Filtrare trece-sus
Unsharp Masking
Deconvoluie
Detecie de contur
n principiu toate aceste metode acioneaz asupra frecvenelor nalte n
sensul accenturii lor. Este inevitabil ca n urma acestei operaii s nu apar i o
cantitate de zgomot situat de frecvene nalte, pn atunci invizibil.
ntruct efectul filtrrii trece-sus a fost studiat n prima parte a acestei lucrri,
iar detecia de contur a fost discutat n lucrarea anterioar, n continuare se vor
studia celelalte dou metode:
Unsharp Masking
Aceasta este o tehnic de punere n eviden a frecvenelor nalte
dintr-o imagine care s evite inconvenientele simplei filtrri trece-sus. Algoritmul
este urmtorul:
1.
2.
3.
4.
22
23
23
24
Translaia
Fie B o mulime coninut n spaiul euclidian E i x un punct din E.
Translaia mulimii B cu punctul x, notat Bx, este dat de:
Bx @ b x b B
(5.1)
(5.2)
24
25
25
26
26
27
Eroziunea
Eroziunea imaginii X cu elementul structural B, notat X $ B , este dat de:
X$B
bB
X b
(5.3)
27
28
Deschiderea
Deschiderea lui X prin elementul structural B, notat X B este definit de:
X oB @ X $ B B
(5.4)
28
29
Deschiderea
Deschiderea lui X prin B este mulimea punctelor din X care sunt coninute n
acele translaii ale lui B total incluse n X. De obicei aceast operaie ndeprteaz
detaliile imaginii care nu pot fi incluse n elementul structural. Deschiderea este un
filtru binar neliniar, care ndeprteaz din imagine acele caracteristici mai mici
dect o mrime dat (elementul structural).
Deschiderea se poate face prin eroziune urmat de dilatare cu elementul
structural dorit.
Pentru cazul particular n care elementul structural este un ptrat de 3x3
pixeli se poate utiliza funcia Matlab BWMORPH.
B=bwmorph(A,'open') realizeaz deschiderea imaginii binare A
cu un element structural ptrat de 3x3 pixeli.
29
30
4.1.1 nchiderea
nchiderea lui X prin elementul structural B, notat X B , este dat de:
X B @ X B $ B
(5.5)
nchiderea este dualul deschiderii, n acelai sens n care dilatarea este dualul
eroziunii. De obicei nchide golurile, sau caracteristicile de grani ale fondului ce
nu pot fi incluse n elementul structural.
nchiderea
Cu alte cuvinte, i nchiderea este un filtru binar neliniar, care ndeprteaz,
de aceast dat din fundal, caracteristicile mai mici dect o mrime dat, mrimea
fiind dictat de elementul structural.
30
31
31
32
a = mmreadgray('circuit_bw.tif');
mmshow(a);
32
33
gri. Dac imaginea dat este color, ea este convertit tot ntr-o imagine cu
nuane de gri. Formatele suportate sunt tif, hdf, jpg, bmp, pcx, xwd.
Funcia MMSHOW afieaz o imagine binar sau n trepte de gri i opional
o suprapune cu pn la 6 imagini binare cu urmtoarele culori: rou, verde,
albastru, galben, magenta i cyan.
Filtrarea
b = mmareaopen(a,200);
mmshow(b);
33
34
mmshow(a,b);
Citirea imaginii
f = mmreadgray('stext.tif');
mmshow(f);
Etichetarea literelor
34
35
fl=mmlabel(f,mmsebox);
mmlblshow(fl);
mmseshow(b1)
b1 = 1
b2 = 1
b2 = mmsebox(2);
mmseshow(b2)
35
36
Cuvintele sunt formate din litere apropiate. n acest caz folosim un element
de form dreptunghiular cu nlimea de 7 pixeli i grosimea de 11 pixeli, astfel
inct 2 pixeli care pot fi ncadrai n dreptunghi vor aparine aceluiai cuvnt
(aceleiai componente conectate). Valorile 7 si 11 au fost alese experimental i
depind de mrimea fontului.
sew= mmimg2se(logical(uint8(ones(7,11))));
mmseshow(sew)
Etichetarea paragrafelor
36
37
37
38
f = mmregmax(d,mmsebox);
mmshow(e,f);
n aceast etap se afieaz separat imaginea iniial i cea final (n care s-a
evideniat lipsa unei tablete).
mmshow(a);
mmshow(f);
38