Sunteți pe pagina 1din 19

Proiect Procesarea Numerica a Imaginilor

Cuprins

1. Tema proiectului.................................................................................................... 2 2. Considerente generale ........................................................................................... 2 3. a.Metode de implementare......................................................................................4 b.Surse ..................................................................................................................... 4. Bibliografie...........................................................................................................19

1.

Tema proiectului

Sa se realizeze o aplicatie ce implementeaza diferite transformari geometrice asupra unei imagini (translatie rotatie zoom in!out etc".

2.

Considerente generale

Prin transformare afina reprezintam o clasa de transformari geometrice liniare 2# in care $arta de puncte ( pi%elii de pe pozitia ( %1 &1 " " este transformata intr'o alta $arta de pi%eli ( a( %2 &2 ) " aplicand o combinatie liniara de translatie rotatie scalare. *peratia de transformare afina este data de relatia+ ,legand in mod particular , si B -om obtine cele 3 operatii de baza (ranslatie rotatie scalare ". 1. ,legand doar matricea B transformarea de-ine o translatie+

2. * rotatie pura utilizeaza matricea , astfel+

3. .ar pentru o scalare matricile sunt

2.1. Translatia /eprezinta deplasarea unui punct de imagine ( pi%el " din pozitia ( %1 &1 " a imaginii de intrare in pozitia ( %2 &2 " a imaginii de iesire. *peratia este definita de relatiile+
3

0nde % s & sunt specificate de utilizator ca si deplasament. 2.2. Rotatia /eprezinta deplasarea unui punct de imagine ( pi%el " din pozitia ( %1 &1 " a imaginii de intrare in pozitia ( %2 &2 " a imaginii de iesire rotind in 1urul originii * cu cu ung$iul . *peratia este definita de relatiile+

2.3. Scalarea geometrica (Scale, Zoom, Shrink, Pixel Replication, Pixel Interpolation, Subsampl) 2ste cunoscuta si ca operatia de zoom asupra unei imagini. ,ceasta operatie consta in inlocuirea sau interpolarea dintre pi%elul curent si pi%elii -ecini. Scalarea -a produce la iesire o imagine comprimata sau una e%pandata. 2%ista doua metode de 3sub'sampling4+ ' prima metoda alege -aloarea unui pi%el ca 3model4 ce -a inlocui un bloc de 2%2 pi%eli pe cand ' a doua metoda realizeaza o interpolare intre -aloarea pi%elului si -ecini

2.4. Oglindirea 2ste operatia de transformare a unei imagini originale intr'o imagine finala prin reflectarea fiecarui element ( %1 &1" din imaginea initiala in ( %2 &2 " fata de o a%a indicata de utilizator. Cazuri particulare 1. refle%ia fata a%a -erticala pe abscisa %5
4

2. refle%ia fata a%a orizontala de coordonata &5

3. refle%ia fata de o a%a orientata in orice directie si trecand prin ( %5 &5 "

3. Metode de implementare ,plicatia de fata a fost realizata in Borland C66 Builder 7.5. *peratiile care trebuiesc efectuate asupra imaginilor se pot alege fie dintr'un meniu fie cu a1utorul butoanelor corespunzatoare. Meniul are pentru inceput doar cate-a elemente acti-e celelalte de-enind acti-e atunci cand utilizatorul a terminat de incarcat o imagine (jpg sau bmp),la acti-area optiunii File-> pen sau apasand butonul ! pen"# ,cum utilizatorul are la indemana mai multe !unelte" cu care poate incepe procesul de prelucrare geometrica asupra imaginilor. *ptiunile de care dispune sunt + rotire imagine cu 95 sau 185 la dreapta sau la stanga consecuti- sau o singura data rotire cu un ung$i de -aloare specificata de utilizator translatie zoom in zoom out zoom in pe pozitia mouse'ului pe suprafata imaginii etc. a. Rotire cu 90 s re drea ta!stanga" sau cu 1#0
for( int y=0; y<source->Height; y++ ) { pixels = (RGB R!"#$%)source->&c'n#ine(y); for (int x=0; x<source->*i+th; x++) +est->,'n-'s->"ixels(source->Height-y-.)(x)= ,olor(RGB(pixels(x)/rg0tRe+1pixels(x)/rg0tGreen1pixels(x)/rg0tBlue)); 2

,ceasta rotatie se poate face de mai multe ori pana se re-ine la forma initiala a imaginii incarcate. #aca dorim sa realizam o singura rotatie de 95 la dreapta atunci alegem optiunea de meniu $%it Image->Rotate Right, sau printr'un clic9
:

pe butonul radio corespunzator din partea dreapta a aplicatiei.(cele 2 actiuni acti-are optiune de meniu sau selectare buton radio sunt interdependente + cand se acti-eaza optiunea de meniu este selectat si butonul radio si in-ers". #e la imaginea initiala

prin rotire la dreapta cu 95 se obtine +

/otatia spre stanga cu 95 se realizeaza in mod asemanator prin intermediul optiunii de meniu $%it Image->Rotate &e't sau prin selectarea butonului radio corespunzator. /otirea imaginii incarcate cu 185 se poate realiza prin selectarea butonului radio care se refera la aceasta actiune sau prin apasarea de 2 ori consecuti- a butonului de rotire dreapta sau rotire stanga . a. Rotire cu un ung$i dorit ,plicatia ofera utilizatorului si posibilitatea de a realiza o rotire a imaginii cu un ung$i dorit prin selectarea butonului radio %ustom angle si apoi prin acti-area scrollbar'ului corespunzator. /e-enirea la forma initiala se face acti-and butonul de /efres$ butonul radio No rotation sau din meniul &ile'(No )dit. Tot in cadrul acestei optiuni se poate alege si culoarea de bac9ground care sa acopere spatiul alb ramas in urma rotirii imaginii cu un anumit ung$i. ,ceasta culoare se alege din paleta de culori a sistemului.

'ngle=&crollB'r.->"osition ; 334'sur' unghiului in gr'+e &rcBit4'p=ne5 Gr'phics66 Bit4'p; 7estBit4'p=ne5 Gr'phics66 Bit4'p; &rcBit4'p = source8'in; 33&rcBit4'p->9ssign( !4'ge.->"icture->Bit4'p ); 33&rcBit4'p->"ixel:or4't = !4'ge.->"icture->Bit4'p->"ixel:or4't; flo't r'+i'ns=(;%</.=.>%'ngle)3<>0; 33con-ersie l' r'+i'ni flo't cosine=(flo't)cos(r'+i'ns); flo't sine=(flo't)sin(r'+i'ns); flo't "oint.x=(-&rcBit4'p->Height%sine); flo't "oint.y=(&rcBit4'p->Height%cosine); flo't "oint;x=(&rcBit4'p->*i+th%cosine-&rcBit4'p->Height%sine); flo't "oint;y=(&rcBit4'p->Height%cosine+&rcBit4'p->*i+th%sine); flo't "oint<x=(&rcBit4'p->*i+th%cosine); flo't "oint<y=(&rcBit4'p->*i+th%sine); flo't 4inx=4in(014in("oint.x14in("oint;x1"oint<x)));

flo't 4iny=4in(014in("oint.y14in("oint;y1"oint<y))); flo't 4'xx=4'x("oint.x14'x("oint;x1"oint<x)); flo't 4'xy=4'x("oint.y14'x("oint;y1"oint<y)); 7estBit4'p*i+th=(int)ceil(f'0s(4'xx)-4inx); 7estBit4'pHeight=(int)ceil(f'0s(4'xy)-4iny); 7estBit4'p->Height=7estBit4'pHeight;33(7estBit4'pHeight>source8'in->Height? source8'in->Height67estBit4'pHeight ); 7estBit4'p->*i+th=7estBit4'p*i+th;33(7estBit4'p*i+th>source8'in->*i+th? source8'in->*i+th 67estBit4'p*i+th ); for (int x=0; x<7estBit4'p->*i+th; x++) for( int y=0; y<7estBit4'p->Height; y++ ) 7estBit4'p->,'n-'s->"ixels(x)(y) = ,olor(color); for(int x=0;x<7estBit4'p*i+th;x++) { for(int y=0;y<7estBit4'pHeight;y++) { int &rcBit4'px=(int)((x+4inx)%cosine+(y+4iny)%sine); int &rcBit4'py=(int)((y+4iny)%cosine-(x+4inx)%sine); if(&rcBit4'px>=0@@&rcBit4'px<&rcBit4'p->*i+th@@&rcBit4'py>=0@@ &rcBit4'py<&rcBit4'p->Height) { 7estBit4'p->,'n-'s->"ixels(x)(y)= &rcBit4'p->,'n-'s->"ixels(&rcBit4'px)(&rcBit4'py); 2 22 !4'ge.->"icture->Bit4'p=7estBit4'p;

*. Translatie Translatarea imaginii se face atat pe a%a * x cat si pe a%a *( cu o anumita -aloare specificata din codul aplicatiei in cazul de fata -aloarea fiind 3:.
RGB R!"#$% pixels; ,olor color; for( int y=0; y<source->Height; y++ ) { pixels = (RGB R!"#$%)source->&c'n#ine(y); for (int x=0; x<source->*i+th; x++) +est->,'n-'s->"ixels(x+<A)(y+<A) ,olor(RGB(pixels(x)/rg0tRe+1pixels(x)/rg0tGreen1pixels(x)/rg0tBlue)); 2

&e o0ser-' pixelii +e culo're 'l0' c're r'4'n in ur4' oper'tiiei/

c. +oom in!out A. *peratiile de zoom in aupra imaginilor sunt realizate in 2 moduri + prin redarea intregii imagini marite (plimbarea in cadrul imaginii realizandu'se cu a1utorul unor butoane stanga dreapta sus 1os " sau prin marirea zonei din 1urul pozitiei coordonatelor de mouse atunci cand se efectueaza clic9 pe imagine. .n ambele situatii metoda folosita este de multiplicarea pi%elilor. ,stfel un pi%el din imaginea initiala transmite -aloarea sa in imaginea rezultata la inca 3 pi%eli -ecini lui. ,sfel dupa primul zoom imaginea ce rezulta -a a-ea dimensiuni de doua ori mai mari decat imaginea originala dupa al doilea zoom de 4 ori samd. ,plicatia permite un zoom dublu prin apasarea consecuti-a a butonului de zoom in multiplu la actionarea butonului . 2%emple + sau zoom

15

11

sau, la coor%onate %e mouse

12

13

334ultiplic're pixeli poBC =0; for( int y=0; y<source8'in->Height; y++ ) { poBD=0; pixels = (RGB R!"#$%)source->&c'n#ine(y); for (int x=0; x<source8'in->*i+th; x++) { for (i=0; i<=.; i++) for (E=0; E<;; E++) +est->,'n-'s->"ixels(poBD+i-poB8x)(poBC+E-poB8y) = ,olor(RGB(pixels(x)/rg0tRe+1pixels(x)/rg0tGreen1pixels(x)/rg0tBlue )); poBD = poBD + ;; 2 poBC = poBC + ;; 2

B. *peratia de zoom out aupra imaginilor se bazeaza pe reducerea numarlui de pi%eli prin inlocuirea a 4 pi%eli -ecini din imaginea originala cu un singur pi%el in imaginea rezultata(operatie in-ersa decat zoom out".

14

1:

33re+ucere pixeli poBC =0; for( int y=0; y<source e4p->Height; y+=; ) { poBD=0; pixels = (RGB R!"#$%)source e4p->&c'n#ine(y); for (int x=0; x<source e4p->*i+th; x+=;) { +est->,'n-'s->"ixels(poBD)(poBC ) = ,olor(RGB(pixels(x)/rg0tRe+1pixels(x)/rg0tGreen1pixels(x)/rg0tBlue)); +est8'in->,'n-'s->"ixels(poBD)(poBC) = ,olor(RGB(pixels(x)/rg0tRe+1pixels(x)/rg0tGreen1pixels(x)/rg0tBlue)); poBD = poBD + .; 2 poBC = poBC + .; 2

d. Oglindirea,simetria fata de o- si o./

17

1;

Simetria fata de a%a *% +


RGB R!"#$% pixels; ,olor color; for( int y=0; y<source->Height; y++ ) { pixels = (RGB R!"#$%)source->&c'n#ine(y); for (int x=0; x<source->*i+th; x++) +est->,'n-'s->"ixels(x)(source->Height-y) = ,olor(RGB(pixels(x)/rg0tRe+1pixels(x)/rg0tGreen1pixels(x)/rg0tBlue)); 2

Simetria fata de a%a *& +


RGB R!"#$% pixels; ,olor color; for( int y=0; y<source->Height; y++ ) { pixels = (RGB R!"#$%)source->&c'n#ine(y); for (int x=0; x<source->*i+th; x++) +est->,'n-'s->"ixels(source->*i+th-x)(y) = ,olor(RGB(pixels(x)/rg0tRe+1pixels(x)/rg0tGreen1pixels(x)/rg0tBlue)); 2 18

4. Bibliografie $tt 0!!a ollo.eed.us1.ro!2remus! sectiunea PNI $tt 0!!333.leunen.com!c*uilder!rot*m .$tml 333.google.ro

19

S-ar putea să vă placă și