+ All Categories
Home > Documents > Referat Matlab

Referat Matlab

Date post: 17-Sep-2015
Category:
Upload: alin-bobeica
View: 54 times
Download: 4 times
Share this document with a friend
Description:
referat MATLAB
52
Universitatea “Valahia” din Targoviste Facultatea de Inginerie Electrica, Specializarea: Telecomunicatii, Anul IV, Semestrul I Student: Dragan Sebastian-Ionut Universitatea "Valahia" din Targoviste Sisteme & Tehnologii Avansate de Telecomunicatii Codare & Prelucrare Video - tema de laborator Matlab- Universitatea “Valahia” din Targoviste Facultatea de Inginerie Electrica, Specializarea: Telecomunicatii, Anul IV, Semestrul I Student: Dragan Sebastian-Ionut 1
Transcript

Universitatea Valahia din Targoviste

Facultatea de Inginerie Electrica, Specializarea: Telecomunicatii, Anul IV, Semestrul I

Student: Dragan Sebastian-Ionut

Universitatea "Valahia" din Targoviste

Sisteme & Tehnologii Avansate de TelecomunicatiiCodare & Prelucrare Video

- tema de laborator Matlab-

Student: Dragan Sebastian-Ionut

SAT, Anul II

2014

Codare & prelucrare video

- tema de laborator -1. Construiti o imagine de dimensiune 512x512 reprezentand un patrat centrat cu latura de 128 de pixeli.

a. Generati 4 astfel de imagini avand patratul central cu nivelul de gri 128, iar fondul 0, respectiv fondul 80, 160, 255.

b. Afisati imaginile folosind functiile image(), imagesc(), imshow(), colormap(gray()).

c. Afisati si comparati cele 4 imagini. Comentati.

Generam imaginea de 512x512 folosita ca fundal dupa ce am creat functia urmatoare in directorul C:\Program Files\MATLAB\R2011b\patrat.m . Numele fisierului trebuie sa fie neaparat patrat.m pentru ca apelarea sa functioneze:

function a=patrat(N,F)for i=1:N; for j=1:N; a(i,j)=F; endendend

Introducem comenzile urmatoare in Command Window:

>>a=patrat(512,0);

>> image(a)

>> colormap(gray(256))

Vom obtine imaginea din figura alaturata (>>):

Pentru a reprezenta un patrat cu latura de 128 de pixeli in interiorul imaginii de 512x512 vom crea fisierul C:\Program Files\MATLAB\R2011b\patratinpatrat.m continand functia:

function b=patratinpatrat(N,L,F)for i=1:N; for j=1:N; b(i,j)=F; endendL1=(512-128)/2;C1=L1;for i=L1:L1+128; for j=C1:C1+128; b(i,j)=L; endendDupa ce am scris si salvat functia, ne intoarcem in Command Window si introducem urmatoarele comenzi de apelare:

>> b=patratinpatrat(N,L,F);

>> image(b)

In functia patratinpatrat(N,L,F) avem:

*N este marimea imaginii (512 in cazul nostru)

*L este latura patratului centrat in imagine (128 in cazul nostrul)

*F este culoarea fundalului imaginii noastre (0, 80, 160, 255), unde:

F=0 este valoarea pentru negru

F=255 este valoarea pentru alb imaculat

Toate valorile cuprinse intre 0 si 255 sunt nivele de gri, tinand cont de faptul ca am folosit paleta de culori colormap(gray(256)).

In continuare vom afisa aceeasi imagine de mai multe ori folosind diferite niveluri de gri din paleta colormap(gray(256).

Vom folosi valorile 0, 80, 160, 255 pentru a sesiza diferentele de nivel de gri mai usor, avand in vedere ca un ochi uman perfect distinge in jur de 200 de niveluri diferite de gri.

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:

Pentru imagesc(b) obtinem:

Pentru imshow(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; endendL=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;endIn Command Window introducem urmatoarele comezi:

>>c=benzimach(512,6)*Atentie sa nu punem ; dupa ce inchideti paranteza

>>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.

In figura din dreapta avem o imagine patrata cu un fundal alb si 4 cercuri negre peste care pare a fi suprapus un alt patrat asezat in centrul imaginii, acoperind cate un sfert din cercuri la colturile patratului aparent. Patratul in sine nu exista deoarece este de aceeasi culoare cu fundalul, insa mintile noastre il sugereaza ca urmare a faptului ca are colturile marcate, acestea fiind sugerate de cele 4 cercuri asezate in mod convenabil.

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>d=cercinpatrat(512,128,0,255);

>>image(d)

Astfel, obtinem imaginea urmatoare:

Daca vom introduce apoi in Command Window comenzile:

>>e=[d d; d d]

>>image(e)

Vom obtine imaginea urmatoarea:

Continuand cu introducerea de date in Command Window, vom adauga comenzile:

>> e(256:512+256,256:512+256)=255;

>> image(e)

Astfel obtinem imaginea la care trebuia sa ajungem:

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.

RGB1. 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

Cream fisierul imcerc.m in folderul work care sa

contina urmatoarea functie Matlab:

function a=imcerc(M,N,R,L,F);for i=1:M; for j=1:N; if (i-M/2)^2+(j-N/2)^2> c=imcerc(328,500,128,255,0);

>> image(c)

>> colormap(gray(256));

Vom obtine imaginea din dreapta:

Scriem in Command Window:

>> whos

Name Size Bytes Class

c 328x500 1312000 double

s 328x500x3 492000 uint8

Observam ca imaginea c, adica cercul pe fundal negru foloseste mai multi biti decat imaginea cu floarea policolorata s (floare.jpg), deoarece c este in format .bmp, adica bitmap - harta de biti, iar s (floare.jpg) este in format comprimat cu extensie .jpg care este un acronim pentru Joint Photographic Experts Group.

uint8( ) = Conversie pe 8 biti fara semn in numere intregi;

double( ) = Conversie cu precizie in numere reale.

c) Scriem in Command Window:

>> r=s(1:328,1:500,1);

>> image(r) % imaginea din dreapta =>

>> r=s(1:328,1:500,2);

>> image(r) % > 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) % > r=s(1:328,1:500,2);

>> fb(:,:,3)=s(:,:,3);

>> fb(:,:,1)=0;

>> fb(:,:,2)=0;

>> image(fb) % imagine dreapta =>

>> whos

Name Size Bytes Class Attributes

ans 328x500x3 492000 uint8

c 328x500 1312000 double

fb 328x500x3 492000 uint8

fr 328x500x3 492000 uint8

fv 328x500x3 492000 uint8

fr 328x500x3 492000 uint8

r 328x500 164000 uint8

s 328x500x3 492000 uint8

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> 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)

c) Cream fisierul imsfera.m care sa contina urmatoarele linii de cod:

function out=imsfera(N,R,L,F,x,y)for i=1:N; for j=1:N; if (i-x)^2+(j-y)^2> sf=imsfera(512,100,128,0,392,200);

>> image(sf) % imagine dreapta =>

>> 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) % > 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 =>

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 Attributes

X 480x500 1920000 double

caption 2x1 4 char

map 220x3 5280 double

>> image(X) % imagine dreapta =>

>> colormap(gray(256) % imagine dreapta =>

>> r(:,:,1)=X;

>> r(:,:,2)=0;

>> r(:,:,3)=0;

>> r=uint8(r);

>> image(r) % > 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) %


Recommended